diff --git a/libcxx/include/__format/buffer.h b/libcxx/include/__format/buffer.h --- a/libcxx/include/__format/buffer.h +++ b/libcxx/include/__format/buffer.h @@ -107,7 +107,7 @@ size_t __n = __str.size(); __flush_on_overflow(__n); - if (__n <= __capacity_) { + if (__n < __capacity_) { // push_back requires the buffer to have room for at least one character (so use <). _VSTD::copy_n(__str.data(), __n, _VSTD::addressof(__ptr_[__size_])); __size_ += __n; return; @@ -136,7 +136,7 @@ size_t __n = static_cast(__last - __first); __flush_on_overflow(__n); - if (__n <= __capacity_) { + if (__n < __capacity_) { // push_back requires the buffer to have room for at least one character (so use <). _VSTD::transform(__first, __last, _VSTD::addressof(__ptr_[__size_]), _VSTD::move(__operation)); __size_ += __n; return; @@ -158,7 +158,7 @@ /// A \c fill_n wrapper. _LIBCPP_HIDE_FROM_ABI void __fill(size_t __n, _CharT __value) { __flush_on_overflow(__n); - if (__n <= __capacity_) { + if (__n < __capacity_) { // push_back requires the buffer to have room for at least one character (so use <). _VSTD::fill_n(_VSTD::addressof(__ptr_[__size_]), __n, __value); __size_ += __n; return; diff --git a/libcxx/test/std/utilities/format/format.functions/format_tests.h b/libcxx/test/std/utilities/format/format.functions/format_tests.h --- a/libcxx/test/std/utilities/format/format.functions/format_tests.h +++ b/libcxx/test/std/utilities/format/format.functions/format_tests.h @@ -77,6 +77,397 @@ return result; } +template +void format_test_buffer_copy(TestFunction check) { + // *** copy *** + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check( + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + // *** copy + push_back *** + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "X"), + SV("{}X"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "X"), + SV("{}X"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "X"), + SV("{}X"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "X"), + SV("{}X"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check( + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "X"), + SV("{}X"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + // *** push_back + copy *** + + check(SV("X" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("X{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("X" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("X{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("X" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("X{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check(SV("X" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("X{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); + + check( + SV("X" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), + SV("X{}"), + SV("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")); +} + +template +void format_test_buffer_full(TestFunction check) { + // *** fill *** + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), SV("{:|<64}"), SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("{:|<128}"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("{:|<256}"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("{:|<512}"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("{:|<1024}"), + SV("")); + + // *** fill + push_back *** + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "X"), + SV("{:|<64}X"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "X"), + SV("{:|<128}X"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "X"), + SV("{:|<256}X"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "X"), + SV("{:|<512}X"), + SV("")); + + check(SV("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "X"), + SV("{:|<1024}X"), + SV("")); + + // *** push_back + fill *** + + check(SV("X" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("X{:|<64}"), + SV("")); + + check(SV("X" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("X{:|<128}"), + SV("")); + + check(SV("X" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("X{:|<256}"), + SV("")); + + check(SV("X" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("X{:|<512}"), + SV("")); + + check(SV("X" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" + "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"), + SV("X{:|<1024}"), + SV("")); +} + // Using a const ref for world and universe so a string literal will be a character array. // When passed as character array W and U have different types. template @@ -2727,6 +3118,12 @@ 9, 0); + // *** Test buffer boundaries format strings *** + if constexpr (modus == execution_modus::full) { + format_test_buffer_copy(check); + format_test_buffer_full(check); + } + // *** Test invalid format strings *** check_exception("The format string terminates at a '{'", SV("{")); check_exception("The replacement field misses a terminating '}'", SV("{:"), 42);