diff --git a/libcxx/test/std/utilities/format/format.functions/format.locale.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format.locale.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/format.locale.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/format.locale.pass.cpp @@ -10,6 +10,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -25,14 +27,15 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { - std::basic_string out = std::format(std::locale(), fmt, args...); +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { + std::basic_string out = std::format(std::locale(), fmt.template sv(), args...); if constexpr (std::same_as) if (out != expected) - std::cerr << "\nFormat string " << fmt << "\nExpected output " << expected << "\nActual output " << out - << '\n'; + std::cerr << "\nFormat string " << fmt.template sv() << "\nExpected output " << expected + << "\nActual output " << out << '\n'; assert(out == expected); }; diff --git a/libcxx/test/std/utilities/format/format.functions/format.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/format.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/format.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // Note this formatter shows additional information when tests are failing. // This aids the development. Since other formatters fail in the same fashion @@ -27,19 +29,21 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" #ifndef TEST_HAS_NO_LOCALIZATION # include +# include #endif -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { - std::basic_string out = std::format(fmt, args...); +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { + std::basic_string out = std::format(fmt.template sv(), args...); #ifndef TEST_HAS_NO_LOCALIZATION if constexpr (std::same_as) if (out != expected) - std::cerr << "\nFormat string " << fmt << "\nExpected output " << expected << "\nActual output " << out - << '\n'; + std::cerr << "\nFormat string " << fmt.template sv() << "\nExpected output " << expected + << "\nActual output " << out << '\n'; #endif assert(out == expected); }; 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 @@ -16,6 +16,7 @@ #include #include "make_string.h" +#include "string_literal.h" #include "test_macros.h" // In this file the following template types are used: @@ -178,49 +179,49 @@ // *** Valid input tests *** // Unsed argument is ignored. TODO FMT what does the Standard mandate? - check(SV("hello world"), SV("hello {}"), world, universe); - check(SV("hello world and universe"), SV("hello {} and {}"), world, universe); - check(SV("hello world"), SV("hello {0}"), world, universe); - check(SV("hello universe"), SV("hello {1}"), world, universe); - check(SV("hello universe and world"), SV("hello {1} and {0}"), world, universe); - - check(SV("hello world"), SV("hello {:_>}"), world); - check(SV("hello world"), SV("hello {:>8}"), world); - check(SV("hello ___world"), SV("hello {:_>8}"), world); - check(SV("hello _world__"), SV("hello {:_^8}"), world); - check(SV("hello world___"), SV("hello {:_<8}"), world); - - check(SV("hello >>>world"), SV("hello {:>>8}"), world); - check(SV("hello <<8}"), world); - check(SV("hello ^^^world"), SV("hello {:^>8}"), world); - - check(SV("hello $world"), SV("hello {:$>{}}"), world, 6); - check(SV("hello $world"), SV("hello {0:$>{1}}"), world, 6); - check(SV("hello $world"), SV("hello {1:$>{0}}"), 6, world); - - check(SV("hello world"), SV("hello {:.5}"), world); - check(SV("hello unive"), SV("hello {:.5}"), universe); - - check(SV("hello univer"), SV("hello {:.{}}"), universe, 6); - check(SV("hello univer"), SV("hello {0:.{1}}"), universe, 6); - check(SV("hello univer"), SV("hello {1:.{0}}"), 6, universe); - - check(SV("hello %world%"), SV("hello {:%^7.7}"), world); - check(SV("hello univers"), SV("hello {:%^7.7}"), universe); - check(SV("hello %world%"), SV("hello {:%^{}.{}}"), world, 7, 7); - check(SV("hello %world%"), SV("hello {0:%^{1}.{2}}"), world, 7, 7); - check(SV("hello %world%"), SV("hello {0:%^{2}.{1}}"), world, 7, 7); - check(SV("hello %world%"), SV("hello {1:%^{0}.{2}}"), 7, world, 7); - - check(SV("hello world"), SV("hello {:_>s}"), world); - check(SV("hello $world"), SV("hello {:$>{}s}"), world, 6); - check(SV("hello world"), SV("hello {:.5s}"), world); - check(SV("hello univer"), SV("hello {:.{}s}"), universe, 6); - check(SV("hello %world%"), SV("hello {:%^7.7s}"), world); - - check(SV("hello #####uni"), SV("hello {:#>8.3s}"), universe); - check(SV("hello ##uni###"), SV("hello {:#^8.3s}"), universe); - check(SV("hello uni#####"), SV("hello {:#<8.3s}"), universe); + check.template operator()<"hello {}">(SV("hello world"), world, universe); + check.template operator()<"hello {} and {}">(SV("hello world and universe"), world, universe); + check.template operator()<"hello {0}">(SV("hello world"), world, universe); + check.template operator()<"hello {1}">(SV("hello universe"), world, universe); + check.template operator()<"hello {1} and {0}">(SV("hello universe and world"), world, universe); + + check.template operator()<"hello {:_>}">(SV("hello world"), world); + check.template operator()<"hello {:>8}">(SV("hello world"), world); + check.template operator()<"hello {:_>8}">(SV("hello ___world"), world); + check.template operator()<"hello {:_^8}">(SV("hello _world__"), world); + check.template operator()<"hello {:_<8}">(SV("hello world___"), world); + + check.template operator()<"hello {:>>8}">(SV("hello >>>world"), world); + check.template operator()<"hello {:<>8}">(SV("hello <<8}">(SV("hello ^^^world"), world); + + check.template operator()<"hello {:$>{}}">(SV("hello $world"), world, 6); + check.template operator()<"hello {0:$>{1}}">(SV("hello $world"), world, 6); + check.template operator()<"hello {1:$>{0}}">(SV("hello $world"), 6, world); + + check.template operator()<"hello {:.5}">(SV("hello world"), world); + check.template operator()<"hello {:.5}">(SV("hello unive"), universe); + + check.template operator()<"hello {:.{}}">(SV("hello univer"), universe, 6); + check.template operator()<"hello {0:.{1}}">(SV("hello univer"), universe, 6); + check.template operator()<"hello {1:.{0}}">(SV("hello univer"), 6, universe); + + check.template operator()<"hello {:%^7.7}">(SV("hello %world%"), world); + check.template operator()<"hello {:%^7.7}">(SV("hello univers"), universe); + check.template operator()<"hello {:%^{}.{}}">(SV("hello %world%"), world, 7, 7); + check.template operator()<"hello {0:%^{1}.{2}}">(SV("hello %world%"), world, 7, 7); + check.template operator()<"hello {0:%^{2}.{1}}">(SV("hello %world%"), world, 7, 7); + check.template operator()<"hello {1:%^{0}.{2}}">(SV("hello %world%"), 7, world, 7); + + check.template operator()<"hello {:_>s}">(SV("hello world"), world); + check.template operator()<"hello {:$>{}s}">(SV("hello $world"), world, 6); + check.template operator()<"hello {:.5s}">(SV("hello world"), world); + check.template operator()<"hello {:.{}s}">(SV("hello univer"), universe, 6); + check.template operator()<"hello {:%^7.7s}">(SV("hello %world%"), world); + + check.template operator()<"hello {:#>8.3s}">(SV("hello #####uni"), universe); + check.template operator()<"hello {:#^8.3s}">(SV("hello ##uni###"), universe); + check.template operator()<"hello {:#<8.3s}">(SV("hello uni#####"), universe); // *** sign *** check_exception("The format-spec should consume the input or end with a '}'", SV("hello {:-}"), world); @@ -262,9 +263,9 @@ #endif // Precision 0 allowed, but not useful for string arguments. - check(SV("hello "), SV("hello {:.{}}"), world, 0); + check.template operator()<"hello {:.{}}">(SV("hello "), world, 0); // Precision may have leading zeros. Secondly tests the value is still base 10. - check(SV("hello 0123456789"), SV("hello {:.000010}"), STR("0123456789abcdef")); + check.template operator()<"hello {:.000010}">(SV("hello 0123456789"), STR("0123456789abcdef")); check_exception("A format-spec arg-id replacement shouldn't have a negative value", SV("hello {:.{}}"), world, -1); check_exception("A format-spec arg-id replacement exceeds the maximum supported value", SV("hello {:.{}}"), world, ~0u); @@ -291,36 +292,36 @@ (void)check; #ifndef TEST_HAS_NO_UNICODE // ß requires one column - check(SV("aßc"), SV("{}"), STR("aßc")); + check.template operator()<"{}">(SV("aßc"), STR("aßc")); - check(SV("aßc"), SV("{:.3}"), STR("aßc")); - check(SV("aß"), SV("{:.2}"), STR("aßc")); - check(SV("a"), SV("{:.1}"), STR("aßc")); + check.template operator()<"{:.3}">(SV("aßc"), STR("aßc")); + check.template operator()<"{:.2}">(SV("aß"), STR("aßc")); + check.template operator()<"{:.1}">(SV("a"), STR("aßc")); - check(SV("aßc"), SV("{:3.3}"), STR("aßc")); - check(SV("aß"), SV("{:2.2}"), STR("aßc")); - check(SV("a"), SV("{:1.1}"), STR("aßc")); + check.template operator()<"{:3.3}">(SV("aßc"), STR("aßc")); + check.template operator()<"{:2.2}">(SV("aß"), STR("aßc")); + check.template operator()<"{:1.1}">(SV("a"), STR("aßc")); - check(SV("aßc---"), SV("{:-<6}"), STR("aßc")); - check(SV("-aßc--"), SV("{:-^6}"), STR("aßc")); - check(SV("---aßc"), SV("{:->6}"), STR("aßc")); + check.template operator()<"{:-<6}">(SV("aßc---"), STR("aßc")); + check.template operator()<"{:-^6}">(SV("-aßc--"), STR("aßc")); + check.template operator()<"{:->6}">(SV("---aßc"), STR("aßc")); // \u1000 requires two columns - check(SV("a\u1110c"), SV("{}"), STR("a\u1110c")); + check.template operator()<"{}">(SV("a\u1110c"), STR("a\u1110c")); - check(SV("a\u1100c"), SV("{:.4}"), STR("a\u1100c")); - check(SV("a\u1100"), SV("{:.3}"), STR("a\u1100c")); - check(SV("a"), SV("{:.2}"), STR("a\u1100c")); - check(SV("a"), SV("{:.1}"), STR("a\u1100c")); + check.template operator()<"{:.4}">(SV("a\u1100c"), STR("a\u1100c")); + check.template operator()<"{:.3}">(SV("a\u1100"), STR("a\u1100c")); + check.template operator()<"{:.2}">(SV("a"), STR("a\u1100c")); + check.template operator()<"{:.1}">(SV("a"), STR("a\u1100c")); - check(SV("a\u1100c"), SV("{:-<4.4}"), STR("a\u1100c")); - check(SV("a\u1100"), SV("{:-<3.3}"), STR("a\u1100c")); - check(SV("a-"), SV("{:-<2.2}"), STR("a\u1100c")); - check(SV("a"), SV("{:-<1.1}"), STR("a\u1100c")); + check.template operator()<"{:-<4.4}">(SV("a\u1100c"), STR("a\u1100c")); + check.template operator()<"{:-<3.3}">(SV("a\u1100"), STR("a\u1100c")); + check.template operator()<"{:-<2.2}">(SV("a-"), STR("a\u1100c")); + check.template operator()<"{:-<1.1}">(SV("a"), STR("a\u1100c")); - check(SV("a\u1110c---"), SV("{:-<7}"), STR("a\u1110c")); - check(SV("-a\u1110c--"), SV("{:-^7}"), STR("a\u1110c")); - check(SV("---a\u1110c"), SV("{:->7}"), STR("a\u1110c")); + check.template operator()<"{:-<7}">(SV("a\u1110c---"), STR("a\u1110c")); + check.template operator()<"{:-^7}">(SV("-a\u1110c--"), STR("a\u1110c")); + check.template operator()<"{:->7}">(SV("---a\u1110c"), STR("a\u1110c")); #endif // TEST_HAS_NO_UNICODE } @@ -345,23 +346,23 @@ void format_test_bool(TestFunction check, ExceptionTest check_exception) { // *** align-fill & width *** - check(SV("answer is 'true '"), SV("answer is '{:7}'"), true); - check(SV("answer is ' true'"), SV("answer is '{:>7}'"), true); - check(SV("answer is 'true '"), SV("answer is '{:<7}'"), true); - check(SV("answer is ' true '"), SV("answer is '{:^7}'"), true); + check.template operator()<"answer is '{:7}'">(SV("answer is 'true '"), true); + check.template operator()<"answer is '{:>7}'">(SV("answer is ' true'"), true); + check.template operator()<"answer is '{:<7}'">(SV("answer is 'true '"), true); + check.template operator()<"answer is '{:^7}'">(SV("answer is ' true '"), true); - check(SV("answer is 'false '"), SV("answer is '{:8s}'"), false); - check(SV("answer is ' false'"), SV("answer is '{:>8s}'"), false); - check(SV("answer is 'false '"), SV("answer is '{:<8s}'"), false); - check(SV("answer is ' false '"), SV("answer is '{:^8s}'"), false); + check.template operator()<"answer is '{:8s}'">(SV("answer is 'false '"), false); + check.template operator()<"answer is '{:>8s}'">(SV("answer is ' false'"), false); + check.template operator()<"answer is '{:<8s}'">(SV("answer is 'false '"), false); + check.template operator()<"answer is '{:^8s}'">(SV("answer is ' false '"), false); - check(SV("answer is '---true'"), SV("answer is '{:->7}'"), true); - check(SV("answer is 'true---'"), SV("answer is '{:-<7}'"), true); - check(SV("answer is '-true--'"), SV("answer is '{:-^7}'"), true); + check.template operator()<"answer is '{:->7}'">(SV("answer is '---true'"), true); + check.template operator()<"answer is '{:-<7}'">(SV("answer is 'true---'"), true); + check.template operator()<"answer is '{:-^7}'">(SV("answer is '-true--'"), true); - check(SV("answer is '---false'"), SV("answer is '{:->8s}'"), false); - check(SV("answer is 'false---'"), SV("answer is '{:-<8s}'"), false); - check(SV("answer is '-false--'"), SV("answer is '{:-^8s}'"), false); + check.template operator()<"answer is '{:->8s}'">(SV("answer is '---false'"), false); + check.template operator()<"answer is '{:-<8s}'">(SV("answer is 'false---'"), false); + check.template operator()<"answer is '{:-^8s}'">(SV("answer is '-false--'"), false); // *** Sign *** check_exception("A sign field isn't allowed in this format-spec", SV("{:-}"), true); @@ -400,75 +401,75 @@ template void format_test_bool_as_integer(TestFunction check, ExceptionTest check_exception) { // *** align-fill & width *** - check(SV("answer is '1'"), SV("answer is '{:<1d}'"), true); - check(SV("answer is '1 '"), SV("answer is '{:<2d}'"), true); - check(SV("answer is '0 '"), SV("answer is '{:<2d}'"), false); + check.template operator()<"answer is '{:<1d}'">(SV("answer is '1'"), true); + check.template operator()<"answer is '{:<2d}'">(SV("answer is '1 '"), true); + check.template operator()<"answer is '{:<2d}'">(SV("answer is '0 '"), false); - check(SV("answer is ' 1'"), SV("answer is '{:6d}'"), true); - check(SV("answer is ' 1'"), SV("answer is '{:>6d}'"), true); - check(SV("answer is '1 '"), SV("answer is '{:<6d}'"), true); - check(SV("answer is ' 1 '"), SV("answer is '{:^6d}'"), true); + check.template operator()<"answer is '{:6d}'">(SV("answer is ' 1'"), true); + check.template operator()<"answer is '{:>6d}'">(SV("answer is ' 1'"), true); + check.template operator()<"answer is '{:<6d}'">(SV("answer is '1 '"), true); + check.template operator()<"answer is '{:^6d}'">(SV("answer is ' 1 '"), true); - check(SV("answer is '*****0'"), SV("answer is '{:*>6d}'"), false); - check(SV("answer is '0*****'"), SV("answer is '{:*<6d}'"), false); - check(SV("answer is '**0***'"), SV("answer is '{:*^6d}'"), false); + check.template operator()<"answer is '{:*>6d}'">(SV("answer is '*****0'"), false); + check.template operator()<"answer is '{:*<6d}'">(SV("answer is '0*****'"), false); + check.template operator()<"answer is '{:*^6d}'">(SV("answer is '**0***'"), false); // Test whether zero padding is ignored - check(SV("answer is ' 1'"), SV("answer is '{:>06d}'"), true); - check(SV("answer is '1 '"), SV("answer is '{:<06d}'"), true); - check(SV("answer is ' 1 '"), SV("answer is '{:^06d}'"), true); + check.template operator()<"answer is '{:>06d}'">(SV("answer is ' 1'"), true); + check.template operator()<"answer is '{:<06d}'">(SV("answer is '1 '"), true); + check.template operator()<"answer is '{:^06d}'">(SV("answer is ' 1 '"), true); // *** Sign *** - check(SV("answer is 1"), SV("answer is {:d}"), true); - check(SV("answer is 0"), SV("answer is {:-d}"), false); - check(SV("answer is +1"), SV("answer is {:+d}"), true); - check(SV("answer is 0"), SV("answer is {: d}"), false); + check.template operator()<"answer is {:d}">(SV("answer is 1"), true); + check.template operator()<"answer is {:-d}">(SV("answer is 0"), false); + check.template operator()<"answer is {:+d}">(SV("answer is +1"), true); + check.template operator()<"answer is {: d}">(SV("answer is 0"), false); // *** alternate form *** - check(SV("answer is +1"), SV("answer is {:+#d}"), true); - check(SV("answer is +1"), SV("answer is {:+b}"), true); - check(SV("answer is +0b1"), SV("answer is {:+#b}"), true); - check(SV("answer is +0B1"), SV("answer is {:+#B}"), true); - check(SV("answer is +1"), SV("answer is {:+o}"), true); - check(SV("answer is +01"), SV("answer is {:+#o}"), true); - check(SV("answer is +1"), SV("answer is {:+x}"), true); - check(SV("answer is +0x1"), SV("answer is {:+#x}"), true); - check(SV("answer is +1"), SV("answer is {:+X}"), true); - check(SV("answer is +0X1"), SV("answer is {:+#X}"), true); - - check(SV("answer is 0"), SV("answer is {:#d}"), false); - check(SV("answer is 0"), SV("answer is {:b}"), false); - check(SV("answer is 0b0"), SV("answer is {:#b}"), false); - check(SV("answer is 0B0"), SV("answer is {:#B}"), false); - check(SV("answer is 0"), SV("answer is {:o}"), false); - check(SV("answer is 0"), SV("answer is {:#o}"), false); - check(SV("answer is 0"), SV("answer is {:x}"), false); - check(SV("answer is 0x0"), SV("answer is {:#x}"), false); - check(SV("answer is 0"), SV("answer is {:X}"), false); - check(SV("answer is 0X0"), SV("answer is {:#X}"), false); + check.template operator()<"answer is {:+#d}">(SV("answer is +1"), true); + check.template operator()<"answer is {:+b}">(SV("answer is +1"), true); + check.template operator()<"answer is {:+#b}">(SV("answer is +0b1"), true); + check.template operator()<"answer is {:+#B}">(SV("answer is +0B1"), true); + check.template operator()<"answer is {:+o}">(SV("answer is +1"), true); + check.template operator()<"answer is {:+#o}">(SV("answer is +01"), true); + check.template operator()<"answer is {:+x}">(SV("answer is +1"), true); + check.template operator()<"answer is {:+#x}">(SV("answer is +0x1"), true); + check.template operator()<"answer is {:+X}">(SV("answer is +1"), true); + check.template operator()<"answer is {:+#X}">(SV("answer is +0X1"), true); + + check.template operator()<"answer is {:#d}">(SV("answer is 0"), false); + check.template operator()<"answer is {:b}">(SV("answer is 0"), false); + check.template operator()<"answer is {:#b}">(SV("answer is 0b0"), false); + check.template operator()<"answer is {:#B}">(SV("answer is 0B0"), false); + check.template operator()<"answer is {:o}">(SV("answer is 0"), false); + check.template operator()<"answer is {:#o}">(SV("answer is 0"), false); + check.template operator()<"answer is {:x}">(SV("answer is 0"), false); + check.template operator()<"answer is {:#x}">(SV("answer is 0x0"), false); + check.template operator()<"answer is {:X}">(SV("answer is 0"), false); + check.template operator()<"answer is {:#X}">(SV("answer is 0X0"), false); // *** zero-padding & width *** - check(SV("answer is +00000000001"), SV("answer is {:+#012d}"), true); - check(SV("answer is +00000000001"), SV("answer is {:+012b}"), true); - check(SV("answer is +0b000000001"), SV("answer is {:+#012b}"), true); - check(SV("answer is +0B000000001"), SV("answer is {:+#012B}"), true); - check(SV("answer is +00000000001"), SV("answer is {:+012o}"), true); - check(SV("answer is +00000000001"), SV("answer is {:+#012o}"), true); - check(SV("answer is +00000000001"), SV("answer is {:+012x}"), true); - check(SV("answer is +0x000000001"), SV("answer is {:+#012x}"), true); - check(SV("answer is +00000000001"), SV("answer is {:+012X}"), true); - check(SV("answer is +0X000000001"), SV("answer is {:+#012X}"), true); - - check(SV("answer is 000000000000"), SV("answer is {:#012d}"), false); - check(SV("answer is 000000000000"), SV("answer is {:012b}"), false); - check(SV("answer is 0b0000000000"), SV("answer is {:#012b}"), false); - check(SV("answer is 0B0000000000"), SV("answer is {:#012B}"), false); - check(SV("answer is 000000000000"), SV("answer is {:012o}"), false); - check(SV("answer is 000000000000"), SV("answer is {:#012o}"), false); - check(SV("answer is 000000000000"), SV("answer is {:012x}"), false); - check(SV("answer is 0x0000000000"), SV("answer is {:#012x}"), false); - check(SV("answer is 000000000000"), SV("answer is {:012X}"), false); - check(SV("answer is 0X0000000000"), SV("answer is {:#012X}"), false); + check.template operator()<"answer is {:+#012d}">(SV("answer is +00000000001"), true); + check.template operator()<"answer is {:+012b}">(SV("answer is +00000000001"), true); + check.template operator()<"answer is {:+#012b}">(SV("answer is +0b000000001"), true); + check.template operator()<"answer is {:+#012B}">(SV("answer is +0B000000001"), true); + check.template operator()<"answer is {:+012o}">(SV("answer is +00000000001"), true); + check.template operator()<"answer is {:+#012o}">(SV("answer is +00000000001"), true); + check.template operator()<"answer is {:+012x}">(SV("answer is +00000000001"), true); + check.template operator()<"answer is {:+#012x}">(SV("answer is +0x000000001"), true); + check.template operator()<"answer is {:+012X}">(SV("answer is +00000000001"), true); + check.template operator()<"answer is {:+#012X}">(SV("answer is +0X000000001"), true); + + check.template operator()<"answer is {:#012d}">(SV("answer is 000000000000"), false); + check.template operator()<"answer is {:012b}">(SV("answer is 000000000000"), false); + check.template operator()<"answer is {:#012b}">(SV("answer is 0b0000000000"), false); + check.template operator()<"answer is {:#012B}">(SV("answer is 0B0000000000"), false); + check.template operator()<"answer is {:012o}">(SV("answer is 000000000000"), false); + check.template operator()<"answer is {:#012o}">(SV("answer is 000000000000"), false); + check.template operator()<"answer is {:012x}">(SV("answer is 000000000000"), false); + check.template operator()<"answer is {:#012x}">(SV("answer is 0x0000000000"), false); + check.template operator()<"answer is {:012X}">(SV("answer is 000000000000"), false); + check.template operator()<"answer is {:#012X}">(SV("answer is 0X0000000000"), false); // *** precision *** check_exception("The format-spec should consume the input or end with a '}'", SV("{:.}"), true); @@ -486,121 +487,121 @@ template void format_test_integer_as_integer(TestFunction check, ExceptionTest check_exception) { // *** align-fill & width *** - check(SV("answer is '42'"), SV("answer is '{:<1}'"), I(42)); - check(SV("answer is '42'"), SV("answer is '{:<2}'"), I(42)); - check(SV("answer is '42 '"), SV("answer is '{:<3}'"), I(42)); + check.template operator()<"answer is '{:<1}'">(SV("answer is '42'"), I(42)); + check.template operator()<"answer is '{:<2}'">(SV("answer is '42'"), I(42)); + check.template operator()<"answer is '{:<3}'">(SV("answer is '42 '"), I(42)); - check(SV("answer is ' 42'"), SV("answer is '{:7}'"), I(42)); - check(SV("answer is ' 42'"), SV("answer is '{:>7}'"), I(42)); - check(SV("answer is '42 '"), SV("answer is '{:<7}'"), I(42)); - check(SV("answer is ' 42 '"), SV("answer is '{:^7}'"), I(42)); + check.template operator()<"answer is '{:7}'">(SV("answer is ' 42'"), I(42)); + check.template operator()<"answer is '{:>7}'">(SV("answer is ' 42'"), I(42)); + check.template operator()<"answer is '{:<7}'">(SV("answer is '42 '"), I(42)); + check.template operator()<"answer is '{:^7}'">(SV("answer is ' 42 '"), I(42)); - check(SV("answer is '*****42'"), SV("answer is '{:*>7}'"), I(42)); - check(SV("answer is '42*****'"), SV("answer is '{:*<7}'"), I(42)); - check(SV("answer is '**42***'"), SV("answer is '{:*^7}'"), I(42)); + check.template operator()<"answer is '{:*>7}'">(SV("answer is '*****42'"), I(42)); + check.template operator()<"answer is '{:*<7}'">(SV("answer is '42*****'"), I(42)); + check.template operator()<"answer is '{:*^7}'">(SV("answer is '**42***'"), I(42)); // Test whether zero padding is ignored - check(SV("answer is ' 42'"), SV("answer is '{:>07}'"), I(42)); - check(SV("answer is '42 '"), SV("answer is '{:<07}'"), I(42)); - check(SV("answer is ' 42 '"), SV("answer is '{:^07}'"), I(42)); + check.template operator()<"answer is '{:>07}'">(SV("answer is ' 42'"), I(42)); + check.template operator()<"answer is '{:<07}'">(SV("answer is '42 '"), I(42)); + check.template operator()<"answer is '{:^07}'">(SV("answer is ' 42 '"), I(42)); // *** Sign *** if constexpr (std::signed_integral) - check(SV("answer is -42"), SV("answer is {}"), I(-42)); - check(SV("answer is 0"), SV("answer is {}"), I(0)); - check(SV("answer is 42"), SV("answer is {}"), I(42)); + check.template operator()<"answer is {}">(SV("answer is -42"), I(-42)); + check.template operator()<"answer is {}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {}">(SV("answer is 42"), I(42)); if constexpr (std::signed_integral) - check(SV("answer is -42"), SV("answer is {:-}"), I(-42)); - check(SV("answer is 0"), SV("answer is {:-}"), I(0)); - check(SV("answer is 42"), SV("answer is {:-}"), I(42)); + check.template operator()<"answer is {:-}">(SV("answer is -42"), I(-42)); + check.template operator()<"answer is {:-}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:-}">(SV("answer is 42"), I(42)); if constexpr (std::signed_integral) - check(SV("answer is -42"), SV("answer is {:+}"), I(-42)); - check(SV("answer is +0"), SV("answer is {:+}"), I(0)); - check(SV("answer is +42"), SV("answer is {:+}"), I(42)); + check.template operator()<"answer is {:+}">(SV("answer is -42"), I(-42)); + check.template operator()<"answer is {:+}">(SV("answer is +0"), I(0)); + check.template operator()<"answer is {:+}">(SV("answer is +42"), I(42)); if constexpr (std::signed_integral) - check(SV("answer is -42"), SV("answer is {: }"), I(-42)); - check(SV("answer is 0"), SV("answer is {: }"), I(0)); - check(SV("answer is 42"), SV("answer is {: }"), I(42)); + check.template operator()<"answer is {: }">(SV("answer is -42"), I(-42)); + check.template operator()<"answer is {: }">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {: }">(SV("answer is 42"), I(42)); // *** alternate form *** if constexpr (std::signed_integral) { - check(SV("answer is -42"), SV("answer is {:#}"), I(-42)); - check(SV("answer is -42"), SV("answer is {:#d}"), I(-42)); - check(SV("answer is -101010"), SV("answer is {:b}"), I(-42)); - check(SV("answer is -0b101010"), SV("answer is {:#b}"), I(-42)); - check(SV("answer is -0B101010"), SV("answer is {:#B}"), I(-42)); - check(SV("answer is -52"), SV("answer is {:o}"), I(-42)); - check(SV("answer is -052"), SV("answer is {:#o}"), I(-42)); - check(SV("answer is -2a"), SV("answer is {:x}"), I(-42)); - check(SV("answer is -0x2a"), SV("answer is {:#x}"), I(-42)); - check(SV("answer is -2A"), SV("answer is {:X}"), I(-42)); - check(SV("answer is -0X2A"), SV("answer is {:#X}"), I(-42)); + check.template operator()<"answer is {:#}">(SV("answer is -42"), I(-42)); + check.template operator()<"answer is {:#d}">(SV("answer is -42"), I(-42)); + check.template operator()<"answer is {:b}">(SV("answer is -101010"), I(-42)); + check.template operator()<"answer is {:#b}">(SV("answer is -0b101010"), I(-42)); + check.template operator()<"answer is {:#B}">(SV("answer is -0B101010"), I(-42)); + check.template operator()<"answer is {:o}">(SV("answer is -52"), I(-42)); + check.template operator()<"answer is {:#o}">(SV("answer is -052"), I(-42)); + check.template operator()<"answer is {:x}">(SV("answer is -2a"), I(-42)); + check.template operator()<"answer is {:#x}">(SV("answer is -0x2a"), I(-42)); + check.template operator()<"answer is {:X}">(SV("answer is -2A"), I(-42)); + check.template operator()<"answer is {:#X}">(SV("answer is -0X2A"), I(-42)); } - check(SV("answer is 0"), SV("answer is {:#}"), I(0)); - check(SV("answer is 0"), SV("answer is {:#d}"), I(0)); - check(SV("answer is 0"), SV("answer is {:b}"), I(0)); - check(SV("answer is 0b0"), SV("answer is {:#b}"), I(0)); - check(SV("answer is 0B0"), SV("answer is {:#B}"), I(0)); - check(SV("answer is 0"), SV("answer is {:o}"), I(0)); - check(SV("answer is 0"), SV("answer is {:#o}"), I(0)); - check(SV("answer is 0"), SV("answer is {:x}"), I(0)); - check(SV("answer is 0x0"), SV("answer is {:#x}"), I(0)); - check(SV("answer is 0"), SV("answer is {:X}"), I(0)); - check(SV("answer is 0X0"), SV("answer is {:#X}"), I(0)); - - check(SV("answer is +42"), SV("answer is {:+#}"), I(42)); - check(SV("answer is +42"), SV("answer is {:+#d}"), I(42)); - check(SV("answer is +101010"), SV("answer is {:+b}"), I(42)); - check(SV("answer is +0b101010"), SV("answer is {:+#b}"), I(42)); - check(SV("answer is +0B101010"), SV("answer is {:+#B}"), I(42)); - check(SV("answer is +52"), SV("answer is {:+o}"), I(42)); - check(SV("answer is +052"), SV("answer is {:+#o}"), I(42)); - check(SV("answer is +2a"), SV("answer is {:+x}"), I(42)); - check(SV("answer is +0x2a"), SV("answer is {:+#x}"), I(42)); - check(SV("answer is +2A"), SV("answer is {:+X}"), I(42)); - check(SV("answer is +0X2A"), SV("answer is {:+#X}"), I(42)); + check.template operator()<"answer is {:#}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:#d}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:b}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:#b}">(SV("answer is 0b0"), I(0)); + check.template operator()<"answer is {:#B}">(SV("answer is 0B0"), I(0)); + check.template operator()<"answer is {:o}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:#o}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:x}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:#x}">(SV("answer is 0x0"), I(0)); + check.template operator()<"answer is {:X}">(SV("answer is 0"), I(0)); + check.template operator()<"answer is {:#X}">(SV("answer is 0X0"), I(0)); + + check.template operator()<"answer is {:+#}">(SV("answer is +42"), I(42)); + check.template operator()<"answer is {:+#d}">(SV("answer is +42"), I(42)); + check.template operator()<"answer is {:+b}">(SV("answer is +101010"), I(42)); + check.template operator()<"answer is {:+#b}">(SV("answer is +0b101010"), I(42)); + check.template operator()<"answer is {:+#B}">(SV("answer is +0B101010"), I(42)); + check.template operator()<"answer is {:+o}">(SV("answer is +52"), I(42)); + check.template operator()<"answer is {:+#o}">(SV("answer is +052"), I(42)); + check.template operator()<"answer is {:+x}">(SV("answer is +2a"), I(42)); + check.template operator()<"answer is {:+#x}">(SV("answer is +0x2a"), I(42)); + check.template operator()<"answer is {:+X}">(SV("answer is +2A"), I(42)); + check.template operator()<"answer is {:+#X}">(SV("answer is +0X2A"), I(42)); // *** zero-padding & width *** if constexpr (std::signed_integral) { - check(SV("answer is -00000000042"), SV("answer is {:#012}"), I(-42)); - check(SV("answer is -00000000042"), SV("answer is {:#012d}"), I(-42)); - check(SV("answer is -00000101010"), SV("answer is {:012b}"), I(-42)); - check(SV("answer is -0b000101010"), SV("answer is {:#012b}"), I(-42)); - check(SV("answer is -0B000101010"), SV("answer is {:#012B}"), I(-42)); - check(SV("answer is -00000000052"), SV("answer is {:012o}"), I(-42)); - check(SV("answer is -00000000052"), SV("answer is {:#012o}"), I(-42)); - check(SV("answer is -0000000002a"), SV("answer is {:012x}"), I(-42)); - check(SV("answer is -0x00000002a"), SV("answer is {:#012x}"), I(-42)); - check(SV("answer is -0000000002A"), SV("answer is {:012X}"), I(-42)); - check(SV("answer is -0X00000002A"), SV("answer is {:#012X}"), I(-42)); + check.template operator()<"answer is {:#012}">(SV("answer is -00000000042"), I(-42)); + check.template operator()<"answer is {:#012d}">(SV("answer is -00000000042"), I(-42)); + check.template operator()<"answer is {:012b}">(SV("answer is -00000101010"), I(-42)); + check.template operator()<"answer is {:#012b}">(SV("answer is -0b000101010"), I(-42)); + check.template operator()<"answer is {:#012B}">(SV("answer is -0B000101010"), I(-42)); + check.template operator()<"answer is {:012o}">(SV("answer is -00000000052"), I(-42)); + check.template operator()<"answer is {:#012o}">(SV("answer is -00000000052"), I(-42)); + check.template operator()<"answer is {:012x}">(SV("answer is -0000000002a"), I(-42)); + check.template operator()<"answer is {:#012x}">(SV("answer is -0x00000002a"), I(-42)); + check.template operator()<"answer is {:012X}">(SV("answer is -0000000002A"), I(-42)); + check.template operator()<"answer is {:#012X}">(SV("answer is -0X00000002A"), I(-42)); } - check(SV("answer is 000000000000"), SV("answer is {:#012}"), I(0)); - check(SV("answer is 000000000000"), SV("answer is {:#012d}"), I(0)); - check(SV("answer is 000000000000"), SV("answer is {:012b}"), I(0)); - check(SV("answer is 0b0000000000"), SV("answer is {:#012b}"), I(0)); - check(SV("answer is 0B0000000000"), SV("answer is {:#012B}"), I(0)); - check(SV("answer is 000000000000"), SV("answer is {:012o}"), I(0)); - check(SV("answer is 000000000000"), SV("answer is {:#012o}"), I(0)); - check(SV("answer is 000000000000"), SV("answer is {:012x}"), I(0)); - check(SV("answer is 0x0000000000"), SV("answer is {:#012x}"), I(0)); - check(SV("answer is 000000000000"), SV("answer is {:012X}"), I(0)); - check(SV("answer is 0X0000000000"), SV("answer is {:#012X}"), I(0)); - - check(SV("answer is +00000000042"), SV("answer is {:+#012}"), I(42)); - check(SV("answer is +00000000042"), SV("answer is {:+#012d}"), I(42)); - check(SV("answer is +00000101010"), SV("answer is {:+012b}"), I(42)); - check(SV("answer is +0b000101010"), SV("answer is {:+#012b}"), I(42)); - check(SV("answer is +0B000101010"), SV("answer is {:+#012B}"), I(42)); - check(SV("answer is +00000000052"), SV("answer is {:+012o}"), I(42)); - check(SV("answer is +00000000052"), SV("answer is {:+#012o}"), I(42)); - check(SV("answer is +0000000002a"), SV("answer is {:+012x}"), I(42)); - check(SV("answer is +0x00000002a"), SV("answer is {:+#012x}"), I(42)); - check(SV("answer is +0000000002A"), SV("answer is {:+012X}"), I(42)); - check(SV("answer is +0X00000002A"), SV("answer is {:+#012X}"), I(42)); + check.template operator()<"answer is {:#012}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:#012d}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:012b}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:#012b}">(SV("answer is 0b0000000000"), I(0)); + check.template operator()<"answer is {:#012B}">(SV("answer is 0B0000000000"), I(0)); + check.template operator()<"answer is {:012o}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:#012o}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:012x}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:#012x}">(SV("answer is 0x0000000000"), I(0)); + check.template operator()<"answer is {:012X}">(SV("answer is 000000000000"), I(0)); + check.template operator()<"answer is {:#012X}">(SV("answer is 0X0000000000"), I(0)); + + check.template operator()<"answer is {:+#012}">(SV("answer is +00000000042"), I(42)); + check.template operator()<"answer is {:+#012d}">(SV("answer is +00000000042"), I(42)); + check.template operator()<"answer is {:+012b}">(SV("answer is +00000101010"), I(42)); + check.template operator()<"answer is {:+#012b}">(SV("answer is +0b000101010"), I(42)); + check.template operator()<"answer is {:+#012B}">(SV("answer is +0B000101010"), I(42)); + check.template operator()<"answer is {:+012o}">(SV("answer is +00000000052"), I(42)); + check.template operator()<"answer is {:+#012o}">(SV("answer is +00000000052"), I(42)); + check.template operator()<"answer is {:+012x}">(SV("answer is +0000000002a"), I(42)); + check.template operator()<"answer is {:+#012x}">(SV("answer is +0x00000002a"), I(42)); + check.template operator()<"answer is {:+012X}">(SV("answer is +0000000002A"), I(42)); + check.template operator()<"answer is {:+#012X}">(SV("answer is +0X00000002A"), I(42)); // *** precision *** check_exception("The format-spec should consume the input or end with a '}'", SV("{:.}"), I(0)); @@ -618,17 +619,17 @@ template void format_test_integer_as_char(TestFunction check, ExceptionTest check_exception) { // *** align-fill & width *** - check(SV("answer is '* '"), SV("answer is '{:6c}'"), I(42)); - check(SV("answer is ' *'"), SV("answer is '{:>6c}'"), I(42)); - check(SV("answer is '* '"), SV("answer is '{:<6c}'"), I(42)); - check(SV("answer is ' * '"), SV("answer is '{:^6c}'"), I(42)); + check.template operator()<"answer is '{:6c}'">(SV("answer is '* '"), I(42)); + check.template operator()<"answer is '{:>6c}'">(SV("answer is ' *'"), I(42)); + check.template operator()<"answer is '{:<6c}'">(SV("answer is '* '"), I(42)); + check.template operator()<"answer is '{:^6c}'">(SV("answer is ' * '"), I(42)); - check(SV("answer is '-----*'"), SV("answer is '{:->6c}'"), I(42)); - check(SV("answer is '*-----'"), SV("answer is '{:-<6c}'"), I(42)); - check(SV("answer is '--*---'"), SV("answer is '{:-^6c}'"), I(42)); + check.template operator()<"answer is '{:->6c}'">(SV("answer is '-----*'"), I(42)); + check.template operator()<"answer is '{:-<6c}'">(SV("answer is '*-----'"), I(42)); + check.template operator()<"answer is '{:-^6c}'">(SV("answer is '--*---'"), I(42)); // *** Sign *** - check(SV("answer is *"), SV("answer is {:c}"), I(42)); + check.template operator()<"answer is {:c}">(SV("answer is *"), I(42)); check_exception("A sign field isn't allowed in this format-spec", SV("answer is {:-c}"), I(42)); check_exception("A sign field isn't allowed in this format-spec", SV("answer is {:+c}"), I(42)); check_exception("A sign field isn't allowed in this format-spec", SV("answer is {: c}"), I(42)); @@ -646,7 +647,7 @@ // *** locale-specific form *** // Note it has no effect but it's allowed. - check(SV("answer is '*'"), SV("answer is '{:Lc}'"), I(42)); + check.template operator()<"answer is '{:Lc}'">(SV("answer is '*'"), I(42)); // *** type *** for (const auto& fmt : invalid_types("bBcdoxX")) @@ -686,47 +687,47 @@ format_test_integer<__int128_t, CharT>(check, check_exception); #endif // *** check the minma and maxima *** - check(SV("-0b10000000"), SV("{:#b}"), std::numeric_limits::min()); - check(SV("-0200"), SV("{:#o}"), std::numeric_limits::min()); - check(SV("-128"), SV("{:#}"), std::numeric_limits::min()); - check(SV("-0x80"), SV("{:#x}"), std::numeric_limits::min()); - - check(SV("-0b1000000000000000"), SV("{:#b}"), std::numeric_limits::min()); - check(SV("-0100000"), SV("{:#o}"), std::numeric_limits::min()); - check(SV("-32768"), SV("{:#}"), std::numeric_limits::min()); - check(SV("-0x8000"), SV("{:#x}"), std::numeric_limits::min()); - - check(SV("-0b10000000000000000000000000000000"), SV("{:#b}"), std::numeric_limits::min()); - check(SV("-020000000000"), SV("{:#o}"), std::numeric_limits::min()); - check(SV("-2147483648"), SV("{:#}"), std::numeric_limits::min()); - check(SV("-0x80000000"), SV("{:#x}"), std::numeric_limits::min()); - - check(SV("-0b1000000000000000000000000000000000000000000000000000000000000000"), SV("{:#b}"), - std::numeric_limits::min()); - check(SV("-01000000000000000000000"), SV("{:#o}"), std::numeric_limits::min()); - check(SV("-9223372036854775808"), SV("{:#}"), std::numeric_limits::min()); - check(SV("-0x8000000000000000"), SV("{:#x}"), std::numeric_limits::min()); - - check(SV("0b1111111"), SV("{:#b}"), std::numeric_limits::max()); - check(SV("0177"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("127"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0x7f"), SV("{:#x}"), std::numeric_limits::max()); - - check(SV("0b111111111111111"), SV("{:#b}"), std::numeric_limits::max()); - check(SV("077777"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("32767"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0x7fff"), SV("{:#x}"), std::numeric_limits::max()); - - check(SV("0b1111111111111111111111111111111"), SV("{:#b}"), std::numeric_limits::max()); - check(SV("017777777777"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("2147483647"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0x7fffffff"), SV("{:#x}"), std::numeric_limits::max()); - - check(SV("0b111111111111111111111111111111111111111111111111111111111111111"), SV("{:#b}"), - std::numeric_limits::max()); - check(SV("0777777777777777777777"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("9223372036854775807"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0x7fffffffffffffff"), SV("{:#x}"), std::numeric_limits::max()); + check.template operator()<"{:#b}">(SV("-0b10000000"), std::numeric_limits::min()); + check.template operator()<"{:#o}">(SV("-0200"), std::numeric_limits::min()); + check.template operator()<"{:#}">(SV("-128"), std::numeric_limits::min()); + check.template operator()<"{:#x}">(SV("-0x80"), std::numeric_limits::min()); + + check.template operator()<"{:#b}">(SV("-0b1000000000000000"), std::numeric_limits::min()); + check.template operator()<"{:#o}">(SV("-0100000"), std::numeric_limits::min()); + check.template operator()<"{:#}">(SV("-32768"), std::numeric_limits::min()); + check.template operator()<"{:#x}">(SV("-0x8000"), std::numeric_limits::min()); + + check.template operator()<"{:#b}">(SV("-0b10000000000000000000000000000000"), std::numeric_limits::min()); + check.template operator()<"{:#o}">(SV("-020000000000"), std::numeric_limits::min()); + check.template operator()<"{:#}">(SV("-2147483648"), std::numeric_limits::min()); + check.template operator()<"{:#x}">(SV("-0x80000000"), std::numeric_limits::min()); + + check.template operator()<"{:#b}">(SV("-0b1000000000000000000000000000000000000000000000000000000000000000"), + std::numeric_limits::min()); + check.template operator()<"{:#o}">(SV("-01000000000000000000000"), std::numeric_limits::min()); + check.template operator()<"{:#}">(SV("-9223372036854775808"), std::numeric_limits::min()); + check.template operator()<"{:#x}">(SV("-0x8000000000000000"), std::numeric_limits::min()); + + check.template operator()<"{:#b}">(SV("0b1111111"), std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("0177"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("127"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0x7f"), std::numeric_limits::max()); + + check.template operator()<"{:#b}">(SV("0b111111111111111"), std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("077777"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("32767"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0x7fff"), std::numeric_limits::max()); + + check.template operator()<"{:#b}">(SV("0b1111111111111111111111111111111"), std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("017777777777"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("2147483647"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0x7fffffff"), std::numeric_limits::max()); + + check.template operator()<"{:#b}">(SV("0b111111111111111111111111111111111111111111111111111111111111111"), + std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("0777777777777777777777"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("9223372036854775807"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0x7fffffffffffffff"), std::numeric_limits::max()); // TODO FMT Add __int128_t test after implementing full range. } @@ -742,26 +743,26 @@ format_test_integer<__uint128_t, CharT>(check, check_exception); #endif // *** test the maxima *** - check(SV("0b11111111"), SV("{:#b}"), std::numeric_limits::max()); - check(SV("0377"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("255"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0xff"), SV("{:#x}"), std::numeric_limits::max()); - - check(SV("0b1111111111111111"), SV("{:#b}"), std::numeric_limits::max()); - check(SV("0177777"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("65535"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0xffff"), SV("{:#x}"), std::numeric_limits::max()); - - check(SV("0b11111111111111111111111111111111"), SV("{:#b}"), std::numeric_limits::max()); - check(SV("037777777777"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("4294967295"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0xffffffff"), SV("{:#x}"), std::numeric_limits::max()); - - check(SV("0b1111111111111111111111111111111111111111111111111111111111111111"), SV("{:#b}"), - std::numeric_limits::max()); - check(SV("01777777777777777777777"), SV("{:#o}"), std::numeric_limits::max()); - check(SV("18446744073709551615"), SV("{:#}"), std::numeric_limits::max()); - check(SV("0xffffffffffffffff"), SV("{:#x}"), std::numeric_limits::max()); + check.template operator()<"{:#b}">(SV("0b11111111"), std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("0377"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("255"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0xff"), std::numeric_limits::max()); + + check.template operator()<"{:#b}">(SV("0b1111111111111111"), std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("0177777"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("65535"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0xffff"), std::numeric_limits::max()); + + check.template operator()<"{:#b}">(SV("0b11111111111111111111111111111111"), std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("037777777777"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("4294967295"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0xffffffff"), std::numeric_limits::max()); + + check.template operator()<"{:#b}">(SV("0b1111111111111111111111111111111111111111111111111111111111111111"), + std::numeric_limits::max()); + check.template operator()<"{:#o}">(SV("01777777777777777777777"), std::numeric_limits::max()); + check.template operator()<"{:#}">(SV("18446744073709551615"), std::numeric_limits::max()); + check.template operator()<"{:#x}">(SV("0xffffffffffffffff"), std::numeric_limits::max()); // TODO FMT Add __uint128_t test after implementing full range. } @@ -771,23 +772,24 @@ // ***** Char type ***** // *** align-fill & width *** - check(SV("answer is '* '"), SV("answer is '{:6}'"), CharT('*')); - check(SV("answer is ' *'"), SV("answer is '{:>6}'"), CharT('*')); - check(SV("answer is '* '"), SV("answer is '{:<6}'"), CharT('*')); - check(SV("answer is ' * '"), SV("answer is '{:^6}'"), CharT('*')); + check.template operator()<"answer is '{:6}'">(SV("answer is '* '"), CharT('*')); - check(SV("answer is '* '"), SV("answer is '{:6c}'"), CharT('*')); - check(SV("answer is ' *'"), SV("answer is '{:>6c}'"), CharT('*')); - check(SV("answer is '* '"), SV("answer is '{:<6c}'"), CharT('*')); - check(SV("answer is ' * '"), SV("answer is '{:^6c}'"), CharT('*')); + check.template operator()<"answer is '{:>6}'">(SV("answer is ' *'"), CharT('*')); + check.template operator()<"answer is '{:<6}'">(SV("answer is '* '"), CharT('*')); + check.template operator()<"answer is '{:^6}'">(SV("answer is ' * '"), CharT('*')); - check(SV("answer is '-----*'"), SV("answer is '{:->6}'"), CharT('*')); - check(SV("answer is '*-----'"), SV("answer is '{:-<6}'"), CharT('*')); - check(SV("answer is '--*---'"), SV("answer is '{:-^6}'"), CharT('*')); + check.template operator()<"answer is '{:6c}'">(SV("answer is '* '"), CharT('*')); + check.template operator()<"answer is '{:>6c}'">(SV("answer is ' *'"), CharT('*')); + check.template operator()<"answer is '{:<6c}'">(SV("answer is '* '"), CharT('*')); + check.template operator()<"answer is '{:^6c}'">(SV("answer is ' * '"), CharT('*')); - check(SV("answer is '-----*'"), SV("answer is '{:->6c}'"), CharT('*')); - check(SV("answer is '*-----'"), SV("answer is '{:-<6c}'"), CharT('*')); - check(SV("answer is '--*---'"), SV("answer is '{:-^6c}'"), CharT('*')); + check.template operator()<"answer is '{:->6}'">(SV("answer is '-----*'"), CharT('*')); + check.template operator()<"answer is '{:-<6}'">(SV("answer is '*-----'"), CharT('*')); + check.template operator()<"answer is '{:-^6}'">(SV("answer is '--*---'"), CharT('*')); + + check.template operator()<"answer is '{:->6c}'">(SV("answer is '-----*'"), CharT('*')); + check.template operator()<"answer is '{:-<6c}'">(SV("answer is '*-----'"), CharT('*')); + check.template operator()<"answer is '{:-^6c}'">(SV("answer is '--*---'"), CharT('*')); // *** Sign *** check_exception("A sign field isn't allowed in this format-spec", SV("{:-}"), CharT('*')); @@ -817,8 +819,8 @@ // *** locale-specific form *** // Note it has no effect but it's allowed. - check(SV("answer is '*'"), SV("answer is '{:L}'"), '*'); - check(SV("answer is '*'"), SV("answer is '{:Lc}'"), '*'); + check.template operator()<"answer is '{:L}'">(SV("answer is '*'"), '*'); + check.template operator()<"answer is '{:Lc}'">(SV("answer is '*'"), '*'); // *** type *** for (const auto& fmt : invalid_types("bBcdoxX")) @@ -828,55 +830,55 @@ template void format_test_char_as_integer(TestFunction check, ExceptionTest check_exception) { // *** align-fill & width *** - check(SV("answer is '42'"), SV("answer is '{:<1d}'"), CharT('*')); + check.template operator()<"answer is '{:<1d}'">(SV("answer is '42'"), CharT('*')); - check(SV("answer is '42'"), SV("answer is '{:<2d}'"), CharT('*')); - check(SV("answer is '42 '"), SV("answer is '{:<3d}'"), CharT('*')); + check.template operator()<"answer is '{:<2d}'">(SV("answer is '42'"), CharT('*')); + check.template operator()<"answer is '{:<3d}'">(SV("answer is '42 '"), CharT('*')); - check(SV("answer is ' 42'"), SV("answer is '{:7d}'"), CharT('*')); - check(SV("answer is ' 42'"), SV("answer is '{:>7d}'"), CharT('*')); - check(SV("answer is '42 '"), SV("answer is '{:<7d}'"), CharT('*')); - check(SV("answer is ' 42 '"), SV("answer is '{:^7d}'"), CharT('*')); + check.template operator()<"answer is '{:7d}'">(SV("answer is ' 42'"), CharT('*')); + check.template operator()<"answer is '{:>7d}'">(SV("answer is ' 42'"), CharT('*')); + check.template operator()<"answer is '{:<7d}'">(SV("answer is '42 '"), CharT('*')); + check.template operator()<"answer is '{:^7d}'">(SV("answer is ' 42 '"), CharT('*')); - check(SV("answer is '*****42'"), SV("answer is '{:*>7d}'"), CharT('*')); - check(SV("answer is '42*****'"), SV("answer is '{:*<7d}'"), CharT('*')); - check(SV("answer is '**42***'"), SV("answer is '{:*^7d}'"), CharT('*')); + check.template operator()<"answer is '{:*>7d}'">(SV("answer is '*****42'"), CharT('*')); + check.template operator()<"answer is '{:*<7d}'">(SV("answer is '42*****'"), CharT('*')); + check.template operator()<"answer is '{:*^7d}'">(SV("answer is '**42***'"), CharT('*')); // Test whether zero padding is ignored - check(SV("answer is ' 42'"), SV("answer is '{:>07d}'"), CharT('*')); - check(SV("answer is '42 '"), SV("answer is '{:<07d}'"), CharT('*')); - check(SV("answer is ' 42 '"), SV("answer is '{:^07d}'"), CharT('*')); + check.template operator()<"answer is '{:>07d}'">(SV("answer is ' 42'"), CharT('*')); + check.template operator()<"answer is '{:<07d}'">(SV("answer is '42 '"), CharT('*')); + check.template operator()<"answer is '{:^07d}'">(SV("answer is ' 42 '"), CharT('*')); // *** Sign *** - check(SV("answer is 42"), SV("answer is {:d}"), CharT('*')); - check(SV("answer is 42"), SV("answer is {:-d}"), CharT('*')); - check(SV("answer is +42"), SV("answer is {:+d}"), CharT('*')); - check(SV("answer is 42"), SV("answer is {: d}"), CharT('*')); + check.template operator()<"answer is {:d}">(SV("answer is 42"), CharT('*')); + check.template operator()<"answer is {:-d}">(SV("answer is 42"), CharT('*')); + check.template operator()<"answer is {:+d}">(SV("answer is +42"), CharT('*')); + check.template operator()<"answer is {: d}">(SV("answer is 42"), CharT('*')); // *** alternate form *** - check(SV("answer is +42"), SV("answer is {:+#d}"), CharT('*')); - check(SV("answer is +101010"), SV("answer is {:+b}"), CharT('*')); - check(SV("answer is +0b101010"), SV("answer is {:+#b}"), CharT('*')); - check(SV("answer is +0B101010"), SV("answer is {:+#B}"), CharT('*')); - check(SV("answer is +52"), SV("answer is {:+o}"), CharT('*')); - check(SV("answer is +052"), SV("answer is {:+#o}"), CharT('*')); - check(SV("answer is +2a"), SV("answer is {:+x}"), CharT('*')); - check(SV("answer is +0x2a"), SV("answer is {:+#x}"), CharT('*')); - check(SV("answer is +2A"), SV("answer is {:+X}"), CharT('*')); - check(SV("answer is +0X2A"), SV("answer is {:+#X}"), CharT('*')); + check.template operator()<"answer is {:+#d}">(SV("answer is +42"), CharT('*')); + check.template operator()<"answer is {:+b}">(SV("answer is +101010"), CharT('*')); + check.template operator()<"answer is {:+#b}">(SV("answer is +0b101010"), CharT('*')); + check.template operator()<"answer is {:+#B}">(SV("answer is +0B101010"), CharT('*')); + check.template operator()<"answer is {:+o}">(SV("answer is +52"), CharT('*')); + check.template operator()<"answer is {:+#o}">(SV("answer is +052"), CharT('*')); + check.template operator()<"answer is {:+x}">(SV("answer is +2a"), CharT('*')); + check.template operator()<"answer is {:+#x}">(SV("answer is +0x2a"), CharT('*')); + check.template operator()<"answer is {:+X}">(SV("answer is +2A"), CharT('*')); + check.template operator()<"answer is {:+#X}">(SV("answer is +0X2A"), CharT('*')); // *** zero-padding & width *** - check(SV("answer is +00000000042"), SV("answer is {:+#012d}"), CharT('*')); - check(SV("answer is +00000101010"), SV("answer is {:+012b}"), CharT('*')); - check(SV("answer is +0b000101010"), SV("answer is {:+#012b}"), CharT('*')); - check(SV("answer is +0B000101010"), SV("answer is {:+#012B}"), CharT('*')); - check(SV("answer is +00000000052"), SV("answer is {:+012o}"), CharT('*')); - check(SV("answer is +00000000052"), SV("answer is {:+#012o}"), CharT('*')); - check(SV("answer is +0000000002a"), SV("answer is {:+012x}"), CharT('*')); - check(SV("answer is +0x00000002a"), SV("answer is {:+#012x}"), CharT('*')); - check(SV("answer is +0000000002A"), SV("answer is {:+012X}"), CharT('*')); - - check(SV("answer is +0X00000002A"), SV("answer is {:+#012X}"), CharT('*')); + check.template operator()<"answer is {:+#012d}">(SV("answer is +00000000042"), CharT('*')); + check.template operator()<"answer is {:+012b}">(SV("answer is +00000101010"), CharT('*')); + check.template operator()<"answer is {:+#012b}">(SV("answer is +0b000101010"), CharT('*')); + check.template operator()<"answer is {:+#012B}">(SV("answer is +0B000101010"), CharT('*')); + check.template operator()<"answer is {:+012o}">(SV("answer is +00000000052"), CharT('*')); + check.template operator()<"answer is {:+#012o}">(SV("answer is +00000000052"), CharT('*')); + check.template operator()<"answer is {:+012x}">(SV("answer is +0000000002a"), CharT('*')); + check.template operator()<"answer is {:+#012x}">(SV("answer is +0x00000002a"), CharT('*')); + check.template operator()<"answer is {:+012X}">(SV("answer is +0000000002A"), CharT('*')); + + check.template operator()<"answer is {:+#012X}">(SV("answer is +0X00000002A"), CharT('*')); // *** precision *** check_exception("The format-spec should consume the input or end with a '}'", SV("{:.d}"), CharT('*')); @@ -898,116 +900,116 @@ // Test whether the hexadecimal letters are the proper case. // The precision is too large for float, so two tests are used. - check(SV("answer is '1.abcp+0'"), SV("answer is '{:a}'"), F(0x1.abcp+0)); - check(SV("answer is '1.defp+0'"), SV("answer is '{:a}'"), F(0x1.defp+0)); + check.template operator()<"answer is '{:a}'">(SV("answer is '1.abcp+0'"), F(0x1.abcp+0)); + check.template operator()<"answer is '{:a}'">(SV("answer is '1.defp+0'"), F(0x1.defp+0)); // *** align-fill & width *** - check(SV("answer is ' 1p-2'"), SV("answer is '{:7a}'"), F(0.25)); - check(SV("answer is ' 1p-2'"), SV("answer is '{:>7a}'"), F(0.25)); - check(SV("answer is '1p-2 '"), SV("answer is '{:<7a}'"), F(0.25)); - check(SV("answer is ' 1p-2 '"), SV("answer is '{:^7a}'"), F(0.25)); + check.template operator()<"answer is '{:7a}'">(SV("answer is ' 1p-2'"), F(0.25)); + check.template operator()<"answer is '{:>7a}'">(SV("answer is ' 1p-2'"), F(0.25)); + check.template operator()<"answer is '{:<7a}'">(SV("answer is '1p-2 '"), F(0.25)); + check.template operator()<"answer is '{:^7a}'">(SV("answer is ' 1p-2 '"), F(0.25)); - check(SV("answer is '---1p-3'"), SV("answer is '{:->7a}'"), F(125e-3)); - check(SV("answer is '1p-3---'"), SV("answer is '{:-<7a}'"), F(125e-3)); - check(SV("answer is '-1p-3--'"), SV("answer is '{:-^7a}'"), F(125e-3)); + check.template operator()<"answer is '{:->7a}'">(SV("answer is '---1p-3'"), F(125e-3)); + check.template operator()<"answer is '{:-<7a}'">(SV("answer is '1p-3---'"), F(125e-3)); + check.template operator()<"answer is '{:-^7a}'">(SV("answer is '-1p-3--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6a}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6a}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6a}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6a}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6a}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6a}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7a}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7a}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7a}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7a}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6a}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6a}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6a}'"), nan_pos); + check.template operator()<"answer is '{:^>6a}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6a}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6a}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7a}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7a}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7a}'"), nan_neg); + check.template operator()<"answer is '{:0>7a}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7a}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7a}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 1p-2'"), SV("answer is '{:>07a}'"), F(0.25)); - check(SV("answer is '1p-2 '"), SV("answer is '{:<07a}'"), F(0.25)); - check(SV("answer is ' 1p-2 '"), SV("answer is '{:^07a}'"), F(0.25)); + check.template operator()<"answer is '{:>07a}'">(SV("answer is ' 1p-2'"), F(0.25)); + check.template operator()<"answer is '{:<07a}'">(SV("answer is '1p-2 '"), F(0.25)); + check.template operator()<"answer is '{:^07a}'">(SV("answer is ' 1p-2 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0p+0'"), SV("answer is '{:a}'"), F(0)); - check(SV("answer is '0p+0'"), SV("answer is '{:-a}'"), F(0)); - check(SV("answer is '+0p+0'"), SV("answer is '{:+a}'"), F(0)); - check(SV("answer is ' 0p+0'"), SV("answer is '{: a}'"), F(0)); + check.template operator()<"answer is '{:a}'">(SV("answer is '0p+0'"), F(0)); + check.template operator()<"answer is '{:-a}'">(SV("answer is '0p+0'"), F(0)); + check.template operator()<"answer is '{:+a}'">(SV("answer is '+0p+0'"), F(0)); + check.template operator()<"answer is '{: a}'">(SV("answer is ' 0p+0'"), F(0)); - check(SV("answer is '-0p+0'"), SV("answer is '{:a}'"), F(-0.)); - check(SV("answer is '-0p+0'"), SV("answer is '{:-a}'"), F(-0.)); - check(SV("answer is '-0p+0'"), SV("answer is '{:+a}'"), F(-0.)); - check(SV("answer is '-0p+0'"), SV("answer is '{: a}'"), F(-0.)); + check.template operator()<"answer is '{:a}'">(SV("answer is '-0p+0'"), F(-0.)); + check.template operator()<"answer is '{:-a}'">(SV("answer is '-0p+0'"), F(-0.)); + check.template operator()<"answer is '{:+a}'">(SV("answer is '-0p+0'"), F(-0.)); + check.template operator()<"answer is '{: a}'">(SV("answer is '-0p+0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:a}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-a}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: a}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: a}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:a}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-a}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+a}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: a}'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:a}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-a}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+a}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: a}'"), nan_neg); + check.template operator()<"answer is '{:a}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-a}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+a}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:a}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-a}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+a}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: a}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:a}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-a}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+a}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: a}'">(SV("answer is '-nan'"), nan_neg); // *** alternate form *** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0p+0'"), SV("answer is '{:a}'"), F(0)); - check(SV("answer is '0.p+0'"), SV("answer is '{:#a}'"), F(0)); + check.template operator()<"answer is '{:a}'">(SV("answer is '0p+0'"), F(0)); + check.template operator()<"answer is '{:#a}'">(SV("answer is '0.p+0'"), F(0)); - check(SV("answer is '1p+1'"), SV("answer is '{:.0a}'"), F(2.5)); - check(SV("answer is '1.p+1'"), SV("answer is '{:#.0a}'"), F(2.5)); - check(SV("answer is '1.4p+1'"), SV("answer is '{:#a}'"), F(2.5)); + check.template operator()<"answer is '{:.0a}'">(SV("answer is '1p+1'"), F(2.5)); + check.template operator()<"answer is '{:#.0a}'">(SV("answer is '1.p+1'"), F(2.5)); + check.template operator()<"answer is '{:#a}'">(SV("answer is '1.4p+1'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#a}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#a}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#a}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#a}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#a}'"), nan_neg); + check.template operator()<"answer is '{:#a}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#a}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '1p-5'"), SV("answer is '{:04a}'"), 0.03125); - check(SV("answer is '+1p-5'"), SV("answer is '{:+05a}'"), 0.03125); - check(SV("answer is '+01p-5'"), SV("answer is '{:+06a}'"), 0.03125); - - check(SV("answer is '0001p-5'"), SV("answer is '{:07a}'"), 0.03125); - check(SV("answer is '0001p-5'"), SV("answer is '{:-07a}'"), 0.03125); - check(SV("answer is '+001p-5'"), SV("answer is '{:+07a}'"), 0.03125); - check(SV("answer is ' 001p-5'"), SV("answer is '{: 07a}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010a}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010a}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010a}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010a}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010a}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010a}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010a}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010a}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010a}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010a}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010a}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010a}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010a}'"), nan_neg); + check.template operator()<"answer is '{:04a}'">(SV("answer is '1p-5'"), 0.03125); + check.template operator()<"answer is '{:+05a}'">(SV("answer is '+1p-5'"), 0.03125); + check.template operator()<"answer is '{:+06a}'">(SV("answer is '+01p-5'"), 0.03125); + + check.template operator()<"answer is '{:07a}'">(SV("answer is '0001p-5'"), 0.03125); + check.template operator()<"answer is '{:-07a}'">(SV("answer is '0001p-5'"), 0.03125); + check.template operator()<"answer is '{:+07a}'">(SV("answer is '+001p-5'"), 0.03125); + check.template operator()<"answer is '{: 07a}'">(SV("answer is ' 001p-5'"), 0.03125); + + check.template operator()<"answer is '{:010a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010a}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010a}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010a}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010a}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010a}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010a}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010a}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010a}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010a}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010a}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010a}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010a}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010a}'">(SV("answer is ' -nan'"), nan_neg); // *** precision *** // See format_test_floating_point_hex_lower_case_precision @@ -1023,116 +1025,116 @@ // Test whether the hexadecimal letters are the proper case. // The precision is too large for float, so two tests are used. - check(SV("answer is '1.ABCP+0'"), SV("answer is '{:A}'"), F(0x1.abcp+0)); - check(SV("answer is '1.DEFP+0'"), SV("answer is '{:A}'"), F(0x1.defp+0)); + check.template operator()<"answer is '{:A}'">(SV("answer is '1.ABCP+0'"), F(0x1.abcp+0)); + check.template operator()<"answer is '{:A}'">(SV("answer is '1.DEFP+0'"), F(0x1.defp+0)); // *** align-fill & width *** - check(SV("answer is ' 1P-2'"), SV("answer is '{:7A}'"), F(0.25)); - check(SV("answer is ' 1P-2'"), SV("answer is '{:>7A}'"), F(0.25)); - check(SV("answer is '1P-2 '"), SV("answer is '{:<7A}'"), F(0.25)); - check(SV("answer is ' 1P-2 '"), SV("answer is '{:^7A}'"), F(0.25)); + check.template operator()<"answer is '{:7A}'">(SV("answer is ' 1P-2'"), F(0.25)); + check.template operator()<"answer is '{:>7A}'">(SV("answer is ' 1P-2'"), F(0.25)); + check.template operator()<"answer is '{:<7A}'">(SV("answer is '1P-2 '"), F(0.25)); + check.template operator()<"answer is '{:^7A}'">(SV("answer is ' 1P-2 '"), F(0.25)); - check(SV("answer is '---1P-3'"), SV("answer is '{:->7A}'"), F(125e-3)); - check(SV("answer is '1P-3---'"), SV("answer is '{:-<7A}'"), F(125e-3)); - check(SV("answer is '-1P-3--'"), SV("answer is '{:-^7A}'"), F(125e-3)); + check.template operator()<"answer is '{:->7A}'">(SV("answer is '---1P-3'"), F(125e-3)); + check.template operator()<"answer is '{:-<7A}'">(SV("answer is '1P-3---'"), F(125e-3)); + check.template operator()<"answer is '{:-^7A}'">(SV("answer is '-1P-3--'"), F(125e-3)); - check(SV("answer is '***INF'"), SV("answer is '{:*>6A}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF***'"), SV("answer is '{:*<6A}'"), std::numeric_limits::infinity()); - check(SV("answer is '*INF**'"), SV("answer is '{:*^6A}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6A}'">(SV("answer is '***INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6A}'">(SV("answer is 'INF***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6A}'">(SV("answer is '*INF**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-INF'"), SV("answer is '{:#>7A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF###'"), SV("answer is '{:#<7A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-INF##'"), SV("answer is '{:#^7A}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7A}'">(SV("answer is '###-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7A}'">(SV("answer is '-INF###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7A}'">(SV("answer is '#-INF##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^NAN'"), SV("answer is '{:^>6A}'"), nan_pos); - check(SV("answer is 'NAN^^^'"), SV("answer is '{:^<6A}'"), nan_pos); - check(SV("answer is '^NAN^^'"), SV("answer is '{:^^6A}'"), nan_pos); + check.template operator()<"answer is '{:^>6A}'">(SV("answer is '^^^NAN'"), nan_pos); + check.template operator()<"answer is '{:^<6A}'">(SV("answer is 'NAN^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6A}'">(SV("answer is '^NAN^^'"), nan_pos); - check(SV("answer is '000-NAN'"), SV("answer is '{:0>7A}'"), nan_neg); - check(SV("answer is '-NAN000'"), SV("answer is '{:0<7A}'"), nan_neg); - check(SV("answer is '0-NAN00'"), SV("answer is '{:0^7A}'"), nan_neg); + check.template operator()<"answer is '{:0>7A}'">(SV("answer is '000-NAN'"), nan_neg); + check.template operator()<"answer is '{:0<7A}'">(SV("answer is '-NAN000'"), nan_neg); + check.template operator()<"answer is '{:0^7A}'">(SV("answer is '0-NAN00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 1P-2'"), SV("answer is '{:>07A}'"), F(0.25)); - check(SV("answer is '1P-2 '"), SV("answer is '{:<07A}'"), F(0.25)); - check(SV("answer is ' 1P-2 '"), SV("answer is '{:^07A}'"), F(0.25)); + check.template operator()<"answer is '{:>07A}'">(SV("answer is ' 1P-2'"), F(0.25)); + check.template operator()<"answer is '{:<07A}'">(SV("answer is '1P-2 '"), F(0.25)); + check.template operator()<"answer is '{:^07A}'">(SV("answer is ' 1P-2 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0P+0'"), SV("answer is '{:A}'"), F(0)); - check(SV("answer is '0P+0'"), SV("answer is '{:-A}'"), F(0)); - check(SV("answer is '+0P+0'"), SV("answer is '{:+A}'"), F(0)); - check(SV("answer is ' 0P+0'"), SV("answer is '{: A}'"), F(0)); + check.template operator()<"answer is '{:A}'">(SV("answer is '0P+0'"), F(0)); + check.template operator()<"answer is '{:-A}'">(SV("answer is '0P+0'"), F(0)); + check.template operator()<"answer is '{:+A}'">(SV("answer is '+0P+0'"), F(0)); + check.template operator()<"answer is '{: A}'">(SV("answer is ' 0P+0'"), F(0)); - check(SV("answer is '-0P+0'"), SV("answer is '{:A}'"), F(-0.)); - check(SV("answer is '-0P+0'"), SV("answer is '{:-A}'"), F(-0.)); - check(SV("answer is '-0P+0'"), SV("answer is '{:+A}'"), F(-0.)); - check(SV("answer is '-0P+0'"), SV("answer is '{: A}'"), F(-0.)); + check.template operator()<"answer is '{:A}'">(SV("answer is '-0P+0'"), F(-0.)); + check.template operator()<"answer is '{:-A}'">(SV("answer is '-0P+0'"), F(-0.)); + check.template operator()<"answer is '{:+A}'">(SV("answer is '-0P+0'"), F(-0.)); + check.template operator()<"answer is '{: A}'">(SV("answer is '-0P+0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'INF'"), SV("answer is '{:A}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF'"), SV("answer is '{:-A}'"), std::numeric_limits::infinity()); - check(SV("answer is '+INF'"), SV("answer is '{:+A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: A}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-INF'"), SV("answer is '{:A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:-A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:+A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{: A}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'NAN'"), SV("answer is '{:A}'"), nan_pos); - check(SV("answer is 'NAN'"), SV("answer is '{:-A}'"), nan_pos); - check(SV("answer is '+NAN'"), SV("answer is '{:+A}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: A}'"), nan_pos); - - check(SV("answer is '-NAN'"), SV("answer is '{:A}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:-A}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:+A}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{: A}'"), nan_neg); + check.template operator()<"answer is '{:A}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-A}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+A}'">(SV("answer is '+INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:A}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:-A}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:+A}'">(SV("answer is '+NAN'"), nan_pos); + check.template operator()<"answer is '{: A}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:A}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:-A}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:+A}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{: A}'">(SV("answer is '-NAN'"), nan_neg); // *** alternate form *** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0P+0'"), SV("answer is '{:A}'"), F(0)); - check(SV("answer is '0.P+0'"), SV("answer is '{:#A}'"), F(0)); + check.template operator()<"answer is '{:A}'">(SV("answer is '0P+0'"), F(0)); + check.template operator()<"answer is '{:#A}'">(SV("answer is '0.P+0'"), F(0)); - check(SV("answer is '1P+1'"), SV("answer is '{:.0A}'"), F(2.5)); - check(SV("answer is '1.P+1'"), SV("answer is '{:#.0A}'"), F(2.5)); - check(SV("answer is '1.4P+1'"), SV("answer is '{:#A}'"), F(2.5)); + check.template operator()<"answer is '{:.0A}'">(SV("answer is '1P+1'"), F(2.5)); + check.template operator()<"answer is '{:#.0A}'">(SV("answer is '1.P+1'"), F(2.5)); + check.template operator()<"answer is '{:#A}'">(SV("answer is '1.4P+1'"), F(2.5)); - check(SV("answer is 'INF'"), SV("answer is '{:#A}'"), std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:#A}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#A}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); - check(SV("answer is 'NAN'"), SV("answer is '{:#A}'"), nan_pos); - check(SV("answer is '-NAN'"), SV("answer is '{:#A}'"), nan_neg); + check.template operator()<"answer is '{:#A}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:#A}'">(SV("answer is '-NAN'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '1P-5'"), SV("answer is '{:04A}'"), 0.03125); - check(SV("answer is '+1P-5'"), SV("answer is '{:+05A}'"), 0.03125); - check(SV("answer is '+01P-5'"), SV("answer is '{:+06A}'"), 0.03125); - - check(SV("answer is '0001P-5'"), SV("answer is '{:07A}'"), 0.03125); - check(SV("answer is '0001P-5'"), SV("answer is '{:-07A}'"), 0.03125); - check(SV("answer is '+001P-5'"), SV("answer is '{:+07A}'"), 0.03125); - check(SV("answer is ' 001P-5'"), SV("answer is '{: 07A}'"), 0.03125); - - check(SV("answer is ' INF'"), SV("answer is '{:010A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{:-010A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +INF'"), SV("answer is '{:+010A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: 010A}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -INF'"), SV("answer is '{:010A}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:-010A}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:+010A}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{: 010A}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' NAN'"), SV("answer is '{:010A}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{:-010A}'"), nan_pos); - check(SV("answer is ' +NAN'"), SV("answer is '{:+010A}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: 010A}'"), nan_pos); - - check(SV("answer is ' -NAN'"), SV("answer is '{:010A}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:-010A}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:+010A}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{: 010A}'"), nan_neg); + check.template operator()<"answer is '{:04A}'">(SV("answer is '1P-5'"), 0.03125); + check.template operator()<"answer is '{:+05A}'">(SV("answer is '+1P-5'"), 0.03125); + check.template operator()<"answer is '{:+06A}'">(SV("answer is '+01P-5'"), 0.03125); + + check.template operator()<"answer is '{:07A}'">(SV("answer is '0001P-5'"), 0.03125); + check.template operator()<"answer is '{:-07A}'">(SV("answer is '0001P-5'"), 0.03125); + check.template operator()<"answer is '{:+07A}'">(SV("answer is '+001P-5'"), 0.03125); + check.template operator()<"answer is '{: 07A}'">(SV("answer is ' 001P-5'"), 0.03125); + + check.template operator()<"answer is '{:010A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010A}'">(SV("answer is ' +INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010A}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010A}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010A}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010A}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010A}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:-010A}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:+010A}'">(SV("answer is ' +NAN'"), nan_pos); + check.template operator()<"answer is '{: 010A}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:010A}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:-010A}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:+010A}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{: 010A}'">(SV("answer is ' -NAN'"), nan_neg); // *** precision *** // See format_test_floating_point_hex_upper_case_precision @@ -1147,106 +1149,109 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 1.000000p-2'"), SV("answer is '{:14.6a}'"), F(0.25)); - check(SV("answer is ' 1.000000p-2'"), SV("answer is '{:>14.6a}'"), F(0.25)); - check(SV("answer is '1.000000p-2 '"), SV("answer is '{:<14.6a}'"), F(0.25)); - check(SV("answer is ' 1.000000p-2 '"), SV("answer is '{:^14.6a}'"), F(0.25)); + check.template operator()<"answer is '{:14.6a}'">(SV("answer is ' 1.000000p-2'"), F(0.25)); + check.template operator()<"answer is '{:>14.6a}'">(SV("answer is ' 1.000000p-2'"), F(0.25)); + check.template operator()<"answer is '{:<14.6a}'">(SV("answer is '1.000000p-2 '"), F(0.25)); + check.template operator()<"answer is '{:^14.6a}'">(SV("answer is ' 1.000000p-2 '"), F(0.25)); - check(SV("answer is '---1.000000p-3'"), SV("answer is '{:->14.6a}'"), F(125e-3)); - check(SV("answer is '1.000000p-3---'"), SV("answer is '{:-<14.6a}'"), F(125e-3)); - check(SV("answer is '-1.000000p-3--'"), SV("answer is '{:-^14.6a}'"), F(125e-3)); + check.template operator()<"answer is '{:->14.6a}'">(SV("answer is '---1.000000p-3'"), F(125e-3)); + check.template operator()<"answer is '{:-<14.6a}'">(SV("answer is '1.000000p-3---'"), F(125e-3)); + check.template operator()<"answer is '{:-^14.6a}'">(SV("answer is '-1.000000p-3--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6.6a}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6.6a}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6.6a}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6.6a}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7.6a}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7.6a}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7.6a}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7.6a}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6.6a}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6.6a}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6.6a}'"), nan_pos); + check.template operator()<"answer is '{:^>6.6a}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6.6a}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6.6a}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7.6a}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7.6a}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7.6a}'"), nan_neg); + check.template operator()<"answer is '{:0>7.6a}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7.6a}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7.6a}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 1.000000p-2'"), SV("answer is '{:>014.6a}'"), F(0.25)); - check(SV("answer is '1.000000p-2 '"), SV("answer is '{:<014.6a}'"), F(0.25)); - check(SV("answer is ' 1.000000p-2 '"), SV("answer is '{:^014.6a}'"), F(0.25)); + check.template operator()<"answer is '{:>014.6a}'">(SV("answer is ' 1.000000p-2'"), F(0.25)); + check.template operator()<"answer is '{:<014.6a}'">(SV("answer is '1.000000p-2 '"), F(0.25)); + check.template operator()<"answer is '{:^014.6a}'">(SV("answer is ' 1.000000p-2 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0.000000p+0'"), SV("answer is '{:.6a}'"), F(0)); - check(SV("answer is '0.000000p+0'"), SV("answer is '{:-.6a}'"), F(0)); - check(SV("answer is '+0.000000p+0'"), SV("answer is '{:+.6a}'"), F(0)); - check(SV("answer is ' 0.000000p+0'"), SV("answer is '{: .6a}'"), F(0)); + check.template operator()<"answer is '{:.6a}'">(SV("answer is '0.000000p+0'"), F(0)); + check.template operator()<"answer is '{:-.6a}'">(SV("answer is '0.000000p+0'"), F(0)); + check.template operator()<"answer is '{:+.6a}'">(SV("answer is '+0.000000p+0'"), F(0)); + check.template operator()<"answer is '{: .6a}'">(SV("answer is ' 0.000000p+0'"), F(0)); - check(SV("answer is '-0.000000p+0'"), SV("answer is '{:.6a}'"), F(-0.)); - check(SV("answer is '-0.000000p+0'"), SV("answer is '{:-.6a}'"), F(-0.)); - check(SV("answer is '-0.000000p+0'"), SV("answer is '{:+.6a}'"), F(-0.)); - check(SV("answer is '-0.000000p+0'"), SV("answer is '{: .6a}'"), F(-0.)); + check.template operator()<"answer is '{:.6a}'">(SV("answer is '-0.000000p+0'"), F(-0.)); + check.template operator()<"answer is '{:-.6a}'">(SV("answer is '-0.000000p+0'"), F(-0.)); + check.template operator()<"answer is '{:+.6a}'">(SV("answer is '-0.000000p+0'"), F(-0.)); + check.template operator()<"answer is '{: .6a}'">(SV("answer is '-0.000000p+0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: .6a}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: .6a}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:.6a}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-.6a}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+.6a}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: .6a}'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:.6a}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-.6a}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+.6a}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: .6a}'"), nan_neg); + check.template operator()<"answer is '{:.6a}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-.6a}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+.6a}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: .6a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:.6a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-.6a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+.6a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: .6a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:.6a}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-.6a}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+.6a}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: .6a}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:.6a}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-.6a}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+.6a}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: .6a}'">(SV("answer is '-nan'"), nan_neg); // *** alternate form *** - check(SV("answer is '1.400000p+1'"), SV("answer is '{:#.6a}'"), F(2.5)); + check.template operator()<"answer is '{:#.6a}'">(SV("answer is '1.400000p+1'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#.6a}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#.6a}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#.6a}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#.6a}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#.6a}'"), nan_neg); + check.template operator()<"answer is '{:#.6a}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#.6a}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '1.000000p-5'"), SV("answer is '{:011.6a}'"), 0.03125); - check(SV("answer is '+1.000000p-5'"), SV("answer is '{:+012.6a}'"), 0.03125); - check(SV("answer is '+01.000000p-5'"), SV("answer is '{:+013.6a}'"), 0.03125); - - check(SV("answer is '0001.000000p-5'"), SV("answer is '{:014.6a}'"), 0.03125); - check(SV("answer is '0001.000000p-5'"), SV("answer is '{:-014.6a}'"), 0.03125); - check(SV("answer is '+001.000000p-5'"), SV("answer is '{:+014.6a}'"), 0.03125); - check(SV("answer is ' 001.000000p-5'"), SV("answer is '{: 014.6a}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010.6a}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010.6a}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010.6a}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010.6a}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010.6a}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010.6a}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010.6a}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010.6a}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010.6a}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010.6a}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010.6a}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010.6a}'"), nan_neg); + check.template operator()<"answer is '{:011.6a}'">(SV("answer is '1.000000p-5'"), 0.03125); + check.template operator()<"answer is '{:+012.6a}'">(SV("answer is '+1.000000p-5'"), 0.03125); + check.template operator()<"answer is '{:+013.6a}'">(SV("answer is '+01.000000p-5'"), 0.03125); + + check.template operator()<"answer is '{:014.6a}'">(SV("answer is '0001.000000p-5'"), 0.03125); + check.template operator()<"answer is '{:-014.6a}'">(SV("answer is '0001.000000p-5'"), 0.03125); + check.template operator()<"answer is '{:+014.6a}'">(SV("answer is '+001.000000p-5'"), 0.03125); + check.template operator()<"answer is '{: 014.6a}'">(SV("answer is ' 001.000000p-5'"), 0.03125); + + check.template operator()<"answer is '{:010.6a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010.6a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010.6a}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010.6a}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010.6a}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010.6a}'">(SV("answer is ' -inf'"), + -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010.6a}'">(SV("answer is ' -inf'"), + -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010.6a}'">(SV("answer is ' -inf'"), + -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010.6a}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010.6a}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010.6a}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010.6a}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010.6a}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010.6a}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010.6a}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010.6a}'">(SV("answer is ' -nan'"), nan_neg); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1258,106 +1263,109 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 1.000000P-2'"), SV("answer is '{:14.6A}'"), F(0.25)); - check(SV("answer is ' 1.000000P-2'"), SV("answer is '{:>14.6A}'"), F(0.25)); - check(SV("answer is '1.000000P-2 '"), SV("answer is '{:<14.6A}'"), F(0.25)); - check(SV("answer is ' 1.000000P-2 '"), SV("answer is '{:^14.6A}'"), F(0.25)); + check.template operator()<"answer is '{:14.6A}'">(SV("answer is ' 1.000000P-2'"), F(0.25)); + check.template operator()<"answer is '{:>14.6A}'">(SV("answer is ' 1.000000P-2'"), F(0.25)); + check.template operator()<"answer is '{:<14.6A}'">(SV("answer is '1.000000P-2 '"), F(0.25)); + check.template operator()<"answer is '{:^14.6A}'">(SV("answer is ' 1.000000P-2 '"), F(0.25)); - check(SV("answer is '---1.000000P-3'"), SV("answer is '{:->14.6A}'"), F(125e-3)); - check(SV("answer is '1.000000P-3---'"), SV("answer is '{:-<14.6A}'"), F(125e-3)); - check(SV("answer is '-1.000000P-3--'"), SV("answer is '{:-^14.6A}'"), F(125e-3)); + check.template operator()<"answer is '{:->14.6A}'">(SV("answer is '---1.000000P-3'"), F(125e-3)); + check.template operator()<"answer is '{:-<14.6A}'">(SV("answer is '1.000000P-3---'"), F(125e-3)); + check.template operator()<"answer is '{:-^14.6A}'">(SV("answer is '-1.000000P-3--'"), F(125e-3)); - check(SV("answer is '***INF'"), SV("answer is '{:*>6.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF***'"), SV("answer is '{:*<6.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is '*INF**'"), SV("answer is '{:*^6.6A}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6.6A}'">(SV("answer is '***INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6.6A}'">(SV("answer is 'INF***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6.6A}'">(SV("answer is '*INF**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-INF'"), SV("answer is '{:#>7.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF###'"), SV("answer is '{:#<7.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-INF##'"), SV("answer is '{:#^7.6A}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7.6A}'">(SV("answer is '###-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7.6A}'">(SV("answer is '-INF###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7.6A}'">(SV("answer is '#-INF##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^NAN'"), SV("answer is '{:^>6.6A}'"), nan_pos); - check(SV("answer is 'NAN^^^'"), SV("answer is '{:^<6.6A}'"), nan_pos); - check(SV("answer is '^NAN^^'"), SV("answer is '{:^^6.6A}'"), nan_pos); + check.template operator()<"answer is '{:^>6.6A}'">(SV("answer is '^^^NAN'"), nan_pos); + check.template operator()<"answer is '{:^<6.6A}'">(SV("answer is 'NAN^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6.6A}'">(SV("answer is '^NAN^^'"), nan_pos); - check(SV("answer is '000-NAN'"), SV("answer is '{:0>7.6A}'"), nan_neg); - check(SV("answer is '-NAN000'"), SV("answer is '{:0<7.6A}'"), nan_neg); - check(SV("answer is '0-NAN00'"), SV("answer is '{:0^7.6A}'"), nan_neg); + check.template operator()<"answer is '{:0>7.6A}'">(SV("answer is '000-NAN'"), nan_neg); + check.template operator()<"answer is '{:0<7.6A}'">(SV("answer is '-NAN000'"), nan_neg); + check.template operator()<"answer is '{:0^7.6A}'">(SV("answer is '0-NAN00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 1.000000P-2'"), SV("answer is '{:>014.6A}'"), F(0.25)); - check(SV("answer is '1.000000P-2 '"), SV("answer is '{:<014.6A}'"), F(0.25)); - check(SV("answer is ' 1.000000P-2 '"), SV("answer is '{:^014.6A}'"), F(0.25)); + check.template operator()<"answer is '{:>014.6A}'">(SV("answer is ' 1.000000P-2'"), F(0.25)); + check.template operator()<"answer is '{:<014.6A}'">(SV("answer is '1.000000P-2 '"), F(0.25)); + check.template operator()<"answer is '{:^014.6A}'">(SV("answer is ' 1.000000P-2 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0.000000P+0'"), SV("answer is '{:.6A}'"), F(0)); - check(SV("answer is '0.000000P+0'"), SV("answer is '{:-.6A}'"), F(0)); - check(SV("answer is '+0.000000P+0'"), SV("answer is '{:+.6A}'"), F(0)); - check(SV("answer is ' 0.000000P+0'"), SV("answer is '{: .6A}'"), F(0)); + check.template operator()<"answer is '{:.6A}'">(SV("answer is '0.000000P+0'"), F(0)); + check.template operator()<"answer is '{:-.6A}'">(SV("answer is '0.000000P+0'"), F(0)); + check.template operator()<"answer is '{:+.6A}'">(SV("answer is '+0.000000P+0'"), F(0)); + check.template operator()<"answer is '{: .6A}'">(SV("answer is ' 0.000000P+0'"), F(0)); - check(SV("answer is '-0.000000P+0'"), SV("answer is '{:.6A}'"), F(-0.)); - check(SV("answer is '-0.000000P+0'"), SV("answer is '{:-.6A}'"), F(-0.)); - check(SV("answer is '-0.000000P+0'"), SV("answer is '{:+.6A}'"), F(-0.)); - check(SV("answer is '-0.000000P+0'"), SV("answer is '{: .6A}'"), F(-0.)); + check.template operator()<"answer is '{:.6A}'">(SV("answer is '-0.000000P+0'"), F(-0.)); + check.template operator()<"answer is '{:-.6A}'">(SV("answer is '-0.000000P+0'"), F(-0.)); + check.template operator()<"answer is '{:+.6A}'">(SV("answer is '-0.000000P+0'"), F(-0.)); + check.template operator()<"answer is '{: .6A}'">(SV("answer is '-0.000000P+0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'INF'"), SV("answer is '{:.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF'"), SV("answer is '{:-.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is '+INF'"), SV("answer is '{:+.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: .6A}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-INF'"), SV("answer is '{:.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:-.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:+.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{: .6A}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'NAN'"), SV("answer is '{:.6A}'"), nan_pos); - check(SV("answer is 'NAN'"), SV("answer is '{:-.6A}'"), nan_pos); - check(SV("answer is '+NAN'"), SV("answer is '{:+.6A}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: .6A}'"), nan_pos); - - check(SV("answer is '-NAN'"), SV("answer is '{:.6A}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:-.6A}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:+.6A}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{: .6A}'"), nan_neg); + check.template operator()<"answer is '{:.6A}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-.6A}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+.6A}'">(SV("answer is '+INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: .6A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:.6A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-.6A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+.6A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: .6A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:.6A}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:-.6A}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:+.6A}'">(SV("answer is '+NAN'"), nan_pos); + check.template operator()<"answer is '{: .6A}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:.6A}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:-.6A}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:+.6A}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{: .6A}'">(SV("answer is '-NAN'"), nan_neg); // *** alternate form *** - check(SV("answer is '1.400000P+1'"), SV("answer is '{:#.6A}'"), F(2.5)); + check.template operator()<"answer is '{:#.6A}'">(SV("answer is '1.400000P+1'"), F(2.5)); - check(SV("answer is 'INF'"), SV("answer is '{:#.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:#.6A}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#.6A}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#.6A}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); - check(SV("answer is 'NAN'"), SV("answer is '{:#.6A}'"), nan_pos); - check(SV("answer is '-NAN'"), SV("answer is '{:#.6A}'"), nan_neg); + check.template operator()<"answer is '{:#.6A}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:#.6A}'">(SV("answer is '-NAN'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '1.000000P-5'"), SV("answer is '{:011.6A}'"), 0.03125); - check(SV("answer is '+1.000000P-5'"), SV("answer is '{:+012.6A}'"), 0.03125); - check(SV("answer is '+01.000000P-5'"), SV("answer is '{:+013.6A}'"), 0.03125); - - check(SV("answer is '0001.000000P-5'"), SV("answer is '{:014.6A}'"), 0.03125); - check(SV("answer is '0001.000000P-5'"), SV("answer is '{:-014.6A}'"), 0.03125); - check(SV("answer is '+001.000000P-5'"), SV("answer is '{:+014.6A}'"), 0.03125); - check(SV("answer is ' 001.000000P-5'"), SV("answer is '{: 014.6A}'"), 0.03125); - - check(SV("answer is ' INF'"), SV("answer is '{:010.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{:-010.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +INF'"), SV("answer is '{:+010.6A}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: 010.6A}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -INF'"), SV("answer is '{:010.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:-010.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:+010.6A}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{: 010.6A}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' NAN'"), SV("answer is '{:010.6A}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{:-010.6A}'"), nan_pos); - check(SV("answer is ' +NAN'"), SV("answer is '{:+010.6A}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: 010.6A}'"), nan_pos); - - check(SV("answer is ' -NAN'"), SV("answer is '{:010.6A}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:-010.6A}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:+010.6A}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{: 010.6A}'"), nan_neg); + check.template operator()<"answer is '{:011.6A}'">(SV("answer is '1.000000P-5'"), 0.03125); + check.template operator()<"answer is '{:+012.6A}'">(SV("answer is '+1.000000P-5'"), 0.03125); + check.template operator()<"answer is '{:+013.6A}'">(SV("answer is '+01.000000P-5'"), 0.03125); + + check.template operator()<"answer is '{:014.6A}'">(SV("answer is '0001.000000P-5'"), 0.03125); + check.template operator()<"answer is '{:-014.6A}'">(SV("answer is '0001.000000P-5'"), 0.03125); + check.template operator()<"answer is '{:+014.6A}'">(SV("answer is '+001.000000P-5'"), 0.03125); + check.template operator()<"answer is '{: 014.6A}'">(SV("answer is ' 001.000000P-5'"), 0.03125); + + check.template operator()<"answer is '{:010.6A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010.6A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010.6A}'">(SV("answer is ' +INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010.6A}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010.6A}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010.6A}'">(SV("answer is ' -INF'"), + -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010.6A}'">(SV("answer is ' -INF'"), + -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010.6A}'">(SV("answer is ' -INF'"), + -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010.6A}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:-010.6A}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:+010.6A}'">(SV("answer is ' +NAN'"), nan_pos); + check.template operator()<"answer is '{: 010.6A}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:010.6A}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:-010.6A}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:+010.6A}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{: 010.6A}'">(SV("answer is ' -NAN'"), nan_neg); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1369,118 +1377,118 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 2.500000e-01'"), SV("answer is '{:15e}'"), F(0.25)); - check(SV("answer is ' 2.500000e-01'"), SV("answer is '{:>15e}'"), F(0.25)); - check(SV("answer is '2.500000e-01 '"), SV("answer is '{:<15e}'"), F(0.25)); - check(SV("answer is ' 2.500000e-01 '"), SV("answer is '{:^15e}'"), F(0.25)); + check.template operator()<"answer is '{:15e}'">(SV("answer is ' 2.500000e-01'"), F(0.25)); + check.template operator()<"answer is '{:>15e}'">(SV("answer is ' 2.500000e-01'"), F(0.25)); + check.template operator()<"answer is '{:<15e}'">(SV("answer is '2.500000e-01 '"), F(0.25)); + check.template operator()<"answer is '{:^15e}'">(SV("answer is ' 2.500000e-01 '"), F(0.25)); - check(SV("answer is '---1.250000e-01'"), SV("answer is '{:->15e}'"), F(125e-3)); - check(SV("answer is '1.250000e-01---'"), SV("answer is '{:-<15e}'"), F(125e-3)); - check(SV("answer is '-1.250000e-01--'"), SV("answer is '{:-^15e}'"), F(125e-3)); + check.template operator()<"answer is '{:->15e}'">(SV("answer is '---1.250000e-01'"), F(125e-3)); + check.template operator()<"answer is '{:-<15e}'">(SV("answer is '1.250000e-01---'"), F(125e-3)); + check.template operator()<"answer is '{:-^15e}'">(SV("answer is '-1.250000e-01--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6e}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6e}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6e}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6e}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6e}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6e}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7e}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7e}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7e}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7e}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7e}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7e}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6e}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6e}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6e}'"), nan_pos); + check.template operator()<"answer is '{:^>6e}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6e}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6e}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7e}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7e}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7e}'"), nan_neg); + check.template operator()<"answer is '{:0>7e}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7e}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7e}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 2.500000e-01'"), SV("answer is '{:>015e}'"), F(0.25)); - check(SV("answer is '2.500000e-01 '"), SV("answer is '{:<015e}'"), F(0.25)); - check(SV("answer is ' 2.500000e-01 '"), SV("answer is '{:^015e}'"), F(0.25)); + check.template operator()<"answer is '{:>015e}'">(SV("answer is ' 2.500000e-01'"), F(0.25)); + check.template operator()<"answer is '{:<015e}'">(SV("answer is '2.500000e-01 '"), F(0.25)); + check.template operator()<"answer is '{:^015e}'">(SV("answer is ' 2.500000e-01 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0.000000e+00'"), SV("answer is '{:e}'"), F(0)); - check(SV("answer is '0.000000e+00'"), SV("answer is '{:-e}'"), F(0)); - check(SV("answer is '+0.000000e+00'"), SV("answer is '{:+e}'"), F(0)); - check(SV("answer is ' 0.000000e+00'"), SV("answer is '{: e}'"), F(0)); + check.template operator()<"answer is '{:e}'">(SV("answer is '0.000000e+00'"), F(0)); + check.template operator()<"answer is '{:-e}'">(SV("answer is '0.000000e+00'"), F(0)); + check.template operator()<"answer is '{:+e}'">(SV("answer is '+0.000000e+00'"), F(0)); + check.template operator()<"answer is '{: e}'">(SV("answer is ' 0.000000e+00'"), F(0)); - check(SV("answer is '-0.000000e+00'"), SV("answer is '{:e}'"), F(-0.)); - check(SV("answer is '-0.000000e+00'"), SV("answer is '{:-e}'"), F(-0.)); - check(SV("answer is '-0.000000e+00'"), SV("answer is '{:+e}'"), F(-0.)); - check(SV("answer is '-0.000000e+00'"), SV("answer is '{: e}'"), F(-0.)); + check.template operator()<"answer is '{:e}'">(SV("answer is '-0.000000e+00'"), F(-0.)); + check.template operator()<"answer is '{:-e}'">(SV("answer is '-0.000000e+00'"), F(-0.)); + check.template operator()<"answer is '{:+e}'">(SV("answer is '-0.000000e+00'"), F(-0.)); + check.template operator()<"answer is '{: e}'">(SV("answer is '-0.000000e+00'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:e}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-e}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+e}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: e}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:e}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-e}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+e}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: e}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:e}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-e}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+e}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: e}'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:e}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-e}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+e}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: e}'"), nan_neg); + check.template operator()<"answer is '{:e}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-e}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+e}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: e}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:e}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-e}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+e}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: e}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:e}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-e}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+e}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: e}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:e}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-e}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+e}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: e}'">(SV("answer is '-nan'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0e+00'"), SV("answer is '{:.0e}'"), F(0)); - check(SV("answer is '0.e+00'"), SV("answer is '{:#.0e}'"), F(0)); + check.template operator()<"answer is '{:.0e}'">(SV("answer is '0e+00'"), F(0)); + check.template operator()<"answer is '{:#.0e}'">(SV("answer is '0.e+00'"), F(0)); - check(SV("answer is '0.000000e+00'"), SV("answer is '{:#e}'"), F(0)); - check(SV("answer is '2.500000e+00'"), SV("answer is '{:#e}'"), F(2.5)); + check.template operator()<"answer is '{:#e}'">(SV("answer is '0.000000e+00'"), F(0)); + check.template operator()<"answer is '{:#e}'">(SV("answer is '2.500000e+00'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#e}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#e}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#e}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#e}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#e}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#e}'"), nan_neg); + check.template operator()<"answer is '{:#e}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#e}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '3.125000e-02'"), SV("answer is '{:07e}'"), 0.03125); - check(SV("answer is '+3.125000e-02'"), SV("answer is '{:+07e}'"), 0.03125); - check(SV("answer is '+3.125000e-02'"), SV("answer is '{:+08e}'"), 0.03125); - check(SV("answer is '+3.125000e-02'"), SV("answer is '{:+09e}'"), 0.03125); - - check(SV("answer is '003.125000e-02'"), SV("answer is '{:014e}'"), 0.03125); - check(SV("answer is '003.125000e-02'"), SV("answer is '{:-014e}'"), 0.03125); - check(SV("answer is '+03.125000e-02'"), SV("answer is '{:+014e}'"), 0.03125); - check(SV("answer is ' 03.125000e-02'"), SV("answer is '{: 014e}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010e}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010e}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010e}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010e}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010e}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010e}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010e}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010e}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010e}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010e}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010e}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010e}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010e}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010e}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010e}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010e}'"), nan_neg); + check.template operator()<"answer is '{:07e}'">(SV("answer is '3.125000e-02'"), 0.03125); + check.template operator()<"answer is '{:+07e}'">(SV("answer is '+3.125000e-02'"), 0.03125); + check.template operator()<"answer is '{:+08e}'">(SV("answer is '+3.125000e-02'"), 0.03125); + check.template operator()<"answer is '{:+09e}'">(SV("answer is '+3.125000e-02'"), 0.03125); + + check.template operator()<"answer is '{:014e}'">(SV("answer is '003.125000e-02'"), 0.03125); + check.template operator()<"answer is '{:-014e}'">(SV("answer is '003.125000e-02'"), 0.03125); + check.template operator()<"answer is '{:+014e}'">(SV("answer is '+03.125000e-02'"), 0.03125); + check.template operator()<"answer is '{: 014e}'">(SV("answer is ' 03.125000e-02'"), 0.03125); + + check.template operator()<"answer is '{:010e}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010e}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010e}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010e}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010e}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010e}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010e}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010e}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010e}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010e}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010e}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010e}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010e}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010e}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010e}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010e}'">(SV("answer is ' -nan'"), nan_neg); // *** precision *** - check(SV("answer is '3e-02'"), SV("answer is '{:.0e}'"), 0.03125); - check(SV("answer is '3.1e-02'"), SV("answer is '{:.1e}'"), 0.03125); - check(SV("answer is '3.125e-02'"), SV("answer is '{:.3e}'"), 0.03125); - check(SV("answer is '3.1250000000e-02'"), SV("answer is '{:.10e}'"), 0.03125); + check.template operator()<"answer is '{:.0e}'">(SV("answer is '3e-02'"), 0.03125); + check.template operator()<"answer is '{:.1e}'">(SV("answer is '3.1e-02'"), 0.03125); + check.template operator()<"answer is '{:.3e}'">(SV("answer is '3.125e-02'"), 0.03125); + check.template operator()<"answer is '{:.10e}'">(SV("answer is '3.1250000000e-02'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1492,118 +1500,118 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 2.500000E-01'"), SV("answer is '{:15E}'"), F(0.25)); - check(SV("answer is ' 2.500000E-01'"), SV("answer is '{:>15E}'"), F(0.25)); - check(SV("answer is '2.500000E-01 '"), SV("answer is '{:<15E}'"), F(0.25)); - check(SV("answer is ' 2.500000E-01 '"), SV("answer is '{:^15E}'"), F(0.25)); + check.template operator()<"answer is '{:15E}'">(SV("answer is ' 2.500000E-01'"), F(0.25)); + check.template operator()<"answer is '{:>15E}'">(SV("answer is ' 2.500000E-01'"), F(0.25)); + check.template operator()<"answer is '{:<15E}'">(SV("answer is '2.500000E-01 '"), F(0.25)); + check.template operator()<"answer is '{:^15E}'">(SV("answer is ' 2.500000E-01 '"), F(0.25)); - check(SV("answer is '---1.250000E-01'"), SV("answer is '{:->15E}'"), F(125e-3)); - check(SV("answer is '1.250000E-01---'"), SV("answer is '{:-<15E}'"), F(125e-3)); - check(SV("answer is '-1.250000E-01--'"), SV("answer is '{:-^15E}'"), F(125e-3)); + check.template operator()<"answer is '{:->15E}'">(SV("answer is '---1.250000E-01'"), F(125e-3)); + check.template operator()<"answer is '{:-<15E}'">(SV("answer is '1.250000E-01---'"), F(125e-3)); + check.template operator()<"answer is '{:-^15E}'">(SV("answer is '-1.250000E-01--'"), F(125e-3)); - check(SV("answer is '***INF'"), SV("answer is '{:*>6E}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF***'"), SV("answer is '{:*<6E}'"), std::numeric_limits::infinity()); - check(SV("answer is '*INF**'"), SV("answer is '{:*^6E}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6E}'">(SV("answer is '***INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6E}'">(SV("answer is 'INF***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6E}'">(SV("answer is '*INF**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-INF'"), SV("answer is '{:#>7E}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF###'"), SV("answer is '{:#<7E}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-INF##'"), SV("answer is '{:#^7E}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7E}'">(SV("answer is '###-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7E}'">(SV("answer is '-INF###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7E}'">(SV("answer is '#-INF##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^NAN'"), SV("answer is '{:^>6E}'"), nan_pos); - check(SV("answer is 'NAN^^^'"), SV("answer is '{:^<6E}'"), nan_pos); - check(SV("answer is '^NAN^^'"), SV("answer is '{:^^6E}'"), nan_pos); + check.template operator()<"answer is '{:^>6E}'">(SV("answer is '^^^NAN'"), nan_pos); + check.template operator()<"answer is '{:^<6E}'">(SV("answer is 'NAN^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6E}'">(SV("answer is '^NAN^^'"), nan_pos); - check(SV("answer is '000-NAN'"), SV("answer is '{:0>7E}'"), nan_neg); - check(SV("answer is '-NAN000'"), SV("answer is '{:0<7E}'"), nan_neg); - check(SV("answer is '0-NAN00'"), SV("answer is '{:0^7E}'"), nan_neg); + check.template operator()<"answer is '{:0>7E}'">(SV("answer is '000-NAN'"), nan_neg); + check.template operator()<"answer is '{:0<7E}'">(SV("answer is '-NAN000'"), nan_neg); + check.template operator()<"answer is '{:0^7E}'">(SV("answer is '0-NAN00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 2.500000E-01'"), SV("answer is '{:>015E}'"), F(0.25)); - check(SV("answer is '2.500000E-01 '"), SV("answer is '{:<015E}'"), F(0.25)); - check(SV("answer is ' 2.500000E-01 '"), SV("answer is '{:^015E}'"), F(0.25)); + check.template operator()<"answer is '{:>015E}'">(SV("answer is ' 2.500000E-01'"), F(0.25)); + check.template operator()<"answer is '{:<015E}'">(SV("answer is '2.500000E-01 '"), F(0.25)); + check.template operator()<"answer is '{:^015E}'">(SV("answer is ' 2.500000E-01 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0.000000E+00'"), SV("answer is '{:E}'"), F(0)); - check(SV("answer is '0.000000E+00'"), SV("answer is '{:-E}'"), F(0)); - check(SV("answer is '+0.000000E+00'"), SV("answer is '{:+E}'"), F(0)); - check(SV("answer is ' 0.000000E+00'"), SV("answer is '{: E}'"), F(0)); + check.template operator()<"answer is '{:E}'">(SV("answer is '0.000000E+00'"), F(0)); + check.template operator()<"answer is '{:-E}'">(SV("answer is '0.000000E+00'"), F(0)); + check.template operator()<"answer is '{:+E}'">(SV("answer is '+0.000000E+00'"), F(0)); + check.template operator()<"answer is '{: E}'">(SV("answer is ' 0.000000E+00'"), F(0)); - check(SV("answer is '-0.000000E+00'"), SV("answer is '{:E}'"), F(-0.)); - check(SV("answer is '-0.000000E+00'"), SV("answer is '{:-E}'"), F(-0.)); - check(SV("answer is '-0.000000E+00'"), SV("answer is '{:+E}'"), F(-0.)); - check(SV("answer is '-0.000000E+00'"), SV("answer is '{: E}'"), F(-0.)); + check.template operator()<"answer is '{:E}'">(SV("answer is '-0.000000E+00'"), F(-0.)); + check.template operator()<"answer is '{:-E}'">(SV("answer is '-0.000000E+00'"), F(-0.)); + check.template operator()<"answer is '{:+E}'">(SV("answer is '-0.000000E+00'"), F(-0.)); + check.template operator()<"answer is '{: E}'">(SV("answer is '-0.000000E+00'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'INF'"), SV("answer is '{:E}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF'"), SV("answer is '{:-E}'"), std::numeric_limits::infinity()); - check(SV("answer is '+INF'"), SV("answer is '{:+E}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: E}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-INF'"), SV("answer is '{:E}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:-E}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:+E}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{: E}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'NAN'"), SV("answer is '{:E}'"), nan_pos); - check(SV("answer is 'NAN'"), SV("answer is '{:-E}'"), nan_pos); - check(SV("answer is '+NAN'"), SV("answer is '{:+E}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: E}'"), nan_pos); - - check(SV("answer is '-NAN'"), SV("answer is '{:E}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:-E}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:+E}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{: E}'"), nan_neg); + check.template operator()<"answer is '{:E}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-E}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+E}'">(SV("answer is '+INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: E}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:E}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-E}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+E}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: E}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:E}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:-E}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:+E}'">(SV("answer is '+NAN'"), nan_pos); + check.template operator()<"answer is '{: E}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:E}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:-E}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:+E}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{: E}'">(SV("answer is '-NAN'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0E+00'"), SV("answer is '{:.0E}'"), F(0)); - check(SV("answer is '0.E+00'"), SV("answer is '{:#.0E}'"), F(0)); + check.template operator()<"answer is '{:.0E}'">(SV("answer is '0E+00'"), F(0)); + check.template operator()<"answer is '{:#.0E}'">(SV("answer is '0.E+00'"), F(0)); - check(SV("answer is '0.000000E+00'"), SV("answer is '{:#E}'"), F(0)); - check(SV("answer is '2.500000E+00'"), SV("answer is '{:#E}'"), F(2.5)); + check.template operator()<"answer is '{:#E}'">(SV("answer is '0.000000E+00'"), F(0)); + check.template operator()<"answer is '{:#E}'">(SV("answer is '2.500000E+00'"), F(2.5)); - check(SV("answer is 'INF'"), SV("answer is '{:#E}'"), std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:#E}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#E}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#E}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); - check(SV("answer is 'NAN'"), SV("answer is '{:#E}'"), nan_pos); - check(SV("answer is '-NAN'"), SV("answer is '{:#E}'"), nan_neg); + check.template operator()<"answer is '{:#E}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:#E}'">(SV("answer is '-NAN'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '3.125000E-02'"), SV("answer is '{:07E}'"), 0.03125); - check(SV("answer is '+3.125000E-02'"), SV("answer is '{:+07E}'"), 0.03125); - check(SV("answer is '+3.125000E-02'"), SV("answer is '{:+08E}'"), 0.03125); - check(SV("answer is '+3.125000E-02'"), SV("answer is '{:+09E}'"), 0.03125); - - check(SV("answer is '003.125000E-02'"), SV("answer is '{:014E}'"), 0.03125); - check(SV("answer is '003.125000E-02'"), SV("answer is '{:-014E}'"), 0.03125); - check(SV("answer is '+03.125000E-02'"), SV("answer is '{:+014E}'"), 0.03125); - check(SV("answer is ' 03.125000E-02'"), SV("answer is '{: 014E}'"), 0.03125); - - check(SV("answer is ' INF'"), SV("answer is '{:010E}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{:-010E}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +INF'"), SV("answer is '{:+010E}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: 010E}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -INF'"), SV("answer is '{:010E}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:-010E}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:+010E}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{: 010E}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' NAN'"), SV("answer is '{:010E}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{:-010E}'"), nan_pos); - check(SV("answer is ' +NAN'"), SV("answer is '{:+010E}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: 010E}'"), nan_pos); - - check(SV("answer is ' -NAN'"), SV("answer is '{:010E}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:-010E}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:+010E}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{: 010E}'"), nan_neg); + check.template operator()<"answer is '{:07E}'">(SV("answer is '3.125000E-02'"), 0.03125); + check.template operator()<"answer is '{:+07E}'">(SV("answer is '+3.125000E-02'"), 0.03125); + check.template operator()<"answer is '{:+08E}'">(SV("answer is '+3.125000E-02'"), 0.03125); + check.template operator()<"answer is '{:+09E}'">(SV("answer is '+3.125000E-02'"), 0.03125); + + check.template operator()<"answer is '{:014E}'">(SV("answer is '003.125000E-02'"), 0.03125); + check.template operator()<"answer is '{:-014E}'">(SV("answer is '003.125000E-02'"), 0.03125); + check.template operator()<"answer is '{:+014E}'">(SV("answer is '+03.125000E-02'"), 0.03125); + check.template operator()<"answer is '{: 014E}'">(SV("answer is ' 03.125000E-02'"), 0.03125); + + check.template operator()<"answer is '{:010E}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010E}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010E}'">(SV("answer is ' +INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010E}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010E}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010E}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010E}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010E}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010E}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:-010E}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:+010E}'">(SV("answer is ' +NAN'"), nan_pos); + check.template operator()<"answer is '{: 010E}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:010E}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:-010E}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:+010E}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{: 010E}'">(SV("answer is ' -NAN'"), nan_neg); // *** precision *** - check(SV("answer is '3E-02'"), SV("answer is '{:.0E}'"), 0.03125); - check(SV("answer is '3.1E-02'"), SV("answer is '{:.1E}'"), 0.03125); - check(SV("answer is '3.125E-02'"), SV("answer is '{:.3E}'"), 0.03125); - check(SV("answer is '3.1250000000E-02'"), SV("answer is '{:.10E}'"), 0.03125); + check.template operator()<"answer is '{:.0E}'">(SV("answer is '3E-02'"), 0.03125); + check.template operator()<"answer is '{:.1E}'">(SV("answer is '3.1E-02'"), 0.03125); + check.template operator()<"answer is '{:.3E}'">(SV("answer is '3.125E-02'"), 0.03125); + check.template operator()<"answer is '{:.10E}'">(SV("answer is '3.1250000000E-02'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1615,118 +1623,118 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 0.250000'"), SV("answer is '{:11f}'"), F(0.25)); - check(SV("answer is ' 0.250000'"), SV("answer is '{:>11f}'"), F(0.25)); - check(SV("answer is '0.250000 '"), SV("answer is '{:<11f}'"), F(0.25)); - check(SV("answer is ' 0.250000 '"), SV("answer is '{:^11f}'"), F(0.25)); + check.template operator()<"answer is '{:11f}'">(SV("answer is ' 0.250000'"), F(0.25)); + check.template operator()<"answer is '{:>11f}'">(SV("answer is ' 0.250000'"), F(0.25)); + check.template operator()<"answer is '{:<11f}'">(SV("answer is '0.250000 '"), F(0.25)); + check.template operator()<"answer is '{:^11f}'">(SV("answer is ' 0.250000 '"), F(0.25)); - check(SV("answer is '---0.125000'"), SV("answer is '{:->11f}'"), F(125e-3)); - check(SV("answer is '0.125000---'"), SV("answer is '{:-<11f}'"), F(125e-3)); - check(SV("answer is '-0.125000--'"), SV("answer is '{:-^11f}'"), F(125e-3)); + check.template operator()<"answer is '{:->11f}'">(SV("answer is '---0.125000'"), F(125e-3)); + check.template operator()<"answer is '{:-<11f}'">(SV("answer is '0.125000---'"), F(125e-3)); + check.template operator()<"answer is '{:-^11f}'">(SV("answer is '-0.125000--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6f}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6f}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6f}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6f}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6f}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6f}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7f}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7f}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7f}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7f}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7f}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7f}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6f}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6f}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6f}'"), nan_pos); + check.template operator()<"answer is '{:^>6f}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6f}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6f}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7f}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7f}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7f}'"), nan_neg); + check.template operator()<"answer is '{:0>7f}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7f}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7f}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 0.250000'"), SV("answer is '{:>011f}'"), F(0.25)); - check(SV("answer is '0.250000 '"), SV("answer is '{:<011f}'"), F(0.25)); - check(SV("answer is ' 0.250000 '"), SV("answer is '{:^011f}'"), F(0.25)); + check.template operator()<"answer is '{:>011f}'">(SV("answer is ' 0.250000'"), F(0.25)); + check.template operator()<"answer is '{:<011f}'">(SV("answer is '0.250000 '"), F(0.25)); + check.template operator()<"answer is '{:^011f}'">(SV("answer is ' 0.250000 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0.000000'"), SV("answer is '{:f}'"), F(0)); - check(SV("answer is '0.000000'"), SV("answer is '{:-f}'"), F(0)); - check(SV("answer is '+0.000000'"), SV("answer is '{:+f}'"), F(0)); - check(SV("answer is ' 0.000000'"), SV("answer is '{: f}'"), F(0)); + check.template operator()<"answer is '{:f}'">(SV("answer is '0.000000'"), F(0)); + check.template operator()<"answer is '{:-f}'">(SV("answer is '0.000000'"), F(0)); + check.template operator()<"answer is '{:+f}'">(SV("answer is '+0.000000'"), F(0)); + check.template operator()<"answer is '{: f}'">(SV("answer is ' 0.000000'"), F(0)); - check(SV("answer is '-0.000000'"), SV("answer is '{:f}'"), F(-0.)); - check(SV("answer is '-0.000000'"), SV("answer is '{:-f}'"), F(-0.)); - check(SV("answer is '-0.000000'"), SV("answer is '{:+f}'"), F(-0.)); - check(SV("answer is '-0.000000'"), SV("answer is '{: f}'"), F(-0.)); + check.template operator()<"answer is '{:f}'">(SV("answer is '-0.000000'"), F(-0.)); + check.template operator()<"answer is '{:-f}'">(SV("answer is '-0.000000'"), F(-0.)); + check.template operator()<"answer is '{:+f}'">(SV("answer is '-0.000000'"), F(-0.)); + check.template operator()<"answer is '{: f}'">(SV("answer is '-0.000000'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:f}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-f}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+f}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: f}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:f}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-f}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+f}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: f}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:f}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-f}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+f}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: f}'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:f}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-f}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+f}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: f}'"), nan_neg); + check.template operator()<"answer is '{:f}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-f}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+f}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: f}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:f}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-f}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+f}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: f}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:f}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-f}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+f}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: f}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:f}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-f}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+f}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: f}'">(SV("answer is '-nan'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0'"), SV("answer is '{:.0f}'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#.0f}'"), F(0)); + check.template operator()<"answer is '{:.0f}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:#.0f}'">(SV("answer is '0.'"), F(0)); - check(SV("answer is '0.000000'"), SV("answer is '{:#f}'"), F(0)); - check(SV("answer is '2.500000'"), SV("answer is '{:#f}'"), F(2.5)); + check.template operator()<"answer is '{:#f}'">(SV("answer is '0.000000'"), F(0)); + check.template operator()<"answer is '{:#f}'">(SV("answer is '2.500000'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#f}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#f}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#f}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#f}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#f}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#f}'"), nan_neg); + check.template operator()<"answer is '{:#f}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#f}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '0.031250'"), SV("answer is '{:07f}'"), 0.03125); - check(SV("answer is '+0.031250'"), SV("answer is '{:+07f}'"), 0.03125); - check(SV("answer is '+0.031250'"), SV("answer is '{:+08f}'"), 0.03125); - check(SV("answer is '+0.031250'"), SV("answer is '{:+09f}'"), 0.03125); - - check(SV("answer is '000.031250'"), SV("answer is '{:010f}'"), 0.03125); - check(SV("answer is '000.031250'"), SV("answer is '{:-010f}'"), 0.03125); - check(SV("answer is '+00.031250'"), SV("answer is '{:+010f}'"), 0.03125); - check(SV("answer is ' 00.031250'"), SV("answer is '{: 010f}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010f}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010f}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010f}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010f}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010f}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010f}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010f}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010f}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010f}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010f}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010f}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010f}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010f}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010f}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010f}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010f}'"), nan_neg); + check.template operator()<"answer is '{:07f}'">(SV("answer is '0.031250'"), 0.03125); + check.template operator()<"answer is '{:+07f}'">(SV("answer is '+0.031250'"), 0.03125); + check.template operator()<"answer is '{:+08f}'">(SV("answer is '+0.031250'"), 0.03125); + check.template operator()<"answer is '{:+09f}'">(SV("answer is '+0.031250'"), 0.03125); + + check.template operator()<"answer is '{:010f}'">(SV("answer is '000.031250'"), 0.03125); + check.template operator()<"answer is '{:-010f}'">(SV("answer is '000.031250'"), 0.03125); + check.template operator()<"answer is '{:+010f}'">(SV("answer is '+00.031250'"), 0.03125); + check.template operator()<"answer is '{: 010f}'">(SV("answer is ' 00.031250'"), 0.03125); + + check.template operator()<"answer is '{:010f}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010f}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010f}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010f}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010f}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010f}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010f}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010f}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010f}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010f}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010f}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010f}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010f}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010f}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010f}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010f}'">(SV("answer is ' -nan'"), nan_neg); // *** precision *** - check(SV("answer is '0'"), SV("answer is '{:.0f}'"), 0.03125); - check(SV("answer is '0.0'"), SV("answer is '{:.1f}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.5f}'"), 0.03125); - check(SV("answer is '0.0312500000'"), SV("answer is '{:.10f}'"), 0.03125); + check.template operator()<"answer is '{:.0f}'">(SV("answer is '0'"), 0.03125); + check.template operator()<"answer is '{:.1f}'">(SV("answer is '0.0'"), 0.03125); + check.template operator()<"answer is '{:.5f}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.10f}'">(SV("answer is '0.0312500000'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1738,118 +1746,118 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 0.250000'"), SV("answer is '{:11F}'"), F(0.25)); - check(SV("answer is ' 0.250000'"), SV("answer is '{:>11F}'"), F(0.25)); - check(SV("answer is '0.250000 '"), SV("answer is '{:<11F}'"), F(0.25)); - check(SV("answer is ' 0.250000 '"), SV("answer is '{:^11F}'"), F(0.25)); + check.template operator()<"answer is '{:11F}'">(SV("answer is ' 0.250000'"), F(0.25)); + check.template operator()<"answer is '{:>11F}'">(SV("answer is ' 0.250000'"), F(0.25)); + check.template operator()<"answer is '{:<11F}'">(SV("answer is '0.250000 '"), F(0.25)); + check.template operator()<"answer is '{:^11F}'">(SV("answer is ' 0.250000 '"), F(0.25)); - check(SV("answer is '---0.125000'"), SV("answer is '{:->11F}'"), F(125e-3)); - check(SV("answer is '0.125000---'"), SV("answer is '{:-<11F}'"), F(125e-3)); - check(SV("answer is '-0.125000--'"), SV("answer is '{:-^11F}'"), F(125e-3)); + check.template operator()<"answer is '{:->11F}'">(SV("answer is '---0.125000'"), F(125e-3)); + check.template operator()<"answer is '{:-<11F}'">(SV("answer is '0.125000---'"), F(125e-3)); + check.template operator()<"answer is '{:-^11F}'">(SV("answer is '-0.125000--'"), F(125e-3)); - check(SV("answer is '***INF'"), SV("answer is '{:*>6F}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF***'"), SV("answer is '{:*<6F}'"), std::numeric_limits::infinity()); - check(SV("answer is '*INF**'"), SV("answer is '{:*^6F}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6F}'">(SV("answer is '***INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6F}'">(SV("answer is 'INF***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6F}'">(SV("answer is '*INF**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-INF'"), SV("answer is '{:#>7F}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF###'"), SV("answer is '{:#<7F}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-INF##'"), SV("answer is '{:#^7F}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7F}'">(SV("answer is '###-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7F}'">(SV("answer is '-INF###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7F}'">(SV("answer is '#-INF##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^NAN'"), SV("answer is '{:^>6F}'"), nan_pos); - check(SV("answer is 'NAN^^^'"), SV("answer is '{:^<6F}'"), nan_pos); - check(SV("answer is '^NAN^^'"), SV("answer is '{:^^6F}'"), nan_pos); + check.template operator()<"answer is '{:^>6F}'">(SV("answer is '^^^NAN'"), nan_pos); + check.template operator()<"answer is '{:^<6F}'">(SV("answer is 'NAN^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6F}'">(SV("answer is '^NAN^^'"), nan_pos); - check(SV("answer is '000-NAN'"), SV("answer is '{:0>7F}'"), nan_neg); - check(SV("answer is '-NAN000'"), SV("answer is '{:0<7F}'"), nan_neg); - check(SV("answer is '0-NAN00'"), SV("answer is '{:0^7F}'"), nan_neg); + check.template operator()<"answer is '{:0>7F}'">(SV("answer is '000-NAN'"), nan_neg); + check.template operator()<"answer is '{:0<7F}'">(SV("answer is '-NAN000'"), nan_neg); + check.template operator()<"answer is '{:0^7F}'">(SV("answer is '0-NAN00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 0.250000'"), SV("answer is '{:>011F}'"), F(0.25)); - check(SV("answer is '0.250000 '"), SV("answer is '{:<011F}'"), F(0.25)); - check(SV("answer is ' 0.250000 '"), SV("answer is '{:^011F}'"), F(0.25)); + check.template operator()<"answer is '{:>011F}'">(SV("answer is ' 0.250000'"), F(0.25)); + check.template operator()<"answer is '{:<011F}'">(SV("answer is '0.250000 '"), F(0.25)); + check.template operator()<"answer is '{:^011F}'">(SV("answer is ' 0.250000 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0.000000'"), SV("answer is '{:F}'"), F(0)); - check(SV("answer is '0.000000'"), SV("answer is '{:-F}'"), F(0)); - check(SV("answer is '+0.000000'"), SV("answer is '{:+F}'"), F(0)); - check(SV("answer is ' 0.000000'"), SV("answer is '{: F}'"), F(0)); + check.template operator()<"answer is '{:F}'">(SV("answer is '0.000000'"), F(0)); + check.template operator()<"answer is '{:-F}'">(SV("answer is '0.000000'"), F(0)); + check.template operator()<"answer is '{:+F}'">(SV("answer is '+0.000000'"), F(0)); + check.template operator()<"answer is '{: F}'">(SV("answer is ' 0.000000'"), F(0)); - check(SV("answer is '-0.000000'"), SV("answer is '{:F}'"), F(-0.)); - check(SV("answer is '-0.000000'"), SV("answer is '{:-F}'"), F(-0.)); - check(SV("answer is '-0.000000'"), SV("answer is '{:+F}'"), F(-0.)); - check(SV("answer is '-0.000000'"), SV("answer is '{: F}'"), F(-0.)); + check.template operator()<"answer is '{:F}'">(SV("answer is '-0.000000'"), F(-0.)); + check.template operator()<"answer is '{:-F}'">(SV("answer is '-0.000000'"), F(-0.)); + check.template operator()<"answer is '{:+F}'">(SV("answer is '-0.000000'"), F(-0.)); + check.template operator()<"answer is '{: F}'">(SV("answer is '-0.000000'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'INF'"), SV("answer is '{:F}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF'"), SV("answer is '{:-F}'"), std::numeric_limits::infinity()); - check(SV("answer is '+INF'"), SV("answer is '{:+F}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: F}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-INF'"), SV("answer is '{:F}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:-F}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:+F}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{: F}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'NAN'"), SV("answer is '{:F}'"), nan_pos); - check(SV("answer is 'NAN'"), SV("answer is '{:-F}'"), nan_pos); - check(SV("answer is '+NAN'"), SV("answer is '{:+F}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: F}'"), nan_pos); - - check(SV("answer is '-NAN'"), SV("answer is '{:F}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:-F}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:+F}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{: F}'"), nan_neg); + check.template operator()<"answer is '{:F}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-F}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+F}'">(SV("answer is '+INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: F}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:F}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-F}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+F}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: F}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:F}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:-F}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:+F}'">(SV("answer is '+NAN'"), nan_pos); + check.template operator()<"answer is '{: F}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:F}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:-F}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:+F}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{: F}'">(SV("answer is '-NAN'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0'"), SV("answer is '{:.0F}'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#.0F}'"), F(0)); + check.template operator()<"answer is '{:.0F}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:#.0F}'">(SV("answer is '0.'"), F(0)); - check(SV("answer is '0.000000'"), SV("answer is '{:#F}'"), F(0)); - check(SV("answer is '2.500000'"), SV("answer is '{:#F}'"), F(2.5)); + check.template operator()<"answer is '{:#F}'">(SV("answer is '0.000000'"), F(0)); + check.template operator()<"answer is '{:#F}'">(SV("answer is '2.500000'"), F(2.5)); - check(SV("answer is 'INF'"), SV("answer is '{:#F}'"), std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:#F}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#F}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#F}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); - check(SV("answer is 'NAN'"), SV("answer is '{:#F}'"), nan_pos); - check(SV("answer is '-NAN'"), SV("answer is '{:#F}'"), nan_neg); + check.template operator()<"answer is '{:#F}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:#F}'">(SV("answer is '-NAN'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '0.031250'"), SV("answer is '{:07F}'"), 0.03125); - check(SV("answer is '+0.031250'"), SV("answer is '{:+07F}'"), 0.03125); - check(SV("answer is '+0.031250'"), SV("answer is '{:+08F}'"), 0.03125); - check(SV("answer is '+0.031250'"), SV("answer is '{:+09F}'"), 0.03125); - - check(SV("answer is '000.031250'"), SV("answer is '{:010F}'"), 0.03125); - check(SV("answer is '000.031250'"), SV("answer is '{:-010F}'"), 0.03125); - check(SV("answer is '+00.031250'"), SV("answer is '{:+010F}'"), 0.03125); - check(SV("answer is ' 00.031250'"), SV("answer is '{: 010F}'"), 0.03125); - - check(SV("answer is ' INF'"), SV("answer is '{:010F}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{:-010F}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +INF'"), SV("answer is '{:+010F}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: 010F}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -INF'"), SV("answer is '{:010F}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:-010F}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:+010F}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{: 010F}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' NAN'"), SV("answer is '{:010F}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{:-010F}'"), nan_pos); - check(SV("answer is ' +NAN'"), SV("answer is '{:+010F}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: 010F}'"), nan_pos); - - check(SV("answer is ' -NAN'"), SV("answer is '{:010F}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:-010F}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:+010F}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{: 010F}'"), nan_neg); + check.template operator()<"answer is '{:07F}'">(SV("answer is '0.031250'"), 0.03125); + check.template operator()<"answer is '{:+07F}'">(SV("answer is '+0.031250'"), 0.03125); + check.template operator()<"answer is '{:+08F}'">(SV("answer is '+0.031250'"), 0.03125); + check.template operator()<"answer is '{:+09F}'">(SV("answer is '+0.031250'"), 0.03125); + + check.template operator()<"answer is '{:010F}'">(SV("answer is '000.031250'"), 0.03125); + check.template operator()<"answer is '{:-010F}'">(SV("answer is '000.031250'"), 0.03125); + check.template operator()<"answer is '{:+010F}'">(SV("answer is '+00.031250'"), 0.03125); + check.template operator()<"answer is '{: 010F}'">(SV("answer is ' 00.031250'"), 0.03125); + + check.template operator()<"answer is '{:010F}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010F}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010F}'">(SV("answer is ' +INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010F}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010F}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010F}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010F}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010F}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010F}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:-010F}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:+010F}'">(SV("answer is ' +NAN'"), nan_pos); + check.template operator()<"answer is '{: 010F}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:010F}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:-010F}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:+010F}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{: 010F}'">(SV("answer is ' -NAN'"), nan_neg); // *** precision *** - check(SV("answer is '0'"), SV("answer is '{:.0F}'"), 0.03125); - check(SV("answer is '0.0'"), SV("answer is '{:.1F}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.5F}'"), 0.03125); - check(SV("answer is '0.0312500000'"), SV("answer is '{:.10F}'"), 0.03125); + check.template operator()<"answer is '{:.0F}'">(SV("answer is '0'"), 0.03125); + check.template operator()<"answer is '{:.1F}'">(SV("answer is '0.0'"), 0.03125); + check.template operator()<"answer is '{:.5F}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.10F}'">(SV("answer is '0.0312500000'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1861,121 +1869,121 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 0.25'"), SV("answer is '{:7g}'"), F(0.25)); - check(SV("answer is ' 0.25'"), SV("answer is '{:>7g}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<7g}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^7g}'"), F(0.25)); + check.template operator()<"answer is '{:7g}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:>7g}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<7g}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^7g}'">(SV("answer is ' 0.25 '"), F(0.25)); - check(SV("answer is '---0.125'"), SV("answer is '{:->8g}'"), F(125e-3)); - check(SV("answer is '0.125---'"), SV("answer is '{:-<8g}'"), F(125e-3)); - check(SV("answer is '-0.125--'"), SV("answer is '{:-^8g}'"), F(125e-3)); + check.template operator()<"answer is '{:->8g}'">(SV("answer is '---0.125'"), F(125e-3)); + check.template operator()<"answer is '{:-<8g}'">(SV("answer is '0.125---'"), F(125e-3)); + check.template operator()<"answer is '{:-^8g}'">(SV("answer is '-0.125--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6g}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6g}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6g}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6g}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6g}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6g}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7g}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7g}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7g}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7g}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7g}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7g}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6g}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6g}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6g}'"), nan_pos); + check.template operator()<"answer is '{:^>6g}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6g}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6g}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7g}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7g}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7g}'"), nan_neg); + check.template operator()<"answer is '{:0>7g}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7g}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7g}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 0.25'"), SV("answer is '{:>07g}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<07g}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^07g}'"), F(0.25)); + check.template operator()<"answer is '{:>07g}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<07g}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^07g}'">(SV("answer is ' 0.25 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0'"), SV("answer is '{:g}'"), F(0)); - check(SV("answer is '0'"), SV("answer is '{:-g}'"), F(0)); - check(SV("answer is '+0'"), SV("answer is '{:+g}'"), F(0)); - check(SV("answer is ' 0'"), SV("answer is '{: g}'"), F(0)); + check.template operator()<"answer is '{:g}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:-g}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:+g}'">(SV("answer is '+0'"), F(0)); + check.template operator()<"answer is '{: g}'">(SV("answer is ' 0'"), F(0)); - check(SV("answer is '-0'"), SV("answer is '{:g}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:-g}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:+g}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{: g}'"), F(-0.)); + check.template operator()<"answer is '{:g}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:-g}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:+g}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{: g}'">(SV("answer is '-0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:g}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-g}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+g}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: g}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:g}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-g}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+g}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: g}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:g}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-g}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+g}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: g}'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:g}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-g}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+g}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: g}'"), nan_neg); + check.template operator()<"answer is '{:g}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-g}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+g}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: g}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:g}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-g}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+g}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: g}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:g}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-g}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+g}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: g}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:g}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-g}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+g}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: g}'">(SV("answer is '-nan'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0'"), SV("answer is '{:.0g}'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#.0g}'"), F(0)); + check.template operator()<"answer is '{:.0g}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:#.0g}'">(SV("answer is '0.'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#g}'"), F(0)); - check(SV("answer is '2.5'"), SV("answer is '{:#g}'"), F(2.5)); + check.template operator()<"answer is '{:#g}'">(SV("answer is '0.'"), F(0)); + check.template operator()<"answer is '{:#g}'">(SV("answer is '2.5'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#g}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#g}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#g}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#g}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#g}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#g}'"), nan_neg); + check.template operator()<"answer is '{:#g}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#g}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '0.03125'"), SV("answer is '{:06g}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+06g}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+07g}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+08g}'"), 0.03125); - - check(SV("answer is '000.03125'"), SV("answer is '{:09g}'"), 0.03125); - check(SV("answer is '000.03125'"), SV("answer is '{:-09g}'"), 0.03125); - check(SV("answer is '+00.03125'"), SV("answer is '{:+09g}'"), 0.03125); - check(SV("answer is ' 00.03125'"), SV("answer is '{: 09g}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010g}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010g}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010g}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010g}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010g}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010g}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010g}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010g}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010g}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010g}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010g}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010g}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010g}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010g}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010g}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010g}'"), nan_neg); + check.template operator()<"answer is '{:06g}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:+06g}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+07g}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+08g}'">(SV("answer is '+0.03125'"), 0.03125); + + check.template operator()<"answer is '{:09g}'">(SV("answer is '000.03125'"), 0.03125); + check.template operator()<"answer is '{:-09g}'">(SV("answer is '000.03125'"), 0.03125); + check.template operator()<"answer is '{:+09g}'">(SV("answer is '+00.03125'"), 0.03125); + check.template operator()<"answer is '{: 09g}'">(SV("answer is ' 00.03125'"), 0.03125); + + check.template operator()<"answer is '{:010g}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010g}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010g}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010g}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010g}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010g}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010g}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010g}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010g}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010g}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010g}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010g}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010g}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010g}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010g}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010g}'">(SV("answer is ' -nan'"), nan_neg); // *** precision *** - check(SV("answer is '0.03'"), SV("answer is '{:.0g}'"), 0.03125); - check(SV("answer is '0.03'"), SV("answer is '{:.1g}'"), 0.03125); - check(SV("answer is '0.031'"), SV("answer is '{:.2g}'"), 0.03125); - check(SV("answer is '0.0312'"), SV("answer is '{:.3g}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.4g}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.5g}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.10g}'"), 0.03125); + check.template operator()<"answer is '{:.0g}'">(SV("answer is '0.03'"), 0.03125); + check.template operator()<"answer is '{:.1g}'">(SV("answer is '0.03'"), 0.03125); + check.template operator()<"answer is '{:.2g}'">(SV("answer is '0.031'"), 0.03125); + check.template operator()<"answer is '{:.3g}'">(SV("answer is '0.0312'"), 0.03125); + check.template operator()<"answer is '{:.4g}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.5g}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.10g}'">(SV("answer is '0.03125'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -1987,121 +1995,121 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 0.25'"), SV("answer is '{:7G}'"), F(0.25)); - check(SV("answer is ' 0.25'"), SV("answer is '{:>7G}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<7G}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^7G}'"), F(0.25)); + check.template operator()<"answer is '{:7G}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:>7G}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<7G}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^7G}'">(SV("answer is ' 0.25 '"), F(0.25)); - check(SV("answer is '---0.125'"), SV("answer is '{:->8G}'"), F(125e-3)); - check(SV("answer is '0.125---'"), SV("answer is '{:-<8G}'"), F(125e-3)); - check(SV("answer is '-0.125--'"), SV("answer is '{:-^8G}'"), F(125e-3)); + check.template operator()<"answer is '{:->8G}'">(SV("answer is '---0.125'"), F(125e-3)); + check.template operator()<"answer is '{:-<8G}'">(SV("answer is '0.125---'"), F(125e-3)); + check.template operator()<"answer is '{:-^8G}'">(SV("answer is '-0.125--'"), F(125e-3)); - check(SV("answer is '***INF'"), SV("answer is '{:*>6G}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF***'"), SV("answer is '{:*<6G}'"), std::numeric_limits::infinity()); - check(SV("answer is '*INF**'"), SV("answer is '{:*^6G}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6G}'">(SV("answer is '***INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6G}'">(SV("answer is 'INF***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6G}'">(SV("answer is '*INF**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-INF'"), SV("answer is '{:#>7G}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF###'"), SV("answer is '{:#<7G}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-INF##'"), SV("answer is '{:#^7G}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7G}'">(SV("answer is '###-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7G}'">(SV("answer is '-INF###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7G}'">(SV("answer is '#-INF##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^NAN'"), SV("answer is '{:^>6G}'"), nan_pos); - check(SV("answer is 'NAN^^^'"), SV("answer is '{:^<6G}'"), nan_pos); - check(SV("answer is '^NAN^^'"), SV("answer is '{:^^6G}'"), nan_pos); + check.template operator()<"answer is '{:^>6G}'">(SV("answer is '^^^NAN'"), nan_pos); + check.template operator()<"answer is '{:^<6G}'">(SV("answer is 'NAN^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6G}'">(SV("answer is '^NAN^^'"), nan_pos); - check(SV("answer is '000-NAN'"), SV("answer is '{:0>7G}'"), nan_neg); - check(SV("answer is '-NAN000'"), SV("answer is '{:0<7G}'"), nan_neg); - check(SV("answer is '0-NAN00'"), SV("answer is '{:0^7G}'"), nan_neg); + check.template operator()<"answer is '{:0>7G}'">(SV("answer is '000-NAN'"), nan_neg); + check.template operator()<"answer is '{:0<7G}'">(SV("answer is '-NAN000'"), nan_neg); + check.template operator()<"answer is '{:0^7G}'">(SV("answer is '0-NAN00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 0.25'"), SV("answer is '{:>07G}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<07G}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^07G}'"), F(0.25)); + check.template operator()<"answer is '{:>07G}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<07G}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^07G}'">(SV("answer is ' 0.25 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0'"), SV("answer is '{:G}'"), F(0)); - check(SV("answer is '0'"), SV("answer is '{:-G}'"), F(0)); - check(SV("answer is '+0'"), SV("answer is '{:+G}'"), F(0)); - check(SV("answer is ' 0'"), SV("answer is '{: G}'"), F(0)); + check.template operator()<"answer is '{:G}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:-G}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:+G}'">(SV("answer is '+0'"), F(0)); + check.template operator()<"answer is '{: G}'">(SV("answer is ' 0'"), F(0)); - check(SV("answer is '-0'"), SV("answer is '{:G}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:-G}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:+G}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{: G}'"), F(-0.)); + check.template operator()<"answer is '{:G}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:-G}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:+G}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{: G}'">(SV("answer is '-0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'INF'"), SV("answer is '{:G}'"), std::numeric_limits::infinity()); - check(SV("answer is 'INF'"), SV("answer is '{:-G}'"), std::numeric_limits::infinity()); - check(SV("answer is '+INF'"), SV("answer is '{:+G}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: G}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-INF'"), SV("answer is '{:G}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:-G}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:+G}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{: G}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'NAN'"), SV("answer is '{:G}'"), nan_pos); - check(SV("answer is 'NAN'"), SV("answer is '{:-G}'"), nan_pos); - check(SV("answer is '+NAN'"), SV("answer is '{:+G}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: G}'"), nan_pos); - - check(SV("answer is '-NAN'"), SV("answer is '{:G}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:-G}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{:+G}'"), nan_neg); - check(SV("answer is '-NAN'"), SV("answer is '{: G}'"), nan_neg); + check.template operator()<"answer is '{:G}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-G}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+G}'">(SV("answer is '+INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: G}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:G}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-G}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+G}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: G}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:G}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:-G}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:+G}'">(SV("answer is '+NAN'"), nan_pos); + check.template operator()<"answer is '{: G}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:G}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:-G}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{:+G}'">(SV("answer is '-NAN'"), nan_neg); + check.template operator()<"answer is '{: G}'">(SV("answer is '-NAN'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0'"), SV("answer is '{:.0G}'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#.0G}'"), F(0)); + check.template operator()<"answer is '{:.0G}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:#.0G}'">(SV("answer is '0.'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#G}'"), F(0)); - check(SV("answer is '2.5'"), SV("answer is '{:#G}'"), F(2.5)); + check.template operator()<"answer is '{:#G}'">(SV("answer is '0.'"), F(0)); + check.template operator()<"answer is '{:#G}'">(SV("answer is '2.5'"), F(2.5)); - check(SV("answer is 'INF'"), SV("answer is '{:#G}'"), std::numeric_limits::infinity()); - check(SV("answer is '-INF'"), SV("answer is '{:#G}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#G}'">(SV("answer is 'INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#G}'">(SV("answer is '-INF'"), -std::numeric_limits::infinity()); - check(SV("answer is 'NAN'"), SV("answer is '{:#G}'"), nan_pos); - check(SV("answer is '-NAN'"), SV("answer is '{:#G}'"), nan_neg); + check.template operator()<"answer is '{:#G}'">(SV("answer is 'NAN'"), nan_pos); + check.template operator()<"answer is '{:#G}'">(SV("answer is '-NAN'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '0.03125'"), SV("answer is '{:06G}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+06G}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+07G}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+08G}'"), 0.03125); - - check(SV("answer is '000.03125'"), SV("answer is '{:09G}'"), 0.03125); - check(SV("answer is '000.03125'"), SV("answer is '{:-09G}'"), 0.03125); - check(SV("answer is '+00.03125'"), SV("answer is '{:+09G}'"), 0.03125); - check(SV("answer is ' 00.03125'"), SV("answer is '{: 09G}'"), 0.03125); - - check(SV("answer is ' INF'"), SV("answer is '{:010G}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{:-010G}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +INF'"), SV("answer is '{:+010G}'"), std::numeric_limits::infinity()); - check(SV("answer is ' INF'"), SV("answer is '{: 010G}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -INF'"), SV("answer is '{:010G}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:-010G}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{:+010G}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -INF'"), SV("answer is '{: 010G}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' NAN'"), SV("answer is '{:010G}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{:-010G}'"), nan_pos); - check(SV("answer is ' +NAN'"), SV("answer is '{:+010G}'"), nan_pos); - check(SV("answer is ' NAN'"), SV("answer is '{: 010G}'"), nan_pos); - - check(SV("answer is ' -NAN'"), SV("answer is '{:010G}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:-010G}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{:+010G}'"), nan_neg); - check(SV("answer is ' -NAN'"), SV("answer is '{: 010G}'"), nan_neg); + check.template operator()<"answer is '{:06G}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:+06G}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+07G}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+08G}'">(SV("answer is '+0.03125'"), 0.03125); + + check.template operator()<"answer is '{:09G}'">(SV("answer is '000.03125'"), 0.03125); + check.template operator()<"answer is '{:-09G}'">(SV("answer is '000.03125'"), 0.03125); + check.template operator()<"answer is '{:+09G}'">(SV("answer is '+00.03125'"), 0.03125); + check.template operator()<"answer is '{: 09G}'">(SV("answer is ' 00.03125'"), 0.03125); + + check.template operator()<"answer is '{:010G}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010G}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010G}'">(SV("answer is ' +INF'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010G}'">(SV("answer is ' INF'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010G}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010G}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010G}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010G}'">(SV("answer is ' -INF'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010G}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:-010G}'">(SV("answer is ' NAN'"), nan_pos); + check.template operator()<"answer is '{:+010G}'">(SV("answer is ' +NAN'"), nan_pos); + check.template operator()<"answer is '{: 010G}'">(SV("answer is ' NAN'"), nan_pos); + + check.template operator()<"answer is '{:010G}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:-010G}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{:+010G}'">(SV("answer is ' -NAN'"), nan_neg); + check.template operator()<"answer is '{: 010G}'">(SV("answer is ' -NAN'"), nan_neg); // *** precision *** - check(SV("answer is '0.03'"), SV("answer is '{:.0G}'"), 0.03125); - check(SV("answer is '0.03'"), SV("answer is '{:.1G}'"), 0.03125); - check(SV("answer is '0.031'"), SV("answer is '{:.2G}'"), 0.03125); - check(SV("answer is '0.0312'"), SV("answer is '{:.3G}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.4G}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.5G}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.10G}'"), 0.03125); + check.template operator()<"answer is '{:.0G}'">(SV("answer is '0.03'"), 0.03125); + check.template operator()<"answer is '{:.1G}'">(SV("answer is '0.03'"), 0.03125); + check.template operator()<"answer is '{:.2G}'">(SV("answer is '0.031'"), 0.03125); + check.template operator()<"answer is '{:.3G}'">(SV("answer is '0.0312'"), 0.03125); + check.template operator()<"answer is '{:.4G}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.5G}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.10G}'">(SV("answer is '0.03125'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -2113,108 +2121,108 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 0.25'"), SV("answer is '{:7}'"), F(0.25)); - check(SV("answer is ' 0.25'"), SV("answer is '{:>7}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<7}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^7}'"), F(0.25)); + check.template operator()<"answer is '{:7}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:>7}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<7}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^7}'">(SV("answer is ' 0.25 '"), F(0.25)); - check(SV("answer is '---0.125'"), SV("answer is '{:->8}'"), F(125e-3)); - check(SV("answer is '0.125---'"), SV("answer is '{:-<8}'"), F(125e-3)); - check(SV("answer is '-0.125--'"), SV("answer is '{:-^8}'"), F(125e-3)); + check.template operator()<"answer is '{:->8}'">(SV("answer is '---0.125'"), F(125e-3)); + check.template operator()<"answer is '{:-<8}'">(SV("answer is '0.125---'"), F(125e-3)); + check.template operator()<"answer is '{:-^8}'">(SV("answer is '-0.125--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6}'"), nan_pos); + check.template operator()<"answer is '{:^>6}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7}'"), nan_neg); + check.template operator()<"answer is '{:0>7}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 0.25'"), SV("answer is '{:>07}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<07}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^07}'"), F(0.25)); + check.template operator()<"answer is '{:>07}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<07}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^07}'">(SV("answer is ' 0.25 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0'"), SV("answer is '{:}'"), F(0)); - check(SV("answer is '0'"), SV("answer is '{:-}'"), F(0)); - check(SV("answer is '+0'"), SV("answer is '{:+}'"), F(0)); - check(SV("answer is ' 0'"), SV("answer is '{: }'"), F(0)); + check.template operator()<"answer is '{:}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:-}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:+}'">(SV("answer is '+0'"), F(0)); + check.template operator()<"answer is '{: }'">(SV("answer is ' 0'"), F(0)); - check(SV("answer is '-0'"), SV("answer is '{:}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:-}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:+}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{: }'"), F(-0.)); + check.template operator()<"answer is '{:}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:-}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:+}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{: }'">(SV("answer is '-0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: }'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: }'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: }'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: }'"), nan_neg); + check.template operator()<"answer is '{:}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: }'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: }'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: }'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: }'">(SV("answer is '-nan'"), nan_neg); // *** alternate form *** - check(SV("answer is '0.'"), SV("answer is '{:#}'"), F(0)); - check(SV("answer is '2.5'"), SV("answer is '{:#}'"), F(2.5)); + check.template operator()<"answer is '{:#}'">(SV("answer is '0.'"), F(0)); + check.template operator()<"answer is '{:#}'">(SV("answer is '2.5'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#}'"), nan_neg); + check.template operator()<"answer is '{:#}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '0.03125'"), SV("answer is '{:07}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+07}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+08}'"), 0.03125); - check(SV("answer is '+00.03125'"), SV("answer is '{:+09}'"), 0.03125); - - check(SV("answer is '0000.03125'"), SV("answer is '{:010}'"), 0.03125); - check(SV("answer is '0000.03125'"), SV("answer is '{:-010}'"), 0.03125); - check(SV("answer is '+000.03125'"), SV("answer is '{:+010}'"), 0.03125); - check(SV("answer is ' 000.03125'"), SV("answer is '{: 010}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010}'"), nan_neg); + check.template operator()<"answer is '{:07}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:+07}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+08}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+09}'">(SV("answer is '+00.03125'"), 0.03125); + + check.template operator()<"answer is '{:010}'">(SV("answer is '0000.03125'"), 0.03125); + check.template operator()<"answer is '{:-010}'">(SV("answer is '0000.03125'"), 0.03125); + check.template operator()<"answer is '{:+010}'">(SV("answer is '+000.03125'"), 0.03125); + check.template operator()<"answer is '{: 010}'">(SV("answer is ' 000.03125'"), 0.03125); + + check.template operator()<"answer is '{:010}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010}'">(SV("answer is ' -nan'"), nan_neg); // *** precision *** // See format_test_floating_point_default_precision @@ -2230,121 +2238,121 @@ auto nan_neg = std::copysign(nan_pos, -1.0); // "-nan" // *** align-fill & width *** - check(SV("answer is ' 0.25'"), SV("answer is '{:7.6}'"), F(0.25)); - check(SV("answer is ' 0.25'"), SV("answer is '{:>7.6}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<7.6}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^7.6}'"), F(0.25)); + check.template operator()<"answer is '{:7.6}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:>7.6}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<7.6}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^7.6}'">(SV("answer is ' 0.25 '"), F(0.25)); - check(SV("answer is '---0.125'"), SV("answer is '{:->8.6}'"), F(125e-3)); - check(SV("answer is '0.125---'"), SV("answer is '{:-<8.6}'"), F(125e-3)); - check(SV("answer is '-0.125--'"), SV("answer is '{:-^8.6}'"), F(125e-3)); + check.template operator()<"answer is '{:->8.6}'">(SV("answer is '---0.125'"), F(125e-3)); + check.template operator()<"answer is '{:-<8.6}'">(SV("answer is '0.125---'"), F(125e-3)); + check.template operator()<"answer is '{:-^8.6}'">(SV("answer is '-0.125--'"), F(125e-3)); - check(SV("answer is '***inf'"), SV("answer is '{:*>6.6}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf***'"), SV("answer is '{:*<6.6}'"), std::numeric_limits::infinity()); - check(SV("answer is '*inf**'"), SV("answer is '{:*^6.6}'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*>6.6}'">(SV("answer is '***inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*<6.6}'">(SV("answer is 'inf***'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:*^6.6}'">(SV("answer is '*inf**'"), std::numeric_limits::infinity()); - check(SV("answer is '###-inf'"), SV("answer is '{:#>7.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf###'"), SV("answer is '{:#<7.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is '#-inf##'"), SV("answer is '{:#^7.6}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#>7.6}'">(SV("answer is '###-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#<7.6}'">(SV("answer is '-inf###'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#^7.6}'">(SV("answer is '#-inf##'"), -std::numeric_limits::infinity()); - check(SV("answer is '^^^nan'"), SV("answer is '{:^>6.6}'"), nan_pos); - check(SV("answer is 'nan^^^'"), SV("answer is '{:^<6.6}'"), nan_pos); - check(SV("answer is '^nan^^'"), SV("answer is '{:^^6.6}'"), nan_pos); + check.template operator()<"answer is '{:^>6.6}'">(SV("answer is '^^^nan'"), nan_pos); + check.template operator()<"answer is '{:^<6.6}'">(SV("answer is 'nan^^^'"), nan_pos); + check.template operator()<"answer is '{:^^6.6}'">(SV("answer is '^nan^^'"), nan_pos); - check(SV("answer is '000-nan'"), SV("answer is '{:0>7.6}'"), nan_neg); - check(SV("answer is '-nan000'"), SV("answer is '{:0<7.6}'"), nan_neg); - check(SV("answer is '0-nan00'"), SV("answer is '{:0^7.6}'"), nan_neg); + check.template operator()<"answer is '{:0>7.6}'">(SV("answer is '000-nan'"), nan_neg); + check.template operator()<"answer is '{:0<7.6}'">(SV("answer is '-nan000'"), nan_neg); + check.template operator()<"answer is '{:0^7.6}'">(SV("answer is '0-nan00'"), nan_neg); // Test whether zero padding is ignored - check(SV("answer is ' 0.25'"), SV("answer is '{:>07.6}'"), F(0.25)); - check(SV("answer is '0.25 '"), SV("answer is '{:<07.6}'"), F(0.25)); - check(SV("answer is ' 0.25 '"), SV("answer is '{:^07.6}'"), F(0.25)); + check.template operator()<"answer is '{:>07.6}'">(SV("answer is ' 0.25'"), F(0.25)); + check.template operator()<"answer is '{:<07.6}'">(SV("answer is '0.25 '"), F(0.25)); + check.template operator()<"answer is '{:^07.6}'">(SV("answer is ' 0.25 '"), F(0.25)); // *** Sign *** - check(SV("answer is '0'"), SV("answer is '{:.6}'"), F(0)); - check(SV("answer is '0'"), SV("answer is '{:-.6}'"), F(0)); - check(SV("answer is '+0'"), SV("answer is '{:+.6}'"), F(0)); - check(SV("answer is ' 0'"), SV("answer is '{: .6}'"), F(0)); + check.template operator()<"answer is '{:.6}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:-.6}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:+.6}'">(SV("answer is '+0'"), F(0)); + check.template operator()<"answer is '{: .6}'">(SV("answer is ' 0'"), F(0)); - check(SV("answer is '-0'"), SV("answer is '{:.6}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:-.6}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{:+.6}'"), F(-0.)); - check(SV("answer is '-0'"), SV("answer is '{: .6}'"), F(-0.)); + check.template operator()<"answer is '{:.6}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:-.6}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{:+.6}'">(SV("answer is '-0'"), F(-0.)); + check.template operator()<"answer is '{: .6}'">(SV("answer is '-0'"), F(-0.)); // [format.string.std]/5 The sign option applies to floating-point infinity and NaN. - check(SV("answer is 'inf'"), SV("answer is '{:.6}'"), std::numeric_limits::infinity()); - check(SV("answer is 'inf'"), SV("answer is '{:-.6}'"), std::numeric_limits::infinity()); - check(SV("answer is '+inf'"), SV("answer is '{:+.6}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: .6}'"), std::numeric_limits::infinity()); - - check(SV("answer is '-inf'"), SV("answer is '{:.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:-.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:+.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{: .6}'"), -std::numeric_limits::infinity()); - - check(SV("answer is 'nan'"), SV("answer is '{:.6}'"), nan_pos); - check(SV("answer is 'nan'"), SV("answer is '{:-.6}'"), nan_pos); - check(SV("answer is '+nan'"), SV("answer is '{:+.6}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: .6}'"), nan_pos); - - check(SV("answer is '-nan'"), SV("answer is '{:.6}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:-.6}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{:+.6}'"), nan_neg); - check(SV("answer is '-nan'"), SV("answer is '{: .6}'"), nan_neg); + check.template operator()<"answer is '{:.6}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-.6}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+.6}'">(SV("answer is '+inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: .6}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:.6}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-.6}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+.6}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: .6}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:.6}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:-.6}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:+.6}'">(SV("answer is '+nan'"), nan_pos); + check.template operator()<"answer is '{: .6}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:.6}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:-.6}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{:+.6}'">(SV("answer is '-nan'"), nan_neg); + check.template operator()<"answer is '{: .6}'">(SV("answer is '-nan'"), nan_neg); // *** alternate form ** // When precision is zero there's no decimal point except when the alternate form is specified. - check(SV("answer is '0'"), SV("answer is '{:.0}'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#.0}'"), F(0)); + check.template operator()<"answer is '{:.0}'">(SV("answer is '0'"), F(0)); + check.template operator()<"answer is '{:#.0}'">(SV("answer is '0.'"), F(0)); - check(SV("answer is '0.'"), SV("answer is '{:#.6}'"), F(0)); - check(SV("answer is '2.5'"), SV("answer is '{:#.6}'"), F(2.5)); + check.template operator()<"answer is '{:#.6}'">(SV("answer is '0.'"), F(0)); + check.template operator()<"answer is '{:#.6}'">(SV("answer is '2.5'"), F(2.5)); - check(SV("answer is 'inf'"), SV("answer is '{:#.6}'"), std::numeric_limits::infinity()); - check(SV("answer is '-inf'"), SV("answer is '{:#.6}'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#.6}'">(SV("answer is 'inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:#.6}'">(SV("answer is '-inf'"), -std::numeric_limits::infinity()); - check(SV("answer is 'nan'"), SV("answer is '{:#.6}'"), nan_pos); - check(SV("answer is '-nan'"), SV("answer is '{:#.6}'"), nan_neg); + check.template operator()<"answer is '{:#.6}'">(SV("answer is 'nan'"), nan_pos); + check.template operator()<"answer is '{:#.6}'">(SV("answer is '-nan'"), nan_neg); // *** zero-padding & width *** - check(SV("answer is '0.03125'"), SV("answer is '{:06.6}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+06.6}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+07.6}'"), 0.03125); - check(SV("answer is '+0.03125'"), SV("answer is '{:+08.6}'"), 0.03125); - - check(SV("answer is '000.03125'"), SV("answer is '{:09.6}'"), 0.03125); - check(SV("answer is '000.03125'"), SV("answer is '{:-09.6}'"), 0.03125); - check(SV("answer is '+00.03125'"), SV("answer is '{:+09.6}'"), 0.03125); - check(SV("answer is ' 00.03125'"), SV("answer is '{: 09.6}'"), 0.03125); - - check(SV("answer is ' inf'"), SV("answer is '{:010.6}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{:-010.6}'"), std::numeric_limits::infinity()); - check(SV("answer is ' +inf'"), SV("answer is '{:+010.6}'"), std::numeric_limits::infinity()); - check(SV("answer is ' inf'"), SV("answer is '{: 010.6}'"), std::numeric_limits::infinity()); - - check(SV("answer is ' -inf'"), SV("answer is '{:010.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:-010.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{:+010.6}'"), -std::numeric_limits::infinity()); - check(SV("answer is ' -inf'"), SV("answer is '{: 010.6}'"), -std::numeric_limits::infinity()); - - check(SV("answer is ' nan'"), SV("answer is '{:010.6}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{:-010.6}'"), nan_pos); - check(SV("answer is ' +nan'"), SV("answer is '{:+010.6}'"), nan_pos); - check(SV("answer is ' nan'"), SV("answer is '{: 010.6}'"), nan_pos); - - check(SV("answer is ' -nan'"), SV("answer is '{:010.6}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:-010.6}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{:+010.6}'"), nan_neg); - check(SV("answer is ' -nan'"), SV("answer is '{: 010.6}'"), nan_neg); + check.template operator()<"answer is '{:06.6}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:+06.6}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+07.6}'">(SV("answer is '+0.03125'"), 0.03125); + check.template operator()<"answer is '{:+08.6}'">(SV("answer is '+0.03125'"), 0.03125); + + check.template operator()<"answer is '{:09.6}'">(SV("answer is '000.03125'"), 0.03125); + check.template operator()<"answer is '{:-09.6}'">(SV("answer is '000.03125'"), 0.03125); + check.template operator()<"answer is '{:+09.6}'">(SV("answer is '+00.03125'"), 0.03125); + check.template operator()<"answer is '{: 09.6}'">(SV("answer is ' 00.03125'"), 0.03125); + + check.template operator()<"answer is '{:010.6}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010.6}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010.6}'">(SV("answer is ' +inf'"), std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010.6}'">(SV("answer is ' inf'"), std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010.6}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:-010.6}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{:+010.6}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + check.template operator()<"answer is '{: 010.6}'">(SV("answer is ' -inf'"), -std::numeric_limits::infinity()); + + check.template operator()<"answer is '{:010.6}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:-010.6}'">(SV("answer is ' nan'"), nan_pos); + check.template operator()<"answer is '{:+010.6}'">(SV("answer is ' +nan'"), nan_pos); + check.template operator()<"answer is '{: 010.6}'">(SV("answer is ' nan'"), nan_pos); + + check.template operator()<"answer is '{:010.6}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:-010.6}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{:+010.6}'">(SV("answer is ' -nan'"), nan_neg); + check.template operator()<"answer is '{: 010.6}'">(SV("answer is ' -nan'"), nan_neg); // *** precision *** - check(SV("answer is '0.03'"), SV("answer is '{:.0}'"), 0.03125); - check(SV("answer is '0.03'"), SV("answer is '{:.1}'"), 0.03125); - check(SV("answer is '0.031'"), SV("answer is '{:.2}'"), 0.03125); - check(SV("answer is '0.0312'"), SV("answer is '{:.3}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.4}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.5}'"), 0.03125); - check(SV("answer is '0.03125'"), SV("answer is '{:.10}'"), 0.03125); + check.template operator()<"answer is '{:.0}'">(SV("answer is '0.03'"), 0.03125); + check.template operator()<"answer is '{:.1}'">(SV("answer is '0.03'"), 0.03125); + check.template operator()<"answer is '{:.2}'">(SV("answer is '0.031'"), 0.03125); + check.template operator()<"answer is '{:.3}'">(SV("answer is '0.0312'"), 0.03125); + check.template operator()<"answer is '{:.4}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.5}'">(SV("answer is '0.03125'"), 0.03125); + check.template operator()<"answer is '{:.10}'">(SV("answer is '0.03125'"), 0.03125); // *** locale-specific form *** // See locale-specific_form.pass.cpp @@ -2384,14 +2392,14 @@ template void format_test_pointer(TestFunction check, ExceptionTest check_exception) { // *** align-fill & width *** - check(SV("answer is ' 0x0'"), SV("answer is '{:6}'"), P(nullptr)); - check(SV("answer is ' 0x0'"), SV("answer is '{:>6}'"), P(nullptr)); - check(SV("answer is '0x0 '"), SV("answer is '{:<6}'"), P(nullptr)); - check(SV("answer is ' 0x0 '"), SV("answer is '{:^6}'"), P(nullptr)); + check.template operator()<"answer is '{:6}'">(SV("answer is ' 0x0'"), P(nullptr)); + check.template operator()<"answer is '{:>6}'">(SV("answer is ' 0x0'"), P(nullptr)); + check.template operator()<"answer is '{:<6}'">(SV("answer is '0x0 '"), P(nullptr)); + check.template operator()<"answer is '{:^6}'">(SV("answer is ' 0x0 '"), P(nullptr)); - check(SV("answer is '---0x0'"), SV("answer is '{:->6}'"), P(nullptr)); - check(SV("answer is '0x0---'"), SV("answer is '{:-<6}'"), P(nullptr)); - check(SV("answer is '-0x0--'"), SV("answer is '{:-^6}'"), P(nullptr)); + check.template operator()<"answer is '{:->6}'">(SV("answer is '---0x0'"), P(nullptr)); + check.template operator()<"answer is '{:-<6}'">(SV("answer is '0x0---'"), P(nullptr)); + check.template operator()<"answer is '{:-^6}'">(SV("answer is '-0x0--'"), P(nullptr)); // *** Sign *** check_exception("The format-spec should consume the input or end with a '}'", SV("{:-}"), P(nullptr)); @@ -2418,20 +2426,20 @@ template void format_test_handle(TestFunction check, ExceptionTest check_exception) { // *** Valid permuatations *** - check(SV("answer is '0xaaaa'"), SV("answer is '{}'"), status::foo); - check(SV("answer is '0xaaaa'"), SV("answer is '{:x}'"), status::foo); - check(SV("answer is '0XAAAA'"), SV("answer is '{:X}'"), status::foo); - check(SV("answer is 'foo'"), SV("answer is '{:s}'"), status::foo); + check.template operator()<"answer is '{}'">(SV("answer is '0xaaaa'"), status::foo); + check.template operator()<"answer is '{:x}'">(SV("answer is '0xaaaa'"), status::foo); + check.template operator()<"answer is '{:X}'">(SV("answer is '0XAAAA'"), status::foo); + check.template operator()<"answer is '{:s}'">(SV("answer is 'foo'"), status::foo); - check(SV("answer is '0x5555'"), SV("answer is '{}'"), status::bar); - check(SV("answer is '0x5555'"), SV("answer is '{:x}'"), status::bar); - check(SV("answer is '0X5555'"), SV("answer is '{:X}'"), status::bar); - check(SV("answer is 'bar'"), SV("answer is '{:s}'"), status::bar); + check.template operator()<"answer is '{}'">(SV("answer is '0x5555'"), status::bar); + check.template operator()<"answer is '{:x}'">(SV("answer is '0x5555'"), status::bar); + check.template operator()<"answer is '{:X}'">(SV("answer is '0X5555'"), status::bar); + check.template operator()<"answer is '{:s}'">(SV("answer is 'bar'"), status::bar); - check(SV("answer is '0xaa55'"), SV("answer is '{}'"), status::foobar); - check(SV("answer is '0xaa55'"), SV("answer is '{:x}'"), status::foobar); - check(SV("answer is '0XAA55'"), SV("answer is '{:X}'"), status::foobar); - check(SV("answer is 'foobar'"), SV("answer is '{:s}'"), status::foobar); + check.template operator()<"answer is '{}'">(SV("answer is '0xaa55'"), status::foobar); + check.template operator()<"answer is '{:x}'">(SV("answer is '0xaa55'"), status::foobar); + check.template operator()<"answer is '{:X}'">(SV("answer is '0XAA55'"), status::foobar); + check.template operator()<"answer is '{:s}'">(SV("answer is 'foobar'"), status::foobar); // *** type *** for (const auto& fmt : invalid_types("xXs")) @@ -2448,12 +2456,13 @@ template void format_tests(TestFunction check, ExceptionTest check_exception) { // *** Test escaping *** - check(SV("{"), SV("{{")); - check(SV("}"), SV("}}")); + + check.template operator()<"{{">(SV("{")); + check.template operator()<"}}">(SV("}")); // *** Test argument ID *** - check(SV("hello false true"), SV("hello {0:} {1:}"), false, true); - check(SV("hello true false"), SV("hello {1:} {0:}"), false, true); + check.template operator()<"hello {0:} {1:}">(SV("hello false true"), false, true); + check.template operator()<"hello {1:} {0:}">(SV("hello true false"), false, true); // ** Test invalid format strings *** check_exception("The format string terminates at a '{'", SV("{")); @@ -2471,8 +2480,8 @@ // *** Test char format argument *** // The `char` to `wchar_t` formatting is tested separately. - check(SV("hello 09azAZ!"), SV("hello {}{}{}{}{}{}{}"), CharT('0'), CharT('9'), CharT('a'), CharT('z'), CharT('A'), - CharT('Z'), CharT('!')); + check.template operator()<"hello {}{}{}{}{}{}{}">(SV("hello 09azAZ!"), CharT('0'), CharT('9'), CharT('a'), CharT('z'), + CharT('A'), CharT('Z'), CharT('!')); format_test_char(check, check_exception); format_test_char_as_integer(check, check_exception); @@ -2481,45 +2490,48 @@ { CharT buffer[] = {CharT('0'), CharT('9'), CharT('a'), CharT('z'), CharT('A'), CharT('Z'), CharT('!'), 0}; CharT* data = buffer; - check(SV("hello 09azAZ!"), SV("hello {}"), data); + check.template operator()<"hello {}">(SV("hello 09azAZ!"), data); } { CharT buffer[] = {CharT('0'), CharT('9'), CharT('a'), CharT('z'), CharT('A'), CharT('Z'), CharT('!'), 0}; const CharT* data = buffer; - check(SV("hello 09azAZ!"), SV("hello {}"), data); + check.template operator()<"hello {}">(SV("hello 09azAZ!"), data); } { std::basic_string data = STR("world"); - check(SV("hello world"), SV("hello {}"), data); + check.template operator()<"hello {}">(SV("hello world"), data); } { std::basic_string buffer = STR("world"); std::basic_string_view data = buffer; - check(SV("hello world"), SV("hello {}"), data); + check.template operator()<"hello {}">(SV("hello world"), data); } format_string_tests(check, check_exception); // *** Test Boolean format argument *** - check(SV("hello false true"), SV("hello {} {}"), false, true); + check.template operator()<"hello {} {}">(SV("hello false true"), false, true); format_test_bool(check, check_exception); format_test_bool_as_integer(check, check_exception); // *** Test signed integral format argument *** - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); #ifndef TEST_HAS_NO_INT128 - check(SV("hello 42"), SV("hello {}"), static_cast<__int128_t>(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast<__int128_t>(42)); { // Note 128-bit support is only partly implemented test the range // conditions here. - std::basic_string min = std::format(STR("{}"), std::numeric_limits::min()); - check(std::basic_string_view(min), SV("{}"), static_cast<__int128_t>(std::numeric_limits::min())); - std::basic_string max = std::format(STR("{}"), std::numeric_limits::max()); - check(std::basic_string_view(max), SV("{}"), static_cast<__int128_t>(std::numeric_limits::max())); + static constexpr auto fmt = string_literal("{}"); + std::basic_string min = std::format(fmt.sv(), std::numeric_limits::min()); + check.template operator()<"{}">(std::basic_string_view(min), + static_cast<__int128_t>(std::numeric_limits::min())); + std::basic_string max = std::format(fmt.sv(), std::numeric_limits::max()); + check.template operator()<"{}">(std::basic_string_view(max), + static_cast<__int128_t>(std::numeric_limits::max())); check_exception("128-bit value is outside of implemented range", SV("{}"), static_cast<__int128_t>(std::numeric_limits::min()) - 1); check_exception("128-bit value is outside of implemented range", SV("{}"), @@ -2529,19 +2541,20 @@ format_test_signed_integer(check, check_exception); // ** Test unsigned integral format argument *** - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); #ifndef TEST_HAS_NO_INT128 - check(SV("hello 42"), SV("hello {}"), static_cast<__uint128_t>(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast<__uint128_t>(42)); { // Note 128-bit support is only partly implemented test the range // conditions here. - std::basic_string max = std::format(STR("{}"), std::numeric_limits::max()); - check(std::basic_string_view(max), SV("{}"), - static_cast<__uint128_t>(std::numeric_limits::max())); + static constexpr auto fmt = string_literal("{}"); + std::basic_string max = std::format(fmt.sv(), std::numeric_limits::max()); + check.template operator()<"{}">(std::basic_string_view(max), + static_cast<__uint128_t>(std::numeric_limits::max())); check_exception("128-bit value is outside of implemented range", SV("{}"), static_cast<__uint128_t>(std::numeric_limits::max()) + 1); } @@ -2549,15 +2562,15 @@ format_test_unsigned_integer(check, check_exception); // *** Test floating point format argument *** - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); - check(SV("hello 42"), SV("hello {}"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); + check.template operator()<"hello {}">(SV("hello 42"), static_cast(42)); format_test_floating_point(check, check_exception); // *** Test pointer formater argument *** - check(SV("hello 0x0"), SV("hello {}"), nullptr); - check(SV("hello 0x42"), SV("hello {}"), reinterpret_cast(0x42)); - check(SV("hello 0x42"), SV("hello {}"), reinterpret_cast(0x42)); + check.template operator()<"hello {}">(SV("hello 0x0"), nullptr); + check.template operator()<"hello {}">(SV("hello 0x42"), reinterpret_cast(0x42)); + check.template operator()<"hello {}">(SV("hello 0x42"), reinterpret_cast(0x42)); format_test_pointer(check, check_exception); // *** Test handle formatter argument *** @@ -2568,7 +2581,7 @@ template void format_tests_char_to_wchar_t(TestFunction check) { using CharT = wchar_t; - check(SV("hello 09azA"), SV("hello {}{}{}{}{}"), '0', '9', 'a', 'z', 'A'); + check.template operator()<"hello {}{}{}{}{}">(SV("hello 09azA"), '0', '9', 'a', 'z', 'A'); } #endif diff --git a/libcxx/test/std/utilities/format/format.functions/format_to.locale.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format_to.locale.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/format_to.locale.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/format_to.locale.pass.cpp @@ -10,6 +10,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -28,29 +30,30 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::format_to(out.begin(), std::locale(), fmt, args...); + auto it = std::format_to(out.begin(), std::locale(), fmt.template sv(), args...); assert(it == out.end()); assert(out == expected); } { std::list out; - std::format_to(std::back_inserter(out), std::locale(), fmt, args...); + std::format_to(std::back_inserter(out), std::locale(), fmt.template sv(), args...); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { std::vector out; - std::format_to(std::back_inserter(out), std::locale(), fmt, args...); + std::format_to(std::back_inserter(out), std::locale(), fmt.template sv(), args...); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { assert(expected.size() < 4096 && "Update the size of the buffer."); CharT out[4096]; - CharT* it = std::format_to(out, std::locale(), fmt, args...); + CharT* it = std::format_to(out, std::locale(), fmt.template sv(), args...); assert(std::distance(out, it) == int(expected.size())); // Convert to std::string since output contains '\0' for boolean tests. assert(std::basic_string(out, it) == expected); diff --git a/libcxx/test/std/utilities/format/format.functions/format_to.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format_to.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/format_to.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/format_to.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -25,29 +27,30 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::format_to(out.begin(), fmt, args...); + auto it = std::format_to(out.begin(), fmt.template sv(), args...); assert(it == out.end()); assert(out == expected); } { std::list out; - std::format_to(std::back_inserter(out), fmt, args...); + std::format_to(std::back_inserter(out), fmt.template sv(), args...); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { std::vector out; - std::format_to(std::back_inserter(out), fmt, args...); + std::format_to(std::back_inserter(out), fmt.template sv(), args...); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { assert(expected.size() < 4096 && "Update the size of the buffer."); CharT out[4096]; - CharT* it = std::format_to(out, fmt, args...); + CharT* it = std::format_to(out, fmt.template sv(), args...); assert(std::distance(out, it) == int(expected.size())); // Convert to std::string since output contains '\0' for boolean tests. assert(std::basic_string(out, it) == expected); diff --git a/libcxx/test/std/utilities/format/format.functions/format_to_n.locale.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format_to_n.locale.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/format_to_n.locale.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/format_to_n.locale.pass.cpp @@ -10,6 +10,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -30,25 +32,28 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { { std::list out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 0, std::locale(), fmt, args...); + std::format_to_n_result result = + std::format_to_n(std::back_inserter(out), 0, std::locale(), fmt.template sv(), args...); // To avoid signedness warnings make sure formatted_size uses the same type // as result.size. using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(std::locale(), fmt, args...); + diff_type formatted_size = std::formatted_size(std::locale(), fmt.template sv(), args...); assert(result.size == formatted_size); assert(out.empty()); } { std::vector out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 5, std::locale(), fmt, args...); + std::format_to_n_result result = + std::format_to_n(std::back_inserter(out), 5, std::locale(), fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(std::locale(), fmt, args...); + diff_type formatted_size = std::formatted_size(std::locale(), fmt.template sv(), args...); diff_type size = std::min(5, formatted_size); assert(result.size == formatted_size); @@ -56,9 +61,10 @@ } { std::basic_string out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 1000, std::locale(), fmt, args...); + std::format_to_n_result result = + std::format_to_n(std::back_inserter(out), 1000, std::locale(), fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(std::locale(), fmt, args...); + diff_type formatted_size = std::formatted_size(std::locale(), fmt.template sv(), args...); diff_type size = std::min(1000, formatted_size); assert(result.size == formatted_size); @@ -67,9 +73,10 @@ { // Test the returned iterator. std::basic_string out(10, CharT(' ')); - std::format_to_n_result result = std::format_to_n(out.begin(), 10, std::locale(), fmt, args...); + std::format_to_n_result result = + std::format_to_n(out.begin(), 10, std::locale(), fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(std::locale(), fmt, args...); + diff_type formatted_size = std::formatted_size(std::locale(), fmt.template sv(), args...); diff_type size = std::min(10, formatted_size); assert(result.size == formatted_size); @@ -81,9 +88,9 @@ "If the difference type isn't negative the test will fail " "due to using a large positive value."); CharT buffer[1] = {CharT(0)}; - std::format_to_n_result result = std::format_to_n(buffer, -1, std::locale(), fmt, args...); + std::format_to_n_result result = std::format_to_n(buffer, -1, std::locale(), fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(std::locale(), fmt, args...); + diff_type formatted_size = std::formatted_size(std::locale(), fmt.template sv(), args...); assert(result.size == formatted_size); assert(result.out == buffer); diff --git a/libcxx/test/std/utilities/format/format.functions/format_to_n.pass.cpp b/libcxx/test/std/utilities/format/format.functions/format_to_n.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/format_to_n.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/format_to_n.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -27,25 +29,26 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { { std::list out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 0, fmt, args...); + std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 0, fmt.template sv(), args...); // To avoid signedness warnings make sure formatted_size uses the same type // as result.size. using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(fmt, args...); + diff_type formatted_size = std::formatted_size(fmt.template sv(), args...); assert(result.size == formatted_size); assert(out.empty()); } { std::vector out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 5, fmt, args...); + std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 5, fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(fmt, args...); + diff_type formatted_size = std::formatted_size(fmt.template sv(), args...); diff_type size = std::min(5, formatted_size); assert(result.size == formatted_size); @@ -53,9 +56,9 @@ } { std::basic_string out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 1000, fmt, args...); + std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 1000, fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(fmt, args...); + diff_type formatted_size = std::formatted_size(fmt.template sv(), args...); diff_type size = std::min(1000, formatted_size); assert(result.size == formatted_size); @@ -64,9 +67,9 @@ { // Test the returned iterator. std::basic_string out(10, CharT(' ')); - std::format_to_n_result result = std::format_to_n(out.begin(), 10, fmt, args...); + std::format_to_n_result result = std::format_to_n(out.begin(), 10, fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(fmt, args...); + diff_type formatted_size = std::formatted_size(fmt.template sv(), args...); diff_type size = std::min(10, formatted_size); assert(result.size == formatted_size); @@ -78,9 +81,9 @@ "If the difference type isn't negative the test will fail " "due to using a large positive value."); CharT buffer[1] = {CharT(0)}; - std::format_to_n_result result = std::format_to_n(buffer, -1, fmt, args...); + std::format_to_n_result result = std::format_to_n(buffer, -1, fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(fmt, args...); + diff_type formatted_size = std::formatted_size(fmt.template sv(), args...); assert(result.size == formatted_size); assert(result.out == buffer); diff --git a/libcxx/test/std/utilities/format/format.functions/formatted_size.locale.pass.cpp b/libcxx/test/std/utilities/format/format.functions/formatted_size.locale.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/formatted_size.locale.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/formatted_size.locale.pass.cpp @@ -10,6 +10,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -26,10 +28,11 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { - size_t size = std::formatted_size(std::locale(), fmt, args...); +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { + size_t size = std::formatted_size(std::locale(), fmt.template sv(), args...); assert(size == expected.size()); }; diff --git a/libcxx/test/std/utilities/format/format.functions/formatted_size.pass.cpp b/libcxx/test/std/utilities/format/format.functions/formatted_size.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/formatted_size.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/formatted_size.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -23,10 +25,11 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { - size_t size = std::formatted_size(fmt, args...); +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { + size_t size = std::formatted_size(fmt.template sv(), args...); assert(size == expected.size()); }; diff --git a/libcxx/test/std/utilities/format/format.functions/locale-specific_form.pass.cpp b/libcxx/test/std/utilities/format/format.functions/locale-specific_form.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/locale-specific_form.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/locale-specific_form.pass.cpp @@ -96,6 +96,7 @@ #include "make_string.h" #include "platform_support.h" // locale name macros #include "format_tests.h" +#include "string_literal.h" #define STR(S) MAKE_STRING(CharT, S) #define SV(S) MAKE_STRING_VIEW(CharT, S) @@ -125,42 +126,43 @@ }; #endif -template -void test(std::basic_string_view expected, std::basic_string_view fmt, const Args&... args) { +template +void test(std::basic_string_view expected, const Args&... args) { // *** format *** { - std::basic_string out = std::format(fmt, args...); + std::basic_string out = std::format(fmt.template sv(), args...); if constexpr (std::same_as) if (out != expected) - std::cerr << "\nFormat string " << fmt << "\nExpected output " << expected << "\nActual output " << out - << '\n'; + std::cerr << "\nFormat string " << fmt.template sv() << "\nExpected output " << expected + << "\nActual output " << out << '\n'; assert(out == expected); } // *** vformat *** { - std::basic_string out = std::vformat(fmt, std::make_format_args>(args...)); + std::basic_string out = + std::vformat(fmt.template sv(), std::make_format_args>(args...)); assert(out == expected); } // *** format_to *** { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::format_to(out.begin(), fmt, args...); + auto it = std::format_to(out.begin(), fmt.template sv(), args...); assert(it == out.end()); assert(out == expected); } // *** vformat_to *** { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::vformat_to(out.begin(), fmt, std::make_format_args>(args...)); + auto it = std::vformat_to(out.begin(), fmt.template sv(), std::make_format_args>(args...)); assert(it == out.end()); assert(out == expected); } // *** format_to_n *** { std::basic_string out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 1000, fmt, args...); + std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 1000, fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(fmt, args...); + diff_type formatted_size = std::formatted_size(fmt.template sv(), args...); diff_type size = std::min(1000, formatted_size); assert(result.size == formatted_size); @@ -168,48 +170,50 @@ } // *** formatted_size *** { - size_t size = std::formatted_size(fmt, args...); + size_t size = std::formatted_size(fmt.template sv(), args...); assert(size == expected.size()); } } -template -void test(std::basic_string_view expected, std::locale loc, std::basic_string_view fmt, - const Args&... args) { +template +void test(std::basic_string_view expected, std::locale loc, const Args&... args) { // *** format *** { - std::basic_string out = std::format(loc, fmt, args...); + std::basic_string out = std::format(loc, fmt.template sv(), args...); if constexpr (std::same_as) if (out != expected) - std::cerr << "\nFormat string " << fmt << "\nExpected output " << expected << "\nActual output " << out - << '\n'; + std::cerr << "\nFormat string " << fmt.template sv() << "\nExpected output " << expected + << "\nActual output " << out << '\n'; assert(out == expected); } // *** vformat *** { - std::basic_string out = std::vformat(loc, fmt, std::make_format_args>(args...)); + std::basic_string out = + std::vformat(loc, fmt.template sv(), std::make_format_args>(args...)); assert(out == expected); } // *** format_to *** { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::format_to(out.begin(), loc, fmt, args...); + auto it = std::format_to(out.begin(), loc, fmt.template sv(), args...); assert(it == out.end()); assert(out == expected); } // *** vformat_to *** { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::vformat_to(out.begin(), loc, fmt, std::make_format_args>(args...)); + auto it = + std::vformat_to(out.begin(), loc, fmt.template sv(), std::make_format_args>(args...)); assert(it == out.end()); assert(out == expected); } // *** format_to_n *** { std::basic_string out; - std::format_to_n_result result = std::format_to_n(std::back_inserter(out), 1000, loc, fmt, args...); + std::format_to_n_result result = + std::format_to_n(std::back_inserter(out), 1000, loc, fmt.template sv(), args...); using diff_type = decltype(result.size); - diff_type formatted_size = std::formatted_size(loc, fmt, args...); + diff_type formatted_size = std::formatted_size(loc, fmt.template sv(), args...); diff_type size = std::min(1000, formatted_size); assert(result.size == formatted_size); @@ -217,7 +221,7 @@ } // *** formatted_size *** { - size_t size = std::formatted_size(loc, fmt, args...); + size_t size = std::formatted_size(loc, fmt.template sv(), args...); assert(size == expected.size()); } } @@ -247,29 +251,29 @@ std::locale::global(std::locale(LOCALE_en_US_UTF_8)); assert(std::locale().name() == LOCALE_en_US_UTF_8); - test(SV("true"), SV("{:L}"), true); - test(SV("false"), SV("{:L}"), false); + test<"{:L}">(SV("true"), true); + test<"{:L}">(SV("false"), false); - test(SV("yes"), loc, SV("{:L}"), true); - test(SV("no"), loc, SV("{:L}"), false); + test<"{:L}">(SV("yes"), loc, true); + test<"{:L}">(SV("no"), loc, false); std::locale::global(loc); - test(SV("yes"), SV("{:L}"), true); - test(SV("no"), SV("{:L}"), false); + test<"{:L}">(SV("yes"), true); + test<"{:L}">(SV("no"), false); - test(SV("true"), std::locale(LOCALE_en_US_UTF_8), SV("{:L}"), true); - test(SV("false"), std::locale(LOCALE_en_US_UTF_8), SV("{:L}"), false); + test<"{:L}">(SV("true"), std::locale(LOCALE_en_US_UTF_8), true); + test<"{:L}">(SV("false"), std::locale(LOCALE_en_US_UTF_8), false); #ifndef TEST_HAS_NO_UNICODE std::locale loc_unicode = std::locale(std::locale(), new numpunct_unicode()); - test(SV("gültig"), loc_unicode, SV("{:L}"), true); - test(SV("ungültig"), loc_unicode, SV("{:L}"), false); + test<"{:L}">(SV("gültig"), loc_unicode, true); + test<"{:L}">(SV("ungültig"), loc_unicode, false); - test(SV("gültig "), loc_unicode, SV("{:9L}"), true); - test(SV("gültig!!!"), loc_unicode, SV("{:!<9L}"), true); - test(SV("_gültig__"), loc_unicode, SV("{:_^9L}"), true); - test(SV(" gültig"), loc_unicode, SV("{:>9L}"), true); + test<"{:9L}">(SV("gültig "), loc_unicode, true); + test<"{:!<9L}">(SV("gültig!!!"), loc_unicode, true); + test<"{:_^9L}">(SV("_gültig__"), loc_unicode, true); + test<"{:>9L}">(SV(" gültig"), loc_unicode, true); #endif // TEST_HAS_NO_UNICODE } @@ -280,325 +284,325 @@ // *** Decimal *** std::locale::global(en_US); - test(SV("0"), SV("{:L}"), 0); - test(SV("1"), SV("{:L}"), 1); - test(SV("10"), SV("{:L}"), 10); - test(SV("100"), SV("{:L}"), 100); - test(SV("1,000"), SV("{:L}"), 1'000); - test(SV("10,000"), SV("{:L}"), 10'000); - test(SV("100,000"), SV("{:L}"), 100'000); - test(SV("1,000,000"), SV("{:L}"), 1'000'000); - test(SV("10,000,000"), SV("{:L}"), 10'000'000); - test(SV("100,000,000"), SV("{:L}"), 100'000'000); - test(SV("1,000,000,000"), SV("{:L}"), 1'000'000'000); - - test(SV("-1"), SV("{:L}"), -1); - test(SV("-10"), SV("{:L}"), -10); - test(SV("-100"), SV("{:L}"), -100); - test(SV("-1,000"), SV("{:L}"), -1'000); - test(SV("-10,000"), SV("{:L}"), -10'000); - test(SV("-100,000"), SV("{:L}"), -100'000); - test(SV("-1,000,000"), SV("{:L}"), -1'000'000); - test(SV("-10,000,000"), SV("{:L}"), -10'000'000); - test(SV("-100,000,000"), SV("{:L}"), -100'000'000); - test(SV("-1,000,000,000"), SV("{:L}"), -1'000'000'000); + test<"{:L}">(SV("0"), 0); + test<"{:L}">(SV("1"), 1); + test<"{:L}">(SV("10"), 10); + test<"{:L}">(SV("100"), 100); + test<"{:L}">(SV("1,000"), 1'000); + test<"{:L}">(SV("10,000"), 10'000); + test<"{:L}">(SV("100,000"), 100'000); + test<"{:L}">(SV("1,000,000"), 1'000'000); + test<"{:L}">(SV("10,000,000"), 10'000'000); + test<"{:L}">(SV("100,000,000"), 100'000'000); + test<"{:L}">(SV("1,000,000,000"), 1'000'000'000); + + test<"{:L}">(SV("-1"), -1); + test<"{:L}">(SV("-10"), -10); + test<"{:L}">(SV("-100"), -100); + test<"{:L}">(SV("-1,000"), -1'000); + test<"{:L}">(SV("-10,000"), -10'000); + test<"{:L}">(SV("-100,000"), -100'000); + test<"{:L}">(SV("-1,000,000"), -1'000'000); + test<"{:L}">(SV("-10,000,000"), -10'000'000); + test<"{:L}">(SV("-100,000,000"), -100'000'000); + test<"{:L}">(SV("-1,000,000,000"), -1'000'000'000); std::locale::global(loc); - test(SV("0"), SV("{:L}"), 0); - test(SV("1"), SV("{:L}"), 1); - test(SV("1_0"), SV("{:L}"), 10); - test(SV("10_0"), SV("{:L}"), 100); - test(SV("1_00_0"), SV("{:L}"), 1'000); - test(SV("10_00_0"), SV("{:L}"), 10'000); - test(SV("100_00_0"), SV("{:L}"), 100'000); - test(SV("1_000_00_0"), SV("{:L}"), 1'000'000); - test(SV("10_000_00_0"), SV("{:L}"), 10'000'000); - test(SV("1_00_000_00_0"), SV("{:L}"), 100'000'000); - test(SV("1_0_00_000_00_0"), SV("{:L}"), 1'000'000'000); - - test(SV("-1"), SV("{:L}"), -1); - test(SV("-1_0"), SV("{:L}"), -10); - test(SV("-10_0"), SV("{:L}"), -100); - test(SV("-1_00_0"), SV("{:L}"), -1'000); - test(SV("-10_00_0"), SV("{:L}"), -10'000); - test(SV("-100_00_0"), SV("{:L}"), -100'000); - test(SV("-1_000_00_0"), SV("{:L}"), -1'000'000); - test(SV("-10_000_00_0"), SV("{:L}"), -10'000'000); - test(SV("-1_00_000_00_0"), SV("{:L}"), -100'000'000); - test(SV("-1_0_00_000_00_0"), SV("{:L}"), -1'000'000'000); - - test(SV("0"), en_US, SV("{:L}"), 0); - test(SV("1"), en_US, SV("{:L}"), 1); - test(SV("10"), en_US, SV("{:L}"), 10); - test(SV("100"), en_US, SV("{:L}"), 100); - test(SV("1,000"), en_US, SV("{:L}"), 1'000); - test(SV("10,000"), en_US, SV("{:L}"), 10'000); - test(SV("100,000"), en_US, SV("{:L}"), 100'000); - test(SV("1,000,000"), en_US, SV("{:L}"), 1'000'000); - test(SV("10,000,000"), en_US, SV("{:L}"), 10'000'000); - test(SV("100,000,000"), en_US, SV("{:L}"), 100'000'000); - test(SV("1,000,000,000"), en_US, SV("{:L}"), 1'000'000'000); - - test(SV("-1"), en_US, SV("{:L}"), -1); - test(SV("-10"), en_US, SV("{:L}"), -10); - test(SV("-100"), en_US, SV("{:L}"), -100); - test(SV("-1,000"), en_US, SV("{:L}"), -1'000); - test(SV("-10,000"), en_US, SV("{:L}"), -10'000); - test(SV("-100,000"), en_US, SV("{:L}"), -100'000); - test(SV("-1,000,000"), en_US, SV("{:L}"), -1'000'000); - test(SV("-10,000,000"), en_US, SV("{:L}"), -10'000'000); - test(SV("-100,000,000"), en_US, SV("{:L}"), -100'000'000); - test(SV("-1,000,000,000"), en_US, SV("{:L}"), -1'000'000'000); + test<"{:L}">(SV("0"), 0); + test<"{:L}">(SV("1"), 1); + test<"{:L}">(SV("1_0"), 10); + test<"{:L}">(SV("10_0"), 100); + test<"{:L}">(SV("1_00_0"), 1'000); + test<"{:L}">(SV("10_00_0"), 10'000); + test<"{:L}">(SV("100_00_0"), 100'000); + test<"{:L}">(SV("1_000_00_0"), 1'000'000); + test<"{:L}">(SV("10_000_00_0"), 10'000'000); + test<"{:L}">(SV("1_00_000_00_0"), 100'000'000); + test<"{:L}">(SV("1_0_00_000_00_0"), 1'000'000'000); + + test<"{:L}">(SV("-1"), -1); + test<"{:L}">(SV("-1_0"), -10); + test<"{:L}">(SV("-10_0"), -100); + test<"{:L}">(SV("-1_00_0"), -1'000); + test<"{:L}">(SV("-10_00_0"), -10'000); + test<"{:L}">(SV("-100_00_0"), -100'000); + test<"{:L}">(SV("-1_000_00_0"), -1'000'000); + test<"{:L}">(SV("-10_000_00_0"), -10'000'000); + test<"{:L}">(SV("-1_00_000_00_0"), -100'000'000); + test<"{:L}">(SV("-1_0_00_000_00_0"), -1'000'000'000); + + test<"{:L}">(SV("0"), en_US, 0); + test<"{:L}">(SV("1"), en_US, 1); + test<"{:L}">(SV("10"), en_US, 10); + test<"{:L}">(SV("100"), en_US, 100); + test<"{:L}">(SV("1,000"), en_US, 1'000); + test<"{:L}">(SV("10,000"), en_US, 10'000); + test<"{:L}">(SV("100,000"), en_US, 100'000); + test<"{:L}">(SV("1,000,000"), en_US, 1'000'000); + test<"{:L}">(SV("10,000,000"), en_US, 10'000'000); + test<"{:L}">(SV("100,000,000"), en_US, 100'000'000); + test<"{:L}">(SV("1,000,000,000"), en_US, 1'000'000'000); + + test<"{:L}">(SV("-1"), en_US, -1); + test<"{:L}">(SV("-10"), en_US, -10); + test<"{:L}">(SV("-100"), en_US, -100); + test<"{:L}">(SV("-1,000"), en_US, -1'000); + test<"{:L}">(SV("-10,000"), en_US, -10'000); + test<"{:L}">(SV("-100,000"), en_US, -100'000); + test<"{:L}">(SV("-1,000,000"), en_US, -1'000'000); + test<"{:L}">(SV("-10,000,000"), en_US, -10'000'000); + test<"{:L}">(SV("-100,000,000"), en_US, -100'000'000); + test<"{:L}">(SV("-1,000,000,000"), en_US, -1'000'000'000); std::locale::global(en_US); - test(SV("0"), loc, SV("{:L}"), 0); - test(SV("1"), loc, SV("{:L}"), 1); - test(SV("1_0"), loc, SV("{:L}"), 10); - test(SV("10_0"), loc, SV("{:L}"), 100); - test(SV("1_00_0"), loc, SV("{:L}"), 1'000); - test(SV("10_00_0"), loc, SV("{:L}"), 10'000); - test(SV("100_00_0"), loc, SV("{:L}"), 100'000); - test(SV("1_000_00_0"), loc, SV("{:L}"), 1'000'000); - test(SV("10_000_00_0"), loc, SV("{:L}"), 10'000'000); - test(SV("1_00_000_00_0"), loc, SV("{:L}"), 100'000'000); - test(SV("1_0_00_000_00_0"), loc, SV("{:L}"), 1'000'000'000); - - test(SV("-1"), loc, SV("{:L}"), -1); - test(SV("-1_0"), loc, SV("{:L}"), -10); - test(SV("-10_0"), loc, SV("{:L}"), -100); - test(SV("-1_00_0"), loc, SV("{:L}"), -1'000); - test(SV("-10_00_0"), loc, SV("{:L}"), -10'000); - test(SV("-100_00_0"), loc, SV("{:L}"), -100'000); - test(SV("-1_000_00_0"), loc, SV("{:L}"), -1'000'000); - test(SV("-10_000_00_0"), loc, SV("{:L}"), -10'000'000); - test(SV("-1_00_000_00_0"), loc, SV("{:L}"), -100'000'000); - test(SV("-1_0_00_000_00_0"), loc, SV("{:L}"), -1'000'000'000); + test<"{:L}">(SV("0"), loc, 0); + test<"{:L}">(SV("1"), loc, 1); + test<"{:L}">(SV("1_0"), loc, 10); + test<"{:L}">(SV("10_0"), loc, 100); + test<"{:L}">(SV("1_00_0"), loc, 1'000); + test<"{:L}">(SV("10_00_0"), loc, 10'000); + test<"{:L}">(SV("100_00_0"), loc, 100'000); + test<"{:L}">(SV("1_000_00_0"), loc, 1'000'000); + test<"{:L}">(SV("10_000_00_0"), loc, 10'000'000); + test<"{:L}">(SV("1_00_000_00_0"), loc, 100'000'000); + test<"{:L}">(SV("1_0_00_000_00_0"), loc, 1'000'000'000); + + test<"{:L}">(SV("-1"), loc, -1); + test<"{:L}">(SV("-1_0"), loc, -10); + test<"{:L}">(SV("-10_0"), loc, -100); + test<"{:L}">(SV("-1_00_0"), loc, -1'000); + test<"{:L}">(SV("-10_00_0"), loc, -10'000); + test<"{:L}">(SV("-100_00_0"), loc, -100'000); + test<"{:L}">(SV("-1_000_00_0"), loc, -1'000'000); + test<"{:L}">(SV("-10_000_00_0"), loc, -10'000'000); + test<"{:L}">(SV("-1_00_000_00_0"), loc, -100'000'000); + test<"{:L}">(SV("-1_0_00_000_00_0"), loc, -1'000'000'000); // *** Binary *** std::locale::global(en_US); - test(SV("0"), SV("{:Lb}"), 0b0); - test(SV("1"), SV("{:Lb}"), 0b1); - test(SV("1,000,000,000"), SV("{:Lb}"), 0b1'000'000'000); + test<"{:Lb}">(SV("0"), 0b0); + test<"{:Lb}">(SV("1"), 0b1); + test<"{:Lb}">(SV("1,000,000,000"), 0b1'000'000'000); - test(SV("0b0"), SV("{:#Lb}"), 0b0); - test(SV("0b1"), SV("{:#Lb}"), 0b1); - test(SV("0b1,000,000,000"), SV("{:#Lb}"), 0b1'000'000'000); + test<"{:#Lb}">(SV("0b0"), 0b0); + test<"{:#Lb}">(SV("0b1"), 0b1); + test<"{:#Lb}">(SV("0b1,000,000,000"), 0b1'000'000'000); - test(SV("-1"), SV("{:LB}"), -0b1); - test(SV("-1,000,000,000"), SV("{:LB}"), -0b1'000'000'000); + test<"{:LB}">(SV("-1"), -0b1); + test<"{:LB}">(SV("-1,000,000,000"), -0b1'000'000'000); - test(SV("-0B1"), SV("{:#LB}"), -0b1); - test(SV("-0B1,000,000,000"), SV("{:#LB}"), -0b1'000'000'000); + test<"{:#LB}">(SV("-0B1"), -0b1); + test<"{:#LB}">(SV("-0B1,000,000,000"), -0b1'000'000'000); std::locale::global(loc); - test(SV("0"), SV("{:Lb}"), 0b0); - test(SV("1"), SV("{:Lb}"), 0b1); - test(SV("1_0_00_000_00_0"), SV("{:Lb}"), 0b1'000'000'000); + test<"{:Lb}">(SV("0"), 0b0); + test<"{:Lb}">(SV("1"), 0b1); + test<"{:Lb}">(SV("1_0_00_000_00_0"), 0b1'000'000'000); - test(SV("0b0"), SV("{:#Lb}"), 0b0); - test(SV("0b1"), SV("{:#Lb}"), 0b1); - test(SV("0b1_0_00_000_00_0"), SV("{:#Lb}"), 0b1'000'000'000); + test<"{:#Lb}">(SV("0b0"), 0b0); + test<"{:#Lb}">(SV("0b1"), 0b1); + test<"{:#Lb}">(SV("0b1_0_00_000_00_0"), 0b1'000'000'000); - test(SV("-1"), SV("{:LB}"), -0b1); - test(SV("-1_0_00_000_00_0"), SV("{:LB}"), -0b1'000'000'000); + test<"{:LB}">(SV("-1"), -0b1); + test<"{:LB}">(SV("-1_0_00_000_00_0"), -0b1'000'000'000); - test(SV("-0B1"), SV("{:#LB}"), -0b1); - test(SV("-0B1_0_00_000_00_0"), SV("{:#LB}"), -0b1'000'000'000); + test<"{:#LB}">(SV("-0B1"), -0b1); + test<"{:#LB}">(SV("-0B1_0_00_000_00_0"), -0b1'000'000'000); - test(SV("0"), en_US, SV("{:Lb}"), 0b0); - test(SV("1"), en_US, SV("{:Lb}"), 0b1); - test(SV("1,000,000,000"), en_US, SV("{:Lb}"), 0b1'000'000'000); + test<"{:Lb}">(SV("0"), en_US, 0b0); + test<"{:Lb}">(SV("1"), en_US, 0b1); + test<"{:Lb}">(SV("1,000,000,000"), en_US, 0b1'000'000'000); - test(SV("0b0"), en_US, SV("{:#Lb}"), 0b0); - test(SV("0b1"), en_US, SV("{:#Lb}"), 0b1); - test(SV("0b1,000,000,000"), en_US, SV("{:#Lb}"), 0b1'000'000'000); + test<"{:#Lb}">(SV("0b0"), en_US, 0b0); + test<"{:#Lb}">(SV("0b1"), en_US, 0b1); + test<"{:#Lb}">(SV("0b1,000,000,000"), en_US, 0b1'000'000'000); - test(SV("-1"), en_US, SV("{:LB}"), -0b1); - test(SV("-1,000,000,000"), en_US, SV("{:LB}"), -0b1'000'000'000); + test<"{:LB}">(SV("-1"), en_US, -0b1); + test<"{:LB}">(SV("-1,000,000,000"), en_US, -0b1'000'000'000); - test(SV("-0B1"), en_US, SV("{:#LB}"), -0b1); - test(SV("-0B1,000,000,000"), en_US, SV("{:#LB}"), -0b1'000'000'000); + test<"{:#LB}">(SV("-0B1"), en_US, -0b1); + test<"{:#LB}">(SV("-0B1,000,000,000"), en_US, -0b1'000'000'000); std::locale::global(en_US); - test(SV("0"), loc, SV("{:Lb}"), 0b0); - test(SV("1"), loc, SV("{:Lb}"), 0b1); - test(SV("1_0_00_000_00_0"), loc, SV("{:Lb}"), 0b1'000'000'000); + test<"{:Lb}">(SV("0"), loc, 0b0); + test<"{:Lb}">(SV("1"), loc, 0b1); + test<"{:Lb}">(SV("1_0_00_000_00_0"), loc, 0b1'000'000'000); - test(SV("0b0"), loc, SV("{:#Lb}"), 0b0); - test(SV("0b1"), loc, SV("{:#Lb}"), 0b1); - test(SV("0b1_0_00_000_00_0"), loc, SV("{:#Lb}"), 0b1'000'000'000); + test<"{:#Lb}">(SV("0b0"), loc, 0b0); + test<"{:#Lb}">(SV("0b1"), loc, 0b1); + test<"{:#Lb}">(SV("0b1_0_00_000_00_0"), loc, 0b1'000'000'000); - test(SV("-1"), loc, SV("{:LB}"), -0b1); - test(SV("-1_0_00_000_00_0"), loc, SV("{:LB}"), -0b1'000'000'000); + test<"{:LB}">(SV("-1"), loc, -0b1); + test<"{:LB}">(SV("-1_0_00_000_00_0"), loc, -0b1'000'000'000); - test(SV("-0B1"), loc, SV("{:#LB}"), -0b1); - test(SV("-0B1_0_00_000_00_0"), loc, SV("{:#LB}"), -0b1'000'000'000); + test<"{:#LB}">(SV("-0B1"), loc, -0b1); + test<"{:#LB}">(SV("-0B1_0_00_000_00_0"), loc, -0b1'000'000'000); // *** Octal *** std::locale::global(en_US); - test(SV("0"), SV("{:Lo}"), 00); - test(SV("1"), SV("{:Lo}"), 01); - test(SV("1,000,000,000"), SV("{:Lo}"), 01'000'000'000); + test<"{:Lo}">(SV("0"), 00); + test<"{:Lo}">(SV("1"), 01); + test<"{:Lo}">(SV("1,000,000,000"), 01'000'000'000); - test(SV("0"), SV("{:#Lo}"), 00); - test(SV("01"), SV("{:#Lo}"), 01); - test(SV("01,000,000,000"), SV("{:#Lo}"), 01'000'000'000); + test<"{:#Lo}">(SV("0"), 00); + test<"{:#Lo}">(SV("01"), 01); + test<"{:#Lo}">(SV("01,000,000,000"), 01'000'000'000); - test(SV("-1"), SV("{:Lo}"), -01); - test(SV("-1,000,000,000"), SV("{:Lo}"), -01'000'000'000); + test<"{:Lo}">(SV("-1"), -01); + test<"{:Lo}">(SV("-1,000,000,000"), -01'000'000'000); - test(SV("-01"), SV("{:#Lo}"), -01); - test(SV("-01,000,000,000"), SV("{:#Lo}"), -01'000'000'000); + test<"{:#Lo}">(SV("-01"), -01); + test<"{:#Lo}">(SV("-01,000,000,000"), -01'000'000'000); std::locale::global(loc); - test(SV("0"), SV("{:Lo}"), 00); - test(SV("1"), SV("{:Lo}"), 01); - test(SV("1_0_00_000_00_0"), SV("{:Lo}"), 01'000'000'000); + test<"{:Lo}">(SV("0"), 00); + test<"{:Lo}">(SV("1"), 01); + test<"{:Lo}">(SV("1_0_00_000_00_0"), 01'000'000'000); - test(SV("0"), SV("{:#Lo}"), 00); - test(SV("01"), SV("{:#Lo}"), 01); - test(SV("01_0_00_000_00_0"), SV("{:#Lo}"), 01'000'000'000); + test<"{:#Lo}">(SV("0"), 00); + test<"{:#Lo}">(SV("01"), 01); + test<"{:#Lo}">(SV("01_0_00_000_00_0"), 01'000'000'000); - test(SV("-1"), SV("{:Lo}"), -01); - test(SV("-1_0_00_000_00_0"), SV("{:Lo}"), -01'000'000'000); + test<"{:Lo}">(SV("-1"), -01); + test<"{:Lo}">(SV("-1_0_00_000_00_0"), -01'000'000'000); - test(SV("-01"), SV("{:#Lo}"), -01); - test(SV("-01_0_00_000_00_0"), SV("{:#Lo}"), -01'000'000'000); + test<"{:#Lo}">(SV("-01"), -01); + test<"{:#Lo}">(SV("-01_0_00_000_00_0"), -01'000'000'000); - test(SV("0"), en_US, SV("{:Lo}"), 00); - test(SV("1"), en_US, SV("{:Lo}"), 01); - test(SV("1,000,000,000"), en_US, SV("{:Lo}"), 01'000'000'000); + test<"{:Lo}">(SV("0"), en_US, 00); + test<"{:Lo}">(SV("1"), en_US, 01); + test<"{:Lo}">(SV("1,000,000,000"), en_US, 01'000'000'000); - test(SV("0"), en_US, SV("{:#Lo}"), 00); - test(SV("01"), en_US, SV("{:#Lo}"), 01); - test(SV("01,000,000,000"), en_US, SV("{:#Lo}"), 01'000'000'000); + test<"{:#Lo}">(SV("0"), en_US, 00); + test<"{:#Lo}">(SV("01"), en_US, 01); + test<"{:#Lo}">(SV("01,000,000,000"), en_US, 01'000'000'000); - test(SV("-1"), en_US, SV("{:Lo}"), -01); - test(SV("-1,000,000,000"), en_US, SV("{:Lo}"), -01'000'000'000); + test<"{:Lo}">(SV("-1"), en_US, -01); + test<"{:Lo}">(SV("-1,000,000,000"), en_US, -01'000'000'000); - test(SV("-01"), en_US, SV("{:#Lo}"), -01); - test(SV("-01,000,000,000"), en_US, SV("{:#Lo}"), -01'000'000'000); + test<"{:#Lo}">(SV("-01"), en_US, -01); + test<"{:#Lo}">(SV("-01,000,000,000"), en_US, -01'000'000'000); std::locale::global(en_US); - test(SV("0"), loc, SV("{:Lo}"), 00); - test(SV("1"), loc, SV("{:Lo}"), 01); - test(SV("1_0_00_000_00_0"), loc, SV("{:Lo}"), 01'000'000'000); + test<"{:Lo}">(SV("0"), loc, 00); + test<"{:Lo}">(SV("1"), loc, 01); + test<"{:Lo}">(SV("1_0_00_000_00_0"), loc, 01'000'000'000); - test(SV("0"), loc, SV("{:#Lo}"), 00); - test(SV("01"), loc, SV("{:#Lo}"), 01); - test(SV("01_0_00_000_00_0"), loc, SV("{:#Lo}"), 01'000'000'000); + test<"{:#Lo}">(SV("0"), loc, 00); + test<"{:#Lo}">(SV("01"), loc, 01); + test<"{:#Lo}">(SV("01_0_00_000_00_0"), loc, 01'000'000'000); - test(SV("-1"), loc, SV("{:Lo}"), -01); - test(SV("-1_0_00_000_00_0"), loc, SV("{:Lo}"), -01'000'000'000); + test<"{:Lo}">(SV("-1"), loc, -01); + test<"{:Lo}">(SV("-1_0_00_000_00_0"), loc, -01'000'000'000); - test(SV("-01"), loc, SV("{:#Lo}"), -01); - test(SV("-01_0_00_000_00_0"), loc, SV("{:#Lo}"), -01'000'000'000); + test<"{:#Lo}">(SV("-01"), loc, -01); + test<"{:#Lo}">(SV("-01_0_00_000_00_0"), loc, -01'000'000'000); // *** Hexadecimal *** std::locale::global(en_US); - test(SV("0"), SV("{:Lx}"), 0x0); - test(SV("1"), SV("{:Lx}"), 0x1); - test(SV("1,000,000,000"), SV("{:Lx}"), 0x1'000'000'000); + test<"{:Lx}">(SV("0"), 0x0); + test<"{:Lx}">(SV("1"), 0x1); + test<"{:Lx}">(SV("1,000,000,000"), 0x1'000'000'000); - test(SV("0x0"), SV("{:#Lx}"), 0x0); - test(SV("0x1"), SV("{:#Lx}"), 0x1); - test(SV("0x1,000,000,000"), SV("{:#Lx}"), 0x1'000'000'000); + test<"{:#Lx}">(SV("0x0"), 0x0); + test<"{:#Lx}">(SV("0x1"), 0x1); + test<"{:#Lx}">(SV("0x1,000,000,000"), 0x1'000'000'000); - test(SV("-1"), SV("{:LX}"), -0x1); - test(SV("-1,000,000,000"), SV("{:LX}"), -0x1'000'000'000); + test<"{:LX}">(SV("-1"), -0x1); + test<"{:LX}">(SV("-1,000,000,000"), -0x1'000'000'000); - test(SV("-0X1"), SV("{:#LX}"), -0x1); - test(SV("-0X1,000,000,000"), SV("{:#LX}"), -0x1'000'000'000); + test<"{:#LX}">(SV("-0X1"), -0x1); + test<"{:#LX}">(SV("-0X1,000,000,000"), -0x1'000'000'000); std::locale::global(loc); - test(SV("0"), SV("{:Lx}"), 0x0); - test(SV("1"), SV("{:Lx}"), 0x1); - test(SV("1_0_00_000_00_0"), SV("{:Lx}"), 0x1'000'000'000); + test<"{:Lx}">(SV("0"), 0x0); + test<"{:Lx}">(SV("1"), 0x1); + test<"{:Lx}">(SV("1_0_00_000_00_0"), 0x1'000'000'000); - test(SV("0x0"), SV("{:#Lx}"), 0x0); - test(SV("0x1"), SV("{:#Lx}"), 0x1); - test(SV("0x1_0_00_000_00_0"), SV("{:#Lx}"), 0x1'000'000'000); + test<"{:#Lx}">(SV("0x0"), 0x0); + test<"{:#Lx}">(SV("0x1"), 0x1); + test<"{:#Lx}">(SV("0x1_0_00_000_00_0"), 0x1'000'000'000); - test(SV("-1"), SV("{:LX}"), -0x1); - test(SV("-1_0_00_000_00_0"), SV("{:LX}"), -0x1'000'000'000); + test<"{:LX}">(SV("-1"), -0x1); + test<"{:LX}">(SV("-1_0_00_000_00_0"), -0x1'000'000'000); - test(SV("-0X1"), SV("{:#LX}"), -0x1); - test(SV("-0X1_0_00_000_00_0"), SV("{:#LX}"), -0x1'000'000'000); + test<"{:#LX}">(SV("-0X1"), -0x1); + test<"{:#LX}">(SV("-0X1_0_00_000_00_0"), -0x1'000'000'000); - test(SV("0"), en_US, SV("{:Lx}"), 0x0); - test(SV("1"), en_US, SV("{:Lx}"), 0x1); - test(SV("1,000,000,000"), en_US, SV("{:Lx}"), 0x1'000'000'000); + test<"{:Lx}">(SV("0"), en_US, 0x0); + test<"{:Lx}">(SV("1"), en_US, 0x1); + test<"{:Lx}">(SV("1,000,000,000"), en_US, 0x1'000'000'000); - test(SV("0x0"), en_US, SV("{:#Lx}"), 0x0); - test(SV("0x1"), en_US, SV("{:#Lx}"), 0x1); - test(SV("0x1,000,000,000"), en_US, SV("{:#Lx}"), 0x1'000'000'000); + test<"{:#Lx}">(SV("0x0"), en_US, 0x0); + test<"{:#Lx}">(SV("0x1"), en_US, 0x1); + test<"{:#Lx}">(SV("0x1,000,000,000"), en_US, 0x1'000'000'000); - test(SV("-1"), en_US, SV("{:LX}"), -0x1); - test(SV("-1,000,000,000"), en_US, SV("{:LX}"), -0x1'000'000'000); + test<"{:LX}">(SV("-1"), en_US, -0x1); + test<"{:LX}">(SV("-1,000,000,000"), en_US, -0x1'000'000'000); - test(SV("-0X1"), en_US, SV("{:#LX}"), -0x1); - test(SV("-0X1,000,000,000"), en_US, SV("{:#LX}"), -0x1'000'000'000); + test<"{:#LX}">(SV("-0X1"), en_US, -0x1); + test<"{:#LX}">(SV("-0X1,000,000,000"), en_US, -0x1'000'000'000); std::locale::global(en_US); - test(SV("0"), loc, SV("{:Lx}"), 0x0); - test(SV("1"), loc, SV("{:Lx}"), 0x1); - test(SV("1_0_00_000_00_0"), loc, SV("{:Lx}"), 0x1'000'000'000); + test<"{:Lx}">(SV("0"), loc, 0x0); + test<"{:Lx}">(SV("1"), loc, 0x1); + test<"{:Lx}">(SV("1_0_00_000_00_0"), loc, 0x1'000'000'000); - test(SV("0x0"), loc, SV("{:#Lx}"), 0x0); - test(SV("0x1"), loc, SV("{:#Lx}"), 0x1); - test(SV("0x1_0_00_000_00_0"), loc, SV("{:#Lx}"), 0x1'000'000'000); + test<"{:#Lx}">(SV("0x0"), loc, 0x0); + test<"{:#Lx}">(SV("0x1"), loc, 0x1); + test<"{:#Lx}">(SV("0x1_0_00_000_00_0"), loc, 0x1'000'000'000); - test(SV("-1"), loc, SV("{:LX}"), -0x1); - test(SV("-1_0_00_000_00_0"), loc, SV("{:LX}"), -0x1'000'000'000); + test<"{:LX}">(SV("-1"), loc, -0x1); + test<"{:LX}">(SV("-1_0_00_000_00_0"), loc, -0x1'000'000'000); - test(SV("-0X1"), loc, SV("{:#LX}"), -0x1); - test(SV("-0X1_0_00_000_00_0"), loc, SV("{:#LX}"), -0x1'000'000'000); + test<"{:#LX}">(SV("-0X1"), loc, -0x1); + test<"{:#LX}">(SV("-0X1_0_00_000_00_0"), loc, -0x1'000'000'000); // *** align-fill & width *** - test(SV("4_2"), loc, SV("{:L}"), 42); + test<"{:L}">(SV("4_2"), loc, 42); - test(SV(" 4_2"), loc, SV("{:6L}"), 42); - test(SV("4_2 "), loc, SV("{:<6L}"), 42); - test(SV(" 4_2 "), loc, SV("{:^6L}"), 42); - test(SV(" 4_2"), loc, SV("{:>6L}"), 42); + test<"{:6L}">(SV(" 4_2"), loc, 42); + test<"{:<6L}">(SV("4_2 "), loc, 42); + test<"{:^6L}">(SV(" 4_2 "), loc, 42); + test<"{:>6L}">(SV(" 4_2"), loc, 42); - test(SV("4_2***"), loc, SV("{:*<6L}"), 42); - test(SV("*4_2**"), loc, SV("{:*^6L}"), 42); - test(SV("***4_2"), loc, SV("{:*>6L}"), 42); + test<"{:*<6L}">(SV("4_2***"), loc, 42); + test<"{:*^6L}">(SV("*4_2**"), loc, 42); + test<"{:*>6L}">(SV("***4_2"), loc, 42); - test(SV("4_a*****"), loc, SV("{:*<8Lx}"), 0x4a); - test(SV("**4_a***"), loc, SV("{:*^8Lx}"), 0x4a); - test(SV("*****4_a"), loc, SV("{:*>8Lx}"), 0x4a); + test<"{:*<8Lx}">(SV("4_a*****"), loc, 0x4a); + test<"{:*^8Lx}">(SV("**4_a***"), loc, 0x4a); + test<"{:*>8Lx}">(SV("*****4_a"), loc, 0x4a); - test(SV("0x4_a***"), loc, SV("{:*<#8Lx}"), 0x4a); - test(SV("*0x4_a**"), loc, SV("{:*^#8Lx}"), 0x4a); - test(SV("***0x4_a"), loc, SV("{:*>#8Lx}"), 0x4a); + test<"{:*<#8Lx}">(SV("0x4_a***"), loc, 0x4a); + test<"{:*^#8Lx}">(SV("*0x4_a**"), loc, 0x4a); + test<"{:*>#8Lx}">(SV("***0x4_a"), loc, 0x4a); - test(SV("4_A*****"), loc, SV("{:*<8LX}"), 0x4a); - test(SV("**4_A***"), loc, SV("{:*^8LX}"), 0x4a); - test(SV("*****4_A"), loc, SV("{:*>8LX}"), 0x4a); + test<"{:*<8LX}">(SV("4_A*****"), loc, 0x4a); + test<"{:*^8LX}">(SV("**4_A***"), loc, 0x4a); + test<"{:*>8LX}">(SV("*****4_A"), loc, 0x4a); - test(SV("0X4_A***"), loc, SV("{:*<#8LX}"), 0x4a); - test(SV("*0X4_A**"), loc, SV("{:*^#8LX}"), 0x4a); - test(SV("***0X4_A"), loc, SV("{:*>#8LX}"), 0x4a); + test<"{:*<#8LX}">(SV("0X4_A***"), loc, 0x4a); + test<"{:*^#8LX}">(SV("*0X4_A**"), loc, 0x4a); + test<"{:*>#8LX}">(SV("***0X4_A"), loc, 0x4a); // Test whether zero padding is ignored - test(SV("4_2 "), loc, SV("{:<06L}"), 42); - test(SV(" 4_2 "), loc, SV("{:^06L}"), 42); - test(SV(" 4_2"), loc, SV("{:>06L}"), 42); + test<"{:<06L}">(SV("4_2 "), loc, 42); + test<"{:^06L}">(SV(" 4_2 "), loc, 42); + test<"{:>06L}">(SV(" 4_2"), loc, 42); // *** zero-padding & width *** - test(SV(" 4_2"), loc, SV("{:6L}"), 42); - test(SV("0004_2"), loc, SV("{:06L}"), 42); - test(SV("-004_2"), loc, SV("{:06L}"), -42); + test<"{:6L}">(SV(" 4_2"), loc, 42); + test<"{:06L}">(SV("0004_2"), loc, 42); + test<"{:06L}">(SV("-004_2"), loc, -42); - test(SV("000004_a"), loc, SV("{:08Lx}"), 0x4a); - test(SV("0x0004_a"), loc, SV("{:#08Lx}"), 0x4a); - test(SV("0X0004_A"), loc, SV("{:#08LX}"), 0x4a); + test<"{:08Lx}">(SV("000004_a"), loc, 0x4a); + test<"{:#08Lx}">(SV("0x0004_a"), loc, 0x4a); + test<"{:#08LX}">(SV("0X0004_A"), loc, 0x4a); - test(SV("-00004_a"), loc, SV("{:08Lx}"), -0x4a); - test(SV("-0x004_a"), loc, SV("{:#08Lx}"), -0x4a); - test(SV("-0X004_A"), loc, SV("{:#08LX}"), -0x4a); + test<"{:08Lx}">(SV("-00004_a"), loc, -0x4a); + test<"{:#08Lx}">(SV("-0x004_a"), loc, -0x4a); + test<"{:#08LX}">(SV("-0X004_A"), loc, -0x4a); } template @@ -608,83 +612,83 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.23456p-3"), SV("{:La}"), F(0x1.23456p-3)); - test(SV("1.23456p-2"), SV("{:La}"), F(0x1.23456p-2)); - test(SV("1.23456p-1"), SV("{:La}"), F(0x1.23456p-1)); - test(SV("1.23456p+0"), SV("{:La}"), F(0x1.23456p0)); - test(SV("1.23456p+1"), SV("{:La}"), F(0x1.23456p+1)); - test(SV("1.23456p+2"), SV("{:La}"), F(0x1.23456p+2)); - test(SV("1.23456p+3"), SV("{:La}"), F(0x1.23456p+3)); - test(SV("1.23456p+20"), SV("{:La}"), F(0x1.23456p+20)); + test<"{:La}">(SV("1.23456p-3"), F(0x1.23456p-3)); + test<"{:La}">(SV("1.23456p-2"), F(0x1.23456p-2)); + test<"{:La}">(SV("1.23456p-1"), F(0x1.23456p-1)); + test<"{:La}">(SV("1.23456p+0"), F(0x1.23456p0)); + test<"{:La}">(SV("1.23456p+1"), F(0x1.23456p+1)); + test<"{:La}">(SV("1.23456p+2"), F(0x1.23456p+2)); + test<"{:La}">(SV("1.23456p+3"), F(0x1.23456p+3)); + test<"{:La}">(SV("1.23456p+20"), F(0x1.23456p+20)); std::locale::global(loc); - test(SV("1#23456p-3"), SV("{:La}"), F(0x1.23456p-3)); - test(SV("1#23456p-2"), SV("{:La}"), F(0x1.23456p-2)); - test(SV("1#23456p-1"), SV("{:La}"), F(0x1.23456p-1)); - test(SV("1#23456p+0"), SV("{:La}"), F(0x1.23456p0)); - test(SV("1#23456p+1"), SV("{:La}"), F(0x1.23456p+1)); - test(SV("1#23456p+2"), SV("{:La}"), F(0x1.23456p+2)); - test(SV("1#23456p+3"), SV("{:La}"), F(0x1.23456p+3)); - test(SV("1#23456p+20"), SV("{:La}"), F(0x1.23456p+20)); - - test(SV("1.23456p-3"), en_US, SV("{:La}"), F(0x1.23456p-3)); - test(SV("1.23456p-2"), en_US, SV("{:La}"), F(0x1.23456p-2)); - test(SV("1.23456p-1"), en_US, SV("{:La}"), F(0x1.23456p-1)); - test(SV("1.23456p+0"), en_US, SV("{:La}"), F(0x1.23456p0)); - test(SV("1.23456p+1"), en_US, SV("{:La}"), F(0x1.23456p+1)); - test(SV("1.23456p+2"), en_US, SV("{:La}"), F(0x1.23456p+2)); - test(SV("1.23456p+3"), en_US, SV("{:La}"), F(0x1.23456p+3)); - test(SV("1.23456p+20"), en_US, SV("{:La}"), F(0x1.23456p+20)); + test<"{:La}">(SV("1#23456p-3"), F(0x1.23456p-3)); + test<"{:La}">(SV("1#23456p-2"), F(0x1.23456p-2)); + test<"{:La}">(SV("1#23456p-1"), F(0x1.23456p-1)); + test<"{:La}">(SV("1#23456p+0"), F(0x1.23456p0)); + test<"{:La}">(SV("1#23456p+1"), F(0x1.23456p+1)); + test<"{:La}">(SV("1#23456p+2"), F(0x1.23456p+2)); + test<"{:La}">(SV("1#23456p+3"), F(0x1.23456p+3)); + test<"{:La}">(SV("1#23456p+20"), F(0x1.23456p+20)); + + test<"{:La}">(SV("1.23456p-3"), en_US, F(0x1.23456p-3)); + test<"{:La}">(SV("1.23456p-2"), en_US, F(0x1.23456p-2)); + test<"{:La}">(SV("1.23456p-1"), en_US, F(0x1.23456p-1)); + test<"{:La}">(SV("1.23456p+0"), en_US, F(0x1.23456p0)); + test<"{:La}">(SV("1.23456p+1"), en_US, F(0x1.23456p+1)); + test<"{:La}">(SV("1.23456p+2"), en_US, F(0x1.23456p+2)); + test<"{:La}">(SV("1.23456p+3"), en_US, F(0x1.23456p+3)); + test<"{:La}">(SV("1.23456p+20"), en_US, F(0x1.23456p+20)); std::locale::global(en_US); - test(SV("1#23456p-3"), loc, SV("{:La}"), F(0x1.23456p-3)); - test(SV("1#23456p-2"), loc, SV("{:La}"), F(0x1.23456p-2)); - test(SV("1#23456p-1"), loc, SV("{:La}"), F(0x1.23456p-1)); - test(SV("1#23456p+0"), loc, SV("{:La}"), F(0x1.23456p0)); - test(SV("1#23456p+1"), loc, SV("{:La}"), F(0x1.23456p+1)); - test(SV("1#23456p+2"), loc, SV("{:La}"), F(0x1.23456p+2)); - test(SV("1#23456p+3"), loc, SV("{:La}"), F(0x1.23456p+3)); - test(SV("1#23456p+20"), loc, SV("{:La}"), F(0x1.23456p+20)); + test<"{:La}">(SV("1#23456p-3"), loc, F(0x1.23456p-3)); + test<"{:La}">(SV("1#23456p-2"), loc, F(0x1.23456p-2)); + test<"{:La}">(SV("1#23456p-1"), loc, F(0x1.23456p-1)); + test<"{:La}">(SV("1#23456p+0"), loc, F(0x1.23456p0)); + test<"{:La}">(SV("1#23456p+1"), loc, F(0x1.23456p+1)); + test<"{:La}">(SV("1#23456p+2"), loc, F(0x1.23456p+2)); + test<"{:La}">(SV("1#23456p+3"), loc, F(0x1.23456p+3)); + test<"{:La}">(SV("1#23456p+20"), loc, F(0x1.23456p+20)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1.23456p+3$$$"), SV("{:$<13La}"), F(0x1.23456p3)); - test(SV("$$$1.23456p+3"), SV("{:$>13La}"), F(0x1.23456p3)); - test(SV("$1.23456p+3$$"), SV("{:$^13La}"), F(0x1.23456p3)); - test(SV("0001.23456p+3"), SV("{:013La}"), F(0x1.23456p3)); - test(SV("-1.23456p+3$$$"), SV("{:$<14La}"), F(-0x1.23456p3)); - test(SV("$$$-1.23456p+3"), SV("{:$>14La}"), F(-0x1.23456p3)); - test(SV("$-1.23456p+3$$"), SV("{:$^14La}"), F(-0x1.23456p3)); - test(SV("-0001.23456p+3"), SV("{:014La}"), F(-0x1.23456p3)); + test<"{:$<13La}">(SV("1.23456p+3$$$"), F(0x1.23456p3)); + test<"{:$>13La}">(SV("$$$1.23456p+3"), F(0x1.23456p3)); + test<"{:$^13La}">(SV("$1.23456p+3$$"), F(0x1.23456p3)); + test<"{:013La}">(SV("0001.23456p+3"), F(0x1.23456p3)); + test<"{:$<14La}">(SV("-1.23456p+3$$$"), F(-0x1.23456p3)); + test<"{:$>14La}">(SV("$$$-1.23456p+3"), F(-0x1.23456p3)); + test<"{:$^14La}">(SV("$-1.23456p+3$$"), F(-0x1.23456p3)); + test<"{:014La}">(SV("-0001.23456p+3"), F(-0x1.23456p3)); std::locale::global(loc); - test(SV("1#23456p+3$$$"), SV("{:$<13La}"), F(0x1.23456p3)); - test(SV("$$$1#23456p+3"), SV("{:$>13La}"), F(0x1.23456p3)); - test(SV("$1#23456p+3$$"), SV("{:$^13La}"), F(0x1.23456p3)); - test(SV("0001#23456p+3"), SV("{:013La}"), F(0x1.23456p3)); - test(SV("-1#23456p+3$$$"), SV("{:$<14La}"), F(-0x1.23456p3)); - test(SV("$$$-1#23456p+3"), SV("{:$>14La}"), F(-0x1.23456p3)); - test(SV("$-1#23456p+3$$"), SV("{:$^14La}"), F(-0x1.23456p3)); - test(SV("-0001#23456p+3"), SV("{:014La}"), F(-0x1.23456p3)); - - test(SV("1.23456p+3$$$"), en_US, SV("{:$<13La}"), F(0x1.23456p3)); - test(SV("$$$1.23456p+3"), en_US, SV("{:$>13La}"), F(0x1.23456p3)); - test(SV("$1.23456p+3$$"), en_US, SV("{:$^13La}"), F(0x1.23456p3)); - test(SV("0001.23456p+3"), en_US, SV("{:013La}"), F(0x1.23456p3)); - test(SV("-1.23456p+3$$$"), en_US, SV("{:$<14La}"), F(-0x1.23456p3)); - test(SV("$$$-1.23456p+3"), en_US, SV("{:$>14La}"), F(-0x1.23456p3)); - test(SV("$-1.23456p+3$$"), en_US, SV("{:$^14La}"), F(-0x1.23456p3)); - test(SV("-0001.23456p+3"), en_US, SV("{:014La}"), F(-0x1.23456p3)); + test<"{:$<13La}">(SV("1#23456p+3$$$"), F(0x1.23456p3)); + test<"{:$>13La}">(SV("$$$1#23456p+3"), F(0x1.23456p3)); + test<"{:$^13La}">(SV("$1#23456p+3$$"), F(0x1.23456p3)); + test<"{:013La}">(SV("0001#23456p+3"), F(0x1.23456p3)); + test<"{:$<14La}">(SV("-1#23456p+3$$$"), F(-0x1.23456p3)); + test<"{:$>14La}">(SV("$$$-1#23456p+3"), F(-0x1.23456p3)); + test<"{:$^14La}">(SV("$-1#23456p+3$$"), F(-0x1.23456p3)); + test<"{:014La}">(SV("-0001#23456p+3"), F(-0x1.23456p3)); + + test<"{:$<13La}">(SV("1.23456p+3$$$"), en_US, F(0x1.23456p3)); + test<"{:$>13La}">(SV("$$$1.23456p+3"), en_US, F(0x1.23456p3)); + test<"{:$^13La}">(SV("$1.23456p+3$$"), en_US, F(0x1.23456p3)); + test<"{:013La}">(SV("0001.23456p+3"), en_US, F(0x1.23456p3)); + test<"{:$<14La}">(SV("-1.23456p+3$$$"), en_US, F(-0x1.23456p3)); + test<"{:$>14La}">(SV("$$$-1.23456p+3"), en_US, F(-0x1.23456p3)); + test<"{:$^14La}">(SV("$-1.23456p+3$$"), en_US, F(-0x1.23456p3)); + test<"{:014La}">(SV("-0001.23456p+3"), en_US, F(-0x1.23456p3)); std::locale::global(en_US); - test(SV("1#23456p+3$$$"), loc, SV("{:$<13La}"), F(0x1.23456p3)); - test(SV("$$$1#23456p+3"), loc, SV("{:$>13La}"), F(0x1.23456p3)); - test(SV("$1#23456p+3$$"), loc, SV("{:$^13La}"), F(0x1.23456p3)); - test(SV("0001#23456p+3"), loc, SV("{:013La}"), F(0x1.23456p3)); - test(SV("-1#23456p+3$$$"), loc, SV("{:$<14La}"), F(-0x1.23456p3)); - test(SV("$$$-1#23456p+3"), loc, SV("{:$>14La}"), F(-0x1.23456p3)); - test(SV("$-1#23456p+3$$"), loc, SV("{:$^14La}"), F(-0x1.23456p3)); - test(SV("-0001#23456p+3"), loc, SV("{:014La}"), F(-0x1.23456p3)); + test<"{:$<13La}">(SV("1#23456p+3$$$"), loc, F(0x1.23456p3)); + test<"{:$>13La}">(SV("$$$1#23456p+3"), loc, F(0x1.23456p3)); + test<"{:$^13La}">(SV("$1#23456p+3$$"), loc, F(0x1.23456p3)); + test<"{:013La}">(SV("0001#23456p+3"), loc, F(0x1.23456p3)); + test<"{:$<14La}">(SV("-1#23456p+3$$$"), loc, F(-0x1.23456p3)); + test<"{:$>14La}">(SV("$$$-1#23456p+3"), loc, F(-0x1.23456p3)); + test<"{:$^14La}">(SV("$-1#23456p+3$$"), loc, F(-0x1.23456p3)); + test<"{:014La}">(SV("-0001#23456p+3"), loc, F(-0x1.23456p3)); } template @@ -694,83 +698,83 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.23456P-3"), SV("{:LA}"), F(0x1.23456p-3)); - test(SV("1.23456P-2"), SV("{:LA}"), F(0x1.23456p-2)); - test(SV("1.23456P-1"), SV("{:LA}"), F(0x1.23456p-1)); - test(SV("1.23456P+0"), SV("{:LA}"), F(0x1.23456p0)); - test(SV("1.23456P+1"), SV("{:LA}"), F(0x1.23456p+1)); - test(SV("1.23456P+2"), SV("{:LA}"), F(0x1.23456p+2)); - test(SV("1.23456P+3"), SV("{:LA}"), F(0x1.23456p+3)); - test(SV("1.23456P+20"), SV("{:LA}"), F(0x1.23456p+20)); + test<"{:LA}">(SV("1.23456P-3"), F(0x1.23456p-3)); + test<"{:LA}">(SV("1.23456P-2"), F(0x1.23456p-2)); + test<"{:LA}">(SV("1.23456P-1"), F(0x1.23456p-1)); + test<"{:LA}">(SV("1.23456P+0"), F(0x1.23456p0)); + test<"{:LA}">(SV("1.23456P+1"), F(0x1.23456p+1)); + test<"{:LA}">(SV("1.23456P+2"), F(0x1.23456p+2)); + test<"{:LA}">(SV("1.23456P+3"), F(0x1.23456p+3)); + test<"{:LA}">(SV("1.23456P+20"), F(0x1.23456p+20)); std::locale::global(loc); - test(SV("1#23456P-3"), SV("{:LA}"), F(0x1.23456p-3)); - test(SV("1#23456P-2"), SV("{:LA}"), F(0x1.23456p-2)); - test(SV("1#23456P-1"), SV("{:LA}"), F(0x1.23456p-1)); - test(SV("1#23456P+0"), SV("{:LA}"), F(0x1.23456p0)); - test(SV("1#23456P+1"), SV("{:LA}"), F(0x1.23456p+1)); - test(SV("1#23456P+2"), SV("{:LA}"), F(0x1.23456p+2)); - test(SV("1#23456P+3"), SV("{:LA}"), F(0x1.23456p+3)); - test(SV("1#23456P+20"), SV("{:LA}"), F(0x1.23456p+20)); - - test(SV("1.23456P-3"), en_US, SV("{:LA}"), F(0x1.23456p-3)); - test(SV("1.23456P-2"), en_US, SV("{:LA}"), F(0x1.23456p-2)); - test(SV("1.23456P-1"), en_US, SV("{:LA}"), F(0x1.23456p-1)); - test(SV("1.23456P+0"), en_US, SV("{:LA}"), F(0x1.23456p0)); - test(SV("1.23456P+1"), en_US, SV("{:LA}"), F(0x1.23456p+1)); - test(SV("1.23456P+2"), en_US, SV("{:LA}"), F(0x1.23456p+2)); - test(SV("1.23456P+3"), en_US, SV("{:LA}"), F(0x1.23456p+3)); - test(SV("1.23456P+20"), en_US, SV("{:LA}"), F(0x1.23456p+20)); + test<"{:LA}">(SV("1#23456P-3"), F(0x1.23456p-3)); + test<"{:LA}">(SV("1#23456P-2"), F(0x1.23456p-2)); + test<"{:LA}">(SV("1#23456P-1"), F(0x1.23456p-1)); + test<"{:LA}">(SV("1#23456P+0"), F(0x1.23456p0)); + test<"{:LA}">(SV("1#23456P+1"), F(0x1.23456p+1)); + test<"{:LA}">(SV("1#23456P+2"), F(0x1.23456p+2)); + test<"{:LA}">(SV("1#23456P+3"), F(0x1.23456p+3)); + test<"{:LA}">(SV("1#23456P+20"), F(0x1.23456p+20)); + + test<"{:LA}">(SV("1.23456P-3"), en_US, F(0x1.23456p-3)); + test<"{:LA}">(SV("1.23456P-2"), en_US, F(0x1.23456p-2)); + test<"{:LA}">(SV("1.23456P-1"), en_US, F(0x1.23456p-1)); + test<"{:LA}">(SV("1.23456P+0"), en_US, F(0x1.23456p0)); + test<"{:LA}">(SV("1.23456P+1"), en_US, F(0x1.23456p+1)); + test<"{:LA}">(SV("1.23456P+2"), en_US, F(0x1.23456p+2)); + test<"{:LA}">(SV("1.23456P+3"), en_US, F(0x1.23456p+3)); + test<"{:LA}">(SV("1.23456P+20"), en_US, F(0x1.23456p+20)); std::locale::global(en_US); - test(SV("1#23456P-3"), loc, SV("{:LA}"), F(0x1.23456p-3)); - test(SV("1#23456P-2"), loc, SV("{:LA}"), F(0x1.23456p-2)); - test(SV("1#23456P-1"), loc, SV("{:LA}"), F(0x1.23456p-1)); - test(SV("1#23456P+0"), loc, SV("{:LA}"), F(0x1.23456p0)); - test(SV("1#23456P+1"), loc, SV("{:LA}"), F(0x1.23456p+1)); - test(SV("1#23456P+2"), loc, SV("{:LA}"), F(0x1.23456p+2)); - test(SV("1#23456P+3"), loc, SV("{:LA}"), F(0x1.23456p+3)); - test(SV("1#23456P+20"), loc, SV("{:LA}"), F(0x1.23456p+20)); + test<"{:LA}">(SV("1#23456P-3"), loc, F(0x1.23456p-3)); + test<"{:LA}">(SV("1#23456P-2"), loc, F(0x1.23456p-2)); + test<"{:LA}">(SV("1#23456P-1"), loc, F(0x1.23456p-1)); + test<"{:LA}">(SV("1#23456P+0"), loc, F(0x1.23456p0)); + test<"{:LA}">(SV("1#23456P+1"), loc, F(0x1.23456p+1)); + test<"{:LA}">(SV("1#23456P+2"), loc, F(0x1.23456p+2)); + test<"{:LA}">(SV("1#23456P+3"), loc, F(0x1.23456p+3)); + test<"{:LA}">(SV("1#23456P+20"), loc, F(0x1.23456p+20)); // *** Fill, align, zero Padding *** std::locale::global(en_US); - test(SV("1.23456P+3$$$"), SV("{:$<13LA}"), F(0x1.23456p3)); - test(SV("$$$1.23456P+3"), SV("{:$>13LA}"), F(0x1.23456p3)); - test(SV("$1.23456P+3$$"), SV("{:$^13LA}"), F(0x1.23456p3)); - test(SV("0001.23456P+3"), SV("{:013LA}"), F(0x1.23456p3)); - test(SV("-1.23456P+3$$$"), SV("{:$<14LA}"), F(-0x1.23456p3)); - test(SV("$$$-1.23456P+3"), SV("{:$>14LA}"), F(-0x1.23456p3)); - test(SV("$-1.23456P+3$$"), SV("{:$^14LA}"), F(-0x1.23456p3)); - test(SV("-0001.23456P+3"), SV("{:014LA}"), F(-0x1.23456p3)); + test<"{:$<13LA}">(SV("1.23456P+3$$$"), F(0x1.23456p3)); + test<"{:$>13LA}">(SV("$$$1.23456P+3"), F(0x1.23456p3)); + test<"{:$^13LA}">(SV("$1.23456P+3$$"), F(0x1.23456p3)); + test<"{:013LA}">(SV("0001.23456P+3"), F(0x1.23456p3)); + test<"{:$<14LA}">(SV("-1.23456P+3$$$"), F(-0x1.23456p3)); + test<"{:$>14LA}">(SV("$$$-1.23456P+3"), F(-0x1.23456p3)); + test<"{:$^14LA}">(SV("$-1.23456P+3$$"), F(-0x1.23456p3)); + test<"{:014LA}">(SV("-0001.23456P+3"), F(-0x1.23456p3)); std::locale::global(loc); - test(SV("1#23456P+3$$$"), SV("{:$<13LA}"), F(0x1.23456p3)); - test(SV("$$$1#23456P+3"), SV("{:$>13LA}"), F(0x1.23456p3)); - test(SV("$1#23456P+3$$"), SV("{:$^13LA}"), F(0x1.23456p3)); - test(SV("0001#23456P+3"), SV("{:013LA}"), F(0x1.23456p3)); - test(SV("-1#23456P+3$$$"), SV("{:$<14LA}"), F(-0x1.23456p3)); - test(SV("$$$-1#23456P+3"), SV("{:$>14LA}"), F(-0x1.23456p3)); - test(SV("$-1#23456P+3$$"), SV("{:$^14LA}"), F(-0x1.23456p3)); - test(SV("-0001#23456P+3"), SV("{:014LA}"), F(-0x1.23456p3)); - - test(SV("1.23456P+3$$$"), en_US, SV("{:$<13LA}"), F(0x1.23456p3)); - test(SV("$$$1.23456P+3"), en_US, SV("{:$>13LA}"), F(0x1.23456p3)); - test(SV("$1.23456P+3$$"), en_US, SV("{:$^13LA}"), F(0x1.23456p3)); - test(SV("0001.23456P+3"), en_US, SV("{:013LA}"), F(0x1.23456p3)); - test(SV("-1.23456P+3$$$"), en_US, SV("{:$<14LA}"), F(-0x1.23456p3)); - test(SV("$$$-1.23456P+3"), en_US, SV("{:$>14LA}"), F(-0x1.23456p3)); - test(SV("$-1.23456P+3$$"), en_US, SV("{:$^14LA}"), F(-0x1.23456p3)); - test(SV("-0001.23456P+3"), en_US, SV("{:014LA}"), F(-0x1.23456p3)); + test<"{:$<13LA}">(SV("1#23456P+3$$$"), F(0x1.23456p3)); + test<"{:$>13LA}">(SV("$$$1#23456P+3"), F(0x1.23456p3)); + test<"{:$^13LA}">(SV("$1#23456P+3$$"), F(0x1.23456p3)); + test<"{:013LA}">(SV("0001#23456P+3"), F(0x1.23456p3)); + test<"{:$<14LA}">(SV("-1#23456P+3$$$"), F(-0x1.23456p3)); + test<"{:$>14LA}">(SV("$$$-1#23456P+3"), F(-0x1.23456p3)); + test<"{:$^14LA}">(SV("$-1#23456P+3$$"), F(-0x1.23456p3)); + test<"{:014LA}">(SV("-0001#23456P+3"), F(-0x1.23456p3)); + + test<"{:$<13LA}">(SV("1.23456P+3$$$"), en_US, F(0x1.23456p3)); + test<"{:$>13LA}">(SV("$$$1.23456P+3"), en_US, F(0x1.23456p3)); + test<"{:$^13LA}">(SV("$1.23456P+3$$"), en_US, F(0x1.23456p3)); + test<"{:013LA}">(SV("0001.23456P+3"), en_US, F(0x1.23456p3)); + test<"{:$<14LA}">(SV("-1.23456P+3$$$"), en_US, F(-0x1.23456p3)); + test<"{:$>14LA}">(SV("$$$-1.23456P+3"), en_US, F(-0x1.23456p3)); + test<"{:$^14LA}">(SV("$-1.23456P+3$$"), en_US, F(-0x1.23456p3)); + test<"{:014LA}">(SV("-0001.23456P+3"), en_US, F(-0x1.23456p3)); std::locale::global(en_US); - test(SV("1#23456P+3$$$"), loc, SV("{:$<13LA}"), F(0x1.23456p3)); - test(SV("$$$1#23456P+3"), loc, SV("{:$>13LA}"), F(0x1.23456p3)); - test(SV("$1#23456P+3$$"), loc, SV("{:$^13LA}"), F(0x1.23456p3)); - test(SV("0001#23456P+3"), loc, SV("{:013LA}"), F(0x1.23456p3)); - test(SV("-1#23456P+3$$$"), loc, SV("{:$<14LA}"), F(-0x1.23456p3)); - test(SV("$$$-1#23456P+3"), loc, SV("{:$>14LA}"), F(-0x1.23456p3)); - test(SV("$-1#23456P+3$$"), loc, SV("{:$^14LA}"), F(-0x1.23456p3)); - test(SV("-0001#23456P+3"), loc, SV("{:014LA}"), F(-0x1.23456p3)); + test<"{:$<13LA}">(SV("1#23456P+3$$$"), loc, F(0x1.23456p3)); + test<"{:$>13LA}">(SV("$$$1#23456P+3"), loc, F(0x1.23456p3)); + test<"{:$^13LA}">(SV("$1#23456P+3$$"), loc, F(0x1.23456p3)); + test<"{:013LA}">(SV("0001#23456P+3"), loc, F(0x1.23456p3)); + test<"{:$<14LA}">(SV("-1#23456P+3$$$"), loc, F(-0x1.23456p3)); + test<"{:$>14LA}">(SV("$$$-1#23456P+3"), loc, F(-0x1.23456p3)); + test<"{:$^14LA}">(SV("$-1#23456P+3$$"), loc, F(-0x1.23456p3)); + test<"{:014LA}">(SV("-0001#23456P+3"), loc, F(-0x1.23456p3)); } template @@ -780,83 +784,83 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.234560p-3"), SV("{:.6La}"), F(0x1.23456p-3)); - test(SV("1.234560p-2"), SV("{:.6La}"), F(0x1.23456p-2)); - test(SV("1.234560p-1"), SV("{:.6La}"), F(0x1.23456p-1)); - test(SV("1.234560p+0"), SV("{:.6La}"), F(0x1.23456p0)); - test(SV("1.234560p+1"), SV("{:.6La}"), F(0x1.23456p+1)); - test(SV("1.234560p+2"), SV("{:.6La}"), F(0x1.23456p+2)); - test(SV("1.234560p+3"), SV("{:.6La}"), F(0x1.23456p+3)); - test(SV("1.234560p+20"), SV("{:.6La}"), F(0x1.23456p+20)); + test<"{:.6La}">(SV("1.234560p-3"), F(0x1.23456p-3)); + test<"{:.6La}">(SV("1.234560p-2"), F(0x1.23456p-2)); + test<"{:.6La}">(SV("1.234560p-1"), F(0x1.23456p-1)); + test<"{:.6La}">(SV("1.234560p+0"), F(0x1.23456p0)); + test<"{:.6La}">(SV("1.234560p+1"), F(0x1.23456p+1)); + test<"{:.6La}">(SV("1.234560p+2"), F(0x1.23456p+2)); + test<"{:.6La}">(SV("1.234560p+3"), F(0x1.23456p+3)); + test<"{:.6La}">(SV("1.234560p+20"), F(0x1.23456p+20)); std::locale::global(loc); - test(SV("1#234560p-3"), SV("{:.6La}"), F(0x1.23456p-3)); - test(SV("1#234560p-2"), SV("{:.6La}"), F(0x1.23456p-2)); - test(SV("1#234560p-1"), SV("{:.6La}"), F(0x1.23456p-1)); - test(SV("1#234560p+0"), SV("{:.6La}"), F(0x1.23456p0)); - test(SV("1#234560p+1"), SV("{:.6La}"), F(0x1.23456p+1)); - test(SV("1#234560p+2"), SV("{:.6La}"), F(0x1.23456p+2)); - test(SV("1#234560p+3"), SV("{:.6La}"), F(0x1.23456p+3)); - test(SV("1#234560p+20"), SV("{:.6La}"), F(0x1.23456p+20)); - - test(SV("1.234560p-3"), en_US, SV("{:.6La}"), F(0x1.23456p-3)); - test(SV("1.234560p-2"), en_US, SV("{:.6La}"), F(0x1.23456p-2)); - test(SV("1.234560p-1"), en_US, SV("{:.6La}"), F(0x1.23456p-1)); - test(SV("1.234560p+0"), en_US, SV("{:.6La}"), F(0x1.23456p0)); - test(SV("1.234560p+1"), en_US, SV("{:.6La}"), F(0x1.23456p+1)); - test(SV("1.234560p+2"), en_US, SV("{:.6La}"), F(0x1.23456p+2)); - test(SV("1.234560p+3"), en_US, SV("{:.6La}"), F(0x1.23456p+3)); - test(SV("1.234560p+20"), en_US, SV("{:.6La}"), F(0x1.23456p+20)); + test<"{:.6La}">(SV("1#234560p-3"), F(0x1.23456p-3)); + test<"{:.6La}">(SV("1#234560p-2"), F(0x1.23456p-2)); + test<"{:.6La}">(SV("1#234560p-1"), F(0x1.23456p-1)); + test<"{:.6La}">(SV("1#234560p+0"), F(0x1.23456p0)); + test<"{:.6La}">(SV("1#234560p+1"), F(0x1.23456p+1)); + test<"{:.6La}">(SV("1#234560p+2"), F(0x1.23456p+2)); + test<"{:.6La}">(SV("1#234560p+3"), F(0x1.23456p+3)); + test<"{:.6La}">(SV("1#234560p+20"), F(0x1.23456p+20)); + + test<"{:.6La}">(SV("1.234560p-3"), en_US, F(0x1.23456p-3)); + test<"{:.6La}">(SV("1.234560p-2"), en_US, F(0x1.23456p-2)); + test<"{:.6La}">(SV("1.234560p-1"), en_US, F(0x1.23456p-1)); + test<"{:.6La}">(SV("1.234560p+0"), en_US, F(0x1.23456p0)); + test<"{:.6La}">(SV("1.234560p+1"), en_US, F(0x1.23456p+1)); + test<"{:.6La}">(SV("1.234560p+2"), en_US, F(0x1.23456p+2)); + test<"{:.6La}">(SV("1.234560p+3"), en_US, F(0x1.23456p+3)); + test<"{:.6La}">(SV("1.234560p+20"), en_US, F(0x1.23456p+20)); std::locale::global(en_US); - test(SV("1#234560p-3"), loc, SV("{:.6La}"), F(0x1.23456p-3)); - test(SV("1#234560p-2"), loc, SV("{:.6La}"), F(0x1.23456p-2)); - test(SV("1#234560p-1"), loc, SV("{:.6La}"), F(0x1.23456p-1)); - test(SV("1#234560p+0"), loc, SV("{:.6La}"), F(0x1.23456p0)); - test(SV("1#234560p+1"), loc, SV("{:.6La}"), F(0x1.23456p+1)); - test(SV("1#234560p+2"), loc, SV("{:.6La}"), F(0x1.23456p+2)); - test(SV("1#234560p+3"), loc, SV("{:.6La}"), F(0x1.23456p+3)); - test(SV("1#234560p+20"), loc, SV("{:.6La}"), F(0x1.23456p+20)); + test<"{:.6La}">(SV("1#234560p-3"), loc, F(0x1.23456p-3)); + test<"{:.6La}">(SV("1#234560p-2"), loc, F(0x1.23456p-2)); + test<"{:.6La}">(SV("1#234560p-1"), loc, F(0x1.23456p-1)); + test<"{:.6La}">(SV("1#234560p+0"), loc, F(0x1.23456p0)); + test<"{:.6La}">(SV("1#234560p+1"), loc, F(0x1.23456p+1)); + test<"{:.6La}">(SV("1#234560p+2"), loc, F(0x1.23456p+2)); + test<"{:.6La}">(SV("1#234560p+3"), loc, F(0x1.23456p+3)); + test<"{:.6La}">(SV("1#234560p+20"), loc, F(0x1.23456p+20)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1.234560p+3$$$"), SV("{:$<14.6La}"), F(0x1.23456p3)); - test(SV("$$$1.234560p+3"), SV("{:$>14.6La}"), F(0x1.23456p3)); - test(SV("$1.234560p+3$$"), SV("{:$^14.6La}"), F(0x1.23456p3)); - test(SV("0001.234560p+3"), SV("{:014.6La}"), F(0x1.23456p3)); - test(SV("-1.234560p+3$$$"), SV("{:$<15.6La}"), F(-0x1.23456p3)); - test(SV("$$$-1.234560p+3"), SV("{:$>15.6La}"), F(-0x1.23456p3)); - test(SV("$-1.234560p+3$$"), SV("{:$^15.6La}"), F(-0x1.23456p3)); - test(SV("-0001.234560p+3"), SV("{:015.6La}"), F(-0x1.23456p3)); + test<"{:$<14.6La}">(SV("1.234560p+3$$$"), F(0x1.23456p3)); + test<"{:$>14.6La}">(SV("$$$1.234560p+3"), F(0x1.23456p3)); + test<"{:$^14.6La}">(SV("$1.234560p+3$$"), F(0x1.23456p3)); + test<"{:014.6La}">(SV("0001.234560p+3"), F(0x1.23456p3)); + test<"{:$<15.6La}">(SV("-1.234560p+3$$$"), F(-0x1.23456p3)); + test<"{:$>15.6La}">(SV("$$$-1.234560p+3"), F(-0x1.23456p3)); + test<"{:$^15.6La}">(SV("$-1.234560p+3$$"), F(-0x1.23456p3)); + test<"{:015.6La}">(SV("-0001.234560p+3"), F(-0x1.23456p3)); std::locale::global(loc); - test(SV("1#234560p+3$$$"), SV("{:$<14.6La}"), F(0x1.23456p3)); - test(SV("$$$1#234560p+3"), SV("{:$>14.6La}"), F(0x1.23456p3)); - test(SV("$1#234560p+3$$"), SV("{:$^14.6La}"), F(0x1.23456p3)); - test(SV("0001#234560p+3"), SV("{:014.6La}"), F(0x1.23456p3)); - test(SV("-1#234560p+3$$$"), SV("{:$<15.6La}"), F(-0x1.23456p3)); - test(SV("$$$-1#234560p+3"), SV("{:$>15.6La}"), F(-0x1.23456p3)); - test(SV("$-1#234560p+3$$"), SV("{:$^15.6La}"), F(-0x1.23456p3)); - test(SV("-0001#234560p+3"), SV("{:015.6La}"), F(-0x1.23456p3)); - - test(SV("1.234560p+3$$$"), en_US, SV("{:$<14.6La}"), F(0x1.23456p3)); - test(SV("$$$1.234560p+3"), en_US, SV("{:$>14.6La}"), F(0x1.23456p3)); - test(SV("$1.234560p+3$$"), en_US, SV("{:$^14.6La}"), F(0x1.23456p3)); - test(SV("0001.234560p+3"), en_US, SV("{:014.6La}"), F(0x1.23456p3)); - test(SV("-1.234560p+3$$$"), en_US, SV("{:$<15.6La}"), F(-0x1.23456p3)); - test(SV("$$$-1.234560p+3"), en_US, SV("{:$>15.6La}"), F(-0x1.23456p3)); - test(SV("$-1.234560p+3$$"), en_US, SV("{:$^15.6La}"), F(-0x1.23456p3)); - test(SV("-0001.234560p+3"), en_US, SV("{:015.6La}"), F(-0x1.23456p3)); + test<"{:$<14.6La}">(SV("1#234560p+3$$$"), F(0x1.23456p3)); + test<"{:$>14.6La}">(SV("$$$1#234560p+3"), F(0x1.23456p3)); + test<"{:$^14.6La}">(SV("$1#234560p+3$$"), F(0x1.23456p3)); + test<"{:014.6La}">(SV("0001#234560p+3"), F(0x1.23456p3)); + test<"{:$<15.6La}">(SV("-1#234560p+3$$$"), F(-0x1.23456p3)); + test<"{:$>15.6La}">(SV("$$$-1#234560p+3"), F(-0x1.23456p3)); + test<"{:$^15.6La}">(SV("$-1#234560p+3$$"), F(-0x1.23456p3)); + test<"{:015.6La}">(SV("-0001#234560p+3"), F(-0x1.23456p3)); + + test<"{:$<14.6La}">(SV("1.234560p+3$$$"), en_US, F(0x1.23456p3)); + test<"{:$>14.6La}">(SV("$$$1.234560p+3"), en_US, F(0x1.23456p3)); + test<"{:$^14.6La}">(SV("$1.234560p+3$$"), en_US, F(0x1.23456p3)); + test<"{:014.6La}">(SV("0001.234560p+3"), en_US, F(0x1.23456p3)); + test<"{:$<15.6La}">(SV("-1.234560p+3$$$"), en_US, F(-0x1.23456p3)); + test<"{:$>15.6La}">(SV("$$$-1.234560p+3"), en_US, F(-0x1.23456p3)); + test<"{:$^15.6La}">(SV("$-1.234560p+3$$"), en_US, F(-0x1.23456p3)); + test<"{:015.6La}">(SV("-0001.234560p+3"), en_US, F(-0x1.23456p3)); std::locale::global(en_US); - test(SV("1#234560p+3$$$"), loc, SV("{:$<14.6La}"), F(0x1.23456p3)); - test(SV("$$$1#234560p+3"), loc, SV("{:$>14.6La}"), F(0x1.23456p3)); - test(SV("$1#234560p+3$$"), loc, SV("{:$^14.6La}"), F(0x1.23456p3)); - test(SV("0001#234560p+3"), loc, SV("{:014.6La}"), F(0x1.23456p3)); - test(SV("-1#234560p+3$$$"), loc, SV("{:$<15.6La}"), F(-0x1.23456p3)); - test(SV("$$$-1#234560p+3"), loc, SV("{:$>15.6La}"), F(-0x1.23456p3)); - test(SV("$-1#234560p+3$$"), loc, SV("{:$^15.6La}"), F(-0x1.23456p3)); - test(SV("-0001#234560p+3"), loc, SV("{:015.6La}"), F(-0x1.23456p3)); + test<"{:$<14.6La}">(SV("1#234560p+3$$$"), loc, F(0x1.23456p3)); + test<"{:$>14.6La}">(SV("$$$1#234560p+3"), loc, F(0x1.23456p3)); + test<"{:$^14.6La}">(SV("$1#234560p+3$$"), loc, F(0x1.23456p3)); + test<"{:014.6La}">(SV("0001#234560p+3"), loc, F(0x1.23456p3)); + test<"{:$<15.6La}">(SV("-1#234560p+3$$$"), loc, F(-0x1.23456p3)); + test<"{:$>15.6La}">(SV("$$$-1#234560p+3"), loc, F(-0x1.23456p3)); + test<"{:$^15.6La}">(SV("$-1#234560p+3$$"), loc, F(-0x1.23456p3)); + test<"{:015.6La}">(SV("-0001#234560p+3"), loc, F(-0x1.23456p3)); } template @@ -866,83 +870,83 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.234560P-3"), SV("{:.6LA}"), F(0x1.23456p-3)); - test(SV("1.234560P-2"), SV("{:.6LA}"), F(0x1.23456p-2)); - test(SV("1.234560P-1"), SV("{:.6LA}"), F(0x1.23456p-1)); - test(SV("1.234560P+0"), SV("{:.6LA}"), F(0x1.23456p0)); - test(SV("1.234560P+1"), SV("{:.6LA}"), F(0x1.23456p+1)); - test(SV("1.234560P+2"), SV("{:.6LA}"), F(0x1.23456p+2)); - test(SV("1.234560P+3"), SV("{:.6LA}"), F(0x1.23456p+3)); - test(SV("1.234560P+20"), SV("{:.6LA}"), F(0x1.23456p+20)); + test<"{:.6LA}">(SV("1.234560P-3"), F(0x1.23456p-3)); + test<"{:.6LA}">(SV("1.234560P-2"), F(0x1.23456p-2)); + test<"{:.6LA}">(SV("1.234560P-1"), F(0x1.23456p-1)); + test<"{:.6LA}">(SV("1.234560P+0"), F(0x1.23456p0)); + test<"{:.6LA}">(SV("1.234560P+1"), F(0x1.23456p+1)); + test<"{:.6LA}">(SV("1.234560P+2"), F(0x1.23456p+2)); + test<"{:.6LA}">(SV("1.234560P+3"), F(0x1.23456p+3)); + test<"{:.6LA}">(SV("1.234560P+20"), F(0x1.23456p+20)); std::locale::global(loc); - test(SV("1#234560P-3"), SV("{:.6LA}"), F(0x1.23456p-3)); - test(SV("1#234560P-2"), SV("{:.6LA}"), F(0x1.23456p-2)); - test(SV("1#234560P-1"), SV("{:.6LA}"), F(0x1.23456p-1)); - test(SV("1#234560P+0"), SV("{:.6LA}"), F(0x1.23456p0)); - test(SV("1#234560P+1"), SV("{:.6LA}"), F(0x1.23456p+1)); - test(SV("1#234560P+2"), SV("{:.6LA}"), F(0x1.23456p+2)); - test(SV("1#234560P+3"), SV("{:.6LA}"), F(0x1.23456p+3)); - test(SV("1#234560P+20"), SV("{:.6LA}"), F(0x1.23456p+20)); - - test(SV("1.234560P-3"), en_US, SV("{:.6LA}"), F(0x1.23456p-3)); - test(SV("1.234560P-2"), en_US, SV("{:.6LA}"), F(0x1.23456p-2)); - test(SV("1.234560P-1"), en_US, SV("{:.6LA}"), F(0x1.23456p-1)); - test(SV("1.234560P+0"), en_US, SV("{:.6LA}"), F(0x1.23456p0)); - test(SV("1.234560P+1"), en_US, SV("{:.6LA}"), F(0x1.23456p+1)); - test(SV("1.234560P+2"), en_US, SV("{:.6LA}"), F(0x1.23456p+2)); - test(SV("1.234560P+3"), en_US, SV("{:.6LA}"), F(0x1.23456p+3)); - test(SV("1.234560P+20"), en_US, SV("{:.6LA}"), F(0x1.23456p+20)); + test<"{:.6LA}">(SV("1#234560P-3"), F(0x1.23456p-3)); + test<"{:.6LA}">(SV("1#234560P-2"), F(0x1.23456p-2)); + test<"{:.6LA}">(SV("1#234560P-1"), F(0x1.23456p-1)); + test<"{:.6LA}">(SV("1#234560P+0"), F(0x1.23456p0)); + test<"{:.6LA}">(SV("1#234560P+1"), F(0x1.23456p+1)); + test<"{:.6LA}">(SV("1#234560P+2"), F(0x1.23456p+2)); + test<"{:.6LA}">(SV("1#234560P+3"), F(0x1.23456p+3)); + test<"{:.6LA}">(SV("1#234560P+20"), F(0x1.23456p+20)); + + test<"{:.6LA}">(SV("1.234560P-3"), en_US, F(0x1.23456p-3)); + test<"{:.6LA}">(SV("1.234560P-2"), en_US, F(0x1.23456p-2)); + test<"{:.6LA}">(SV("1.234560P-1"), en_US, F(0x1.23456p-1)); + test<"{:.6LA}">(SV("1.234560P+0"), en_US, F(0x1.23456p0)); + test<"{:.6LA}">(SV("1.234560P+1"), en_US, F(0x1.23456p+1)); + test<"{:.6LA}">(SV("1.234560P+2"), en_US, F(0x1.23456p+2)); + test<"{:.6LA}">(SV("1.234560P+3"), en_US, F(0x1.23456p+3)); + test<"{:.6LA}">(SV("1.234560P+20"), en_US, F(0x1.23456p+20)); std::locale::global(en_US); - test(SV("1#234560P-3"), loc, SV("{:.6LA}"), F(0x1.23456p-3)); - test(SV("1#234560P-2"), loc, SV("{:.6LA}"), F(0x1.23456p-2)); - test(SV("1#234560P-1"), loc, SV("{:.6LA}"), F(0x1.23456p-1)); - test(SV("1#234560P+0"), loc, SV("{:.6LA}"), F(0x1.23456p0)); - test(SV("1#234560P+1"), loc, SV("{:.6LA}"), F(0x1.23456p+1)); - test(SV("1#234560P+2"), loc, SV("{:.6LA}"), F(0x1.23456p+2)); - test(SV("1#234560P+3"), loc, SV("{:.6LA}"), F(0x1.23456p+3)); - test(SV("1#234560P+20"), loc, SV("{:.6LA}"), F(0x1.23456p+20)); + test<"{:.6LA}">(SV("1#234560P-3"), loc, F(0x1.23456p-3)); + test<"{:.6LA}">(SV("1#234560P-2"), loc, F(0x1.23456p-2)); + test<"{:.6LA}">(SV("1#234560P-1"), loc, F(0x1.23456p-1)); + test<"{:.6LA}">(SV("1#234560P+0"), loc, F(0x1.23456p0)); + test<"{:.6LA}">(SV("1#234560P+1"), loc, F(0x1.23456p+1)); + test<"{:.6LA}">(SV("1#234560P+2"), loc, F(0x1.23456p+2)); + test<"{:.6LA}">(SV("1#234560P+3"), loc, F(0x1.23456p+3)); + test<"{:.6LA}">(SV("1#234560P+20"), loc, F(0x1.23456p+20)); // *** Fill, align, zero Padding *** std::locale::global(en_US); - test(SV("1.234560P+3$$$"), SV("{:$<14.6LA}"), F(0x1.23456p3)); - test(SV("$$$1.234560P+3"), SV("{:$>14.6LA}"), F(0x1.23456p3)); - test(SV("$1.234560P+3$$"), SV("{:$^14.6LA}"), F(0x1.23456p3)); - test(SV("0001.234560P+3"), SV("{:014.6LA}"), F(0x1.23456p3)); - test(SV("-1.234560P+3$$$"), SV("{:$<15.6LA}"), F(-0x1.23456p3)); - test(SV("$$$-1.234560P+3"), SV("{:$>15.6LA}"), F(-0x1.23456p3)); - test(SV("$-1.234560P+3$$"), SV("{:$^15.6LA}"), F(-0x1.23456p3)); - test(SV("-0001.234560P+3"), SV("{:015.6LA}"), F(-0x1.23456p3)); + test<"{:$<14.6LA}">(SV("1.234560P+3$$$"), F(0x1.23456p3)); + test<"{:$>14.6LA}">(SV("$$$1.234560P+3"), F(0x1.23456p3)); + test<"{:$^14.6LA}">(SV("$1.234560P+3$$"), F(0x1.23456p3)); + test<"{:014.6LA}">(SV("0001.234560P+3"), F(0x1.23456p3)); + test<"{:$<15.6LA}">(SV("-1.234560P+3$$$"), F(-0x1.23456p3)); + test<"{:$>15.6LA}">(SV("$$$-1.234560P+3"), F(-0x1.23456p3)); + test<"{:$^15.6LA}">(SV("$-1.234560P+3$$"), F(-0x1.23456p3)); + test<"{:015.6LA}">(SV("-0001.234560P+3"), F(-0x1.23456p3)); std::locale::global(loc); - test(SV("1#234560P+3$$$"), SV("{:$<14.6LA}"), F(0x1.23456p3)); - test(SV("$$$1#234560P+3"), SV("{:$>14.6LA}"), F(0x1.23456p3)); - test(SV("$1#234560P+3$$"), SV("{:$^14.6LA}"), F(0x1.23456p3)); - test(SV("0001#234560P+3"), SV("{:014.6LA}"), F(0x1.23456p3)); - test(SV("-1#234560P+3$$$"), SV("{:$<15.6LA}"), F(-0x1.23456p3)); - test(SV("$$$-1#234560P+3"), SV("{:$>15.6LA}"), F(-0x1.23456p3)); - test(SV("$-1#234560P+3$$"), SV("{:$^15.6LA}"), F(-0x1.23456p3)); - test(SV("-0001#234560P+3"), SV("{:015.6LA}"), F(-0x1.23456p3)); - - test(SV("1.234560P+3$$$"), en_US, SV("{:$<14.6LA}"), F(0x1.23456p3)); - test(SV("$$$1.234560P+3"), en_US, SV("{:$>14.6LA}"), F(0x1.23456p3)); - test(SV("$1.234560P+3$$"), en_US, SV("{:$^14.6LA}"), F(0x1.23456p3)); - test(SV("0001.234560P+3"), en_US, SV("{:014.6LA}"), F(0x1.23456p3)); - test(SV("-1.234560P+3$$$"), en_US, SV("{:$<15.6LA}"), F(-0x1.23456p3)); - test(SV("$$$-1.234560P+3"), en_US, SV("{:$>15.6LA}"), F(-0x1.23456p3)); - test(SV("$-1.234560P+3$$"), en_US, SV("{:$^15.6LA}"), F(-0x1.23456p3)); - test(SV("-0001.234560P+3"), en_US, SV("{:015.6LA}"), F(-0x1.23456p3)); + test<"{:$<14.6LA}">(SV("1#234560P+3$$$"), F(0x1.23456p3)); + test<"{:$>14.6LA}">(SV("$$$1#234560P+3"), F(0x1.23456p3)); + test<"{:$^14.6LA}">(SV("$1#234560P+3$$"), F(0x1.23456p3)); + test<"{:014.6LA}">(SV("0001#234560P+3"), F(0x1.23456p3)); + test<"{:$<15.6LA}">(SV("-1#234560P+3$$$"), F(-0x1.23456p3)); + test<"{:$>15.6LA}">(SV("$$$-1#234560P+3"), F(-0x1.23456p3)); + test<"{:$^15.6LA}">(SV("$-1#234560P+3$$"), F(-0x1.23456p3)); + test<"{:015.6LA}">(SV("-0001#234560P+3"), F(-0x1.23456p3)); + + test<"{:$<14.6LA}">(SV("1.234560P+3$$$"), en_US, F(0x1.23456p3)); + test<"{:$>14.6LA}">(SV("$$$1.234560P+3"), en_US, F(0x1.23456p3)); + test<"{:$^14.6LA}">(SV("$1.234560P+3$$"), en_US, F(0x1.23456p3)); + test<"{:014.6LA}">(SV("0001.234560P+3"), en_US, F(0x1.23456p3)); + test<"{:$<15.6LA}">(SV("-1.234560P+3$$$"), en_US, F(-0x1.23456p3)); + test<"{:$>15.6LA}">(SV("$$$-1.234560P+3"), en_US, F(-0x1.23456p3)); + test<"{:$^15.6LA}">(SV("$-1.234560P+3$$"), en_US, F(-0x1.23456p3)); + test<"{:015.6LA}">(SV("-0001.234560P+3"), en_US, F(-0x1.23456p3)); std::locale::global(en_US); - test(SV("1#234560P+3$$$"), loc, SV("{:$<14.6LA}"), F(0x1.23456p3)); - test(SV("$$$1#234560P+3"), loc, SV("{:$>14.6LA}"), F(0x1.23456p3)); - test(SV("$1#234560P+3$$"), loc, SV("{:$^14.6LA}"), F(0x1.23456p3)); - test(SV("0001#234560P+3"), loc, SV("{:014.6LA}"), F(0x1.23456p3)); - test(SV("-1#234560P+3$$$"), loc, SV("{:$<15.6LA}"), F(-0x1.23456p3)); - test(SV("$$$-1#234560P+3"), loc, SV("{:$>15.6LA}"), F(-0x1.23456p3)); - test(SV("$-1#234560P+3$$"), loc, SV("{:$^15.6LA}"), F(-0x1.23456p3)); - test(SV("-0001#234560P+3"), loc, SV("{:015.6LA}"), F(-0x1.23456p3)); + test<"{:$<14.6LA}">(SV("1#234560P+3$$$"), loc, F(0x1.23456p3)); + test<"{:$>14.6LA}">(SV("$$$1#234560P+3"), loc, F(0x1.23456p3)); + test<"{:$^14.6LA}">(SV("$1#234560P+3$$"), loc, F(0x1.23456p3)); + test<"{:014.6LA}">(SV("0001#234560P+3"), loc, F(0x1.23456p3)); + test<"{:$<15.6LA}">(SV("-1#234560P+3$$$"), loc, F(-0x1.23456p3)); + test<"{:$>15.6LA}">(SV("$$$-1#234560P+3"), loc, F(-0x1.23456p3)); + test<"{:$^15.6LA}">(SV("$-1#234560P+3$$"), loc, F(-0x1.23456p3)); + test<"{:015.6LA}">(SV("-0001#234560P+3"), loc, F(-0x1.23456p3)); } template @@ -952,115 +956,115 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.234567e-03"), SV("{:.6Le}"), F(1.234567e-3)); - test(SV("1.234567e-02"), SV("{:.6Le}"), F(1.234567e-2)); - test(SV("1.234567e-01"), SV("{:.6Le}"), F(1.234567e-1)); - test(SV("1.234567e+00"), SV("{:.6Le}"), F(1.234567e0)); - test(SV("1.234567e+01"), SV("{:.6Le}"), F(1.234567e1)); - test(SV("1.234567e+02"), SV("{:.6Le}"), F(1.234567e2)); - test(SV("1.234567e+03"), SV("{:.6Le}"), F(1.234567e3)); - test(SV("1.234567e+20"), SV("{:.6Le}"), F(1.234567e20)); - test(SV("-1.234567e-03"), SV("{:.6Le}"), F(-1.234567e-3)); - test(SV("-1.234567e-02"), SV("{:.6Le}"), F(-1.234567e-2)); - test(SV("-1.234567e-01"), SV("{:.6Le}"), F(-1.234567e-1)); - test(SV("-1.234567e+00"), SV("{:.6Le}"), F(-1.234567e0)); - test(SV("-1.234567e+01"), SV("{:.6Le}"), F(-1.234567e1)); - test(SV("-1.234567e+02"), SV("{:.6Le}"), F(-1.234567e2)); - test(SV("-1.234567e+03"), SV("{:.6Le}"), F(-1.234567e3)); - test(SV("-1.234567e+20"), SV("{:.6Le}"), F(-1.234567e20)); + test<"{:.6Le}">(SV("1.234567e-03"), F(1.234567e-3)); + test<"{:.6Le}">(SV("1.234567e-02"), F(1.234567e-2)); + test<"{:.6Le}">(SV("1.234567e-01"), F(1.234567e-1)); + test<"{:.6Le}">(SV("1.234567e+00"), F(1.234567e0)); + test<"{:.6Le}">(SV("1.234567e+01"), F(1.234567e1)); + test<"{:.6Le}">(SV("1.234567e+02"), F(1.234567e2)); + test<"{:.6Le}">(SV("1.234567e+03"), F(1.234567e3)); + test<"{:.6Le}">(SV("1.234567e+20"), F(1.234567e20)); + test<"{:.6Le}">(SV("-1.234567e-03"), F(-1.234567e-3)); + test<"{:.6Le}">(SV("-1.234567e-02"), F(-1.234567e-2)); + test<"{:.6Le}">(SV("-1.234567e-01"), F(-1.234567e-1)); + test<"{:.6Le}">(SV("-1.234567e+00"), F(-1.234567e0)); + test<"{:.6Le}">(SV("-1.234567e+01"), F(-1.234567e1)); + test<"{:.6Le}">(SV("-1.234567e+02"), F(-1.234567e2)); + test<"{:.6Le}">(SV("-1.234567e+03"), F(-1.234567e3)); + test<"{:.6Le}">(SV("-1.234567e+20"), F(-1.234567e20)); std::locale::global(loc); - test(SV("1#234567e-03"), SV("{:.6Le}"), F(1.234567e-3)); - test(SV("1#234567e-02"), SV("{:.6Le}"), F(1.234567e-2)); - test(SV("1#234567e-01"), SV("{:.6Le}"), F(1.234567e-1)); - test(SV("1#234567e+00"), SV("{:.6Le}"), F(1.234567e0)); - test(SV("1#234567e+01"), SV("{:.6Le}"), F(1.234567e1)); - test(SV("1#234567e+02"), SV("{:.6Le}"), F(1.234567e2)); - test(SV("1#234567e+03"), SV("{:.6Le}"), F(1.234567e3)); - test(SV("1#234567e+20"), SV("{:.6Le}"), F(1.234567e20)); - test(SV("-1#234567e-03"), SV("{:.6Le}"), F(-1.234567e-3)); - test(SV("-1#234567e-02"), SV("{:.6Le}"), F(-1.234567e-2)); - test(SV("-1#234567e-01"), SV("{:.6Le}"), F(-1.234567e-1)); - test(SV("-1#234567e+00"), SV("{:.6Le}"), F(-1.234567e0)); - test(SV("-1#234567e+01"), SV("{:.6Le}"), F(-1.234567e1)); - test(SV("-1#234567e+02"), SV("{:.6Le}"), F(-1.234567e2)); - test(SV("-1#234567e+03"), SV("{:.6Le}"), F(-1.234567e3)); - test(SV("-1#234567e+20"), SV("{:.6Le}"), F(-1.234567e20)); - - test(SV("1.234567e-03"), en_US, SV("{:.6Le}"), F(1.234567e-3)); - test(SV("1.234567e-02"), en_US, SV("{:.6Le}"), F(1.234567e-2)); - test(SV("1.234567e-01"), en_US, SV("{:.6Le}"), F(1.234567e-1)); - test(SV("1.234567e+00"), en_US, SV("{:.6Le}"), F(1.234567e0)); - test(SV("1.234567e+01"), en_US, SV("{:.6Le}"), F(1.234567e1)); - test(SV("1.234567e+02"), en_US, SV("{:.6Le}"), F(1.234567e2)); - test(SV("1.234567e+03"), en_US, SV("{:.6Le}"), F(1.234567e3)); - test(SV("1.234567e+20"), en_US, SV("{:.6Le}"), F(1.234567e20)); - test(SV("-1.234567e-03"), en_US, SV("{:.6Le}"), F(-1.234567e-3)); - test(SV("-1.234567e-02"), en_US, SV("{:.6Le}"), F(-1.234567e-2)); - test(SV("-1.234567e-01"), en_US, SV("{:.6Le}"), F(-1.234567e-1)); - test(SV("-1.234567e+00"), en_US, SV("{:.6Le}"), F(-1.234567e0)); - test(SV("-1.234567e+01"), en_US, SV("{:.6Le}"), F(-1.234567e1)); - test(SV("-1.234567e+02"), en_US, SV("{:.6Le}"), F(-1.234567e2)); - test(SV("-1.234567e+03"), en_US, SV("{:.6Le}"), F(-1.234567e3)); - test(SV("-1.234567e+20"), en_US, SV("{:.6Le}"), F(-1.234567e20)); + test<"{:.6Le}">(SV("1#234567e-03"), F(1.234567e-3)); + test<"{:.6Le}">(SV("1#234567e-02"), F(1.234567e-2)); + test<"{:.6Le}">(SV("1#234567e-01"), F(1.234567e-1)); + test<"{:.6Le}">(SV("1#234567e+00"), F(1.234567e0)); + test<"{:.6Le}">(SV("1#234567e+01"), F(1.234567e1)); + test<"{:.6Le}">(SV("1#234567e+02"), F(1.234567e2)); + test<"{:.6Le}">(SV("1#234567e+03"), F(1.234567e3)); + test<"{:.6Le}">(SV("1#234567e+20"), F(1.234567e20)); + test<"{:.6Le}">(SV("-1#234567e-03"), F(-1.234567e-3)); + test<"{:.6Le}">(SV("-1#234567e-02"), F(-1.234567e-2)); + test<"{:.6Le}">(SV("-1#234567e-01"), F(-1.234567e-1)); + test<"{:.6Le}">(SV("-1#234567e+00"), F(-1.234567e0)); + test<"{:.6Le}">(SV("-1#234567e+01"), F(-1.234567e1)); + test<"{:.6Le}">(SV("-1#234567e+02"), F(-1.234567e2)); + test<"{:.6Le}">(SV("-1#234567e+03"), F(-1.234567e3)); + test<"{:.6Le}">(SV("-1#234567e+20"), F(-1.234567e20)); + + test<"{:.6Le}">(SV("1.234567e-03"), en_US, F(1.234567e-3)); + test<"{:.6Le}">(SV("1.234567e-02"), en_US, F(1.234567e-2)); + test<"{:.6Le}">(SV("1.234567e-01"), en_US, F(1.234567e-1)); + test<"{:.6Le}">(SV("1.234567e+00"), en_US, F(1.234567e0)); + test<"{:.6Le}">(SV("1.234567e+01"), en_US, F(1.234567e1)); + test<"{:.6Le}">(SV("1.234567e+02"), en_US, F(1.234567e2)); + test<"{:.6Le}">(SV("1.234567e+03"), en_US, F(1.234567e3)); + test<"{:.6Le}">(SV("1.234567e+20"), en_US, F(1.234567e20)); + test<"{:.6Le}">(SV("-1.234567e-03"), en_US, F(-1.234567e-3)); + test<"{:.6Le}">(SV("-1.234567e-02"), en_US, F(-1.234567e-2)); + test<"{:.6Le}">(SV("-1.234567e-01"), en_US, F(-1.234567e-1)); + test<"{:.6Le}">(SV("-1.234567e+00"), en_US, F(-1.234567e0)); + test<"{:.6Le}">(SV("-1.234567e+01"), en_US, F(-1.234567e1)); + test<"{:.6Le}">(SV("-1.234567e+02"), en_US, F(-1.234567e2)); + test<"{:.6Le}">(SV("-1.234567e+03"), en_US, F(-1.234567e3)); + test<"{:.6Le}">(SV("-1.234567e+20"), en_US, F(-1.234567e20)); std::locale::global(en_US); - test(SV("1#234567e-03"), loc, SV("{:.6Le}"), F(1.234567e-3)); - test(SV("1#234567e-02"), loc, SV("{:.6Le}"), F(1.234567e-2)); - test(SV("1#234567e-01"), loc, SV("{:.6Le}"), F(1.234567e-1)); - test(SV("1#234567e+00"), loc, SV("{:.6Le}"), F(1.234567e0)); - test(SV("1#234567e+01"), loc, SV("{:.6Le}"), F(1.234567e1)); - test(SV("1#234567e+02"), loc, SV("{:.6Le}"), F(1.234567e2)); - test(SV("1#234567e+03"), loc, SV("{:.6Le}"), F(1.234567e3)); - test(SV("1#234567e+20"), loc, SV("{:.6Le}"), F(1.234567e20)); - test(SV("-1#234567e-03"), loc, SV("{:.6Le}"), F(-1.234567e-3)); - test(SV("-1#234567e-02"), loc, SV("{:.6Le}"), F(-1.234567e-2)); - test(SV("-1#234567e-01"), loc, SV("{:.6Le}"), F(-1.234567e-1)); - test(SV("-1#234567e+00"), loc, SV("{:.6Le}"), F(-1.234567e0)); - test(SV("-1#234567e+01"), loc, SV("{:.6Le}"), F(-1.234567e1)); - test(SV("-1#234567e+02"), loc, SV("{:.6Le}"), F(-1.234567e2)); - test(SV("-1#234567e+03"), loc, SV("{:.6Le}"), F(-1.234567e3)); - test(SV("-1#234567e+20"), loc, SV("{:.6Le}"), F(-1.234567e20)); + test<"{:.6Le}">(SV("1#234567e-03"), loc, F(1.234567e-3)); + test<"{:.6Le}">(SV("1#234567e-02"), loc, F(1.234567e-2)); + test<"{:.6Le}">(SV("1#234567e-01"), loc, F(1.234567e-1)); + test<"{:.6Le}">(SV("1#234567e+00"), loc, F(1.234567e0)); + test<"{:.6Le}">(SV("1#234567e+01"), loc, F(1.234567e1)); + test<"{:.6Le}">(SV("1#234567e+02"), loc, F(1.234567e2)); + test<"{:.6Le}">(SV("1#234567e+03"), loc, F(1.234567e3)); + test<"{:.6Le}">(SV("1#234567e+20"), loc, F(1.234567e20)); + test<"{:.6Le}">(SV("-1#234567e-03"), loc, F(-1.234567e-3)); + test<"{:.6Le}">(SV("-1#234567e-02"), loc, F(-1.234567e-2)); + test<"{:.6Le}">(SV("-1#234567e-01"), loc, F(-1.234567e-1)); + test<"{:.6Le}">(SV("-1#234567e+00"), loc, F(-1.234567e0)); + test<"{:.6Le}">(SV("-1#234567e+01"), loc, F(-1.234567e1)); + test<"{:.6Le}">(SV("-1#234567e+02"), loc, F(-1.234567e2)); + test<"{:.6Le}">(SV("-1#234567e+03"), loc, F(-1.234567e3)); + test<"{:.6Le}">(SV("-1#234567e+20"), loc, F(-1.234567e20)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1.234567e+03$$$"), SV("{:$<15.6Le}"), F(1.234567e3)); - test(SV("$$$1.234567e+03"), SV("{:$>15.6Le}"), F(1.234567e3)); - test(SV("$1.234567e+03$$"), SV("{:$^15.6Le}"), F(1.234567e3)); - test(SV("0001.234567e+03"), SV("{:015.6Le}"), F(1.234567e3)); - test(SV("-1.234567e+03$$$"), SV("{:$<16.6Le}"), F(-1.234567e3)); - test(SV("$$$-1.234567e+03"), SV("{:$>16.6Le}"), F(-1.234567e3)); - test(SV("$-1.234567e+03$$"), SV("{:$^16.6Le}"), F(-1.234567e3)); - test(SV("-0001.234567e+03"), SV("{:016.6Le}"), F(-1.234567e3)); + test<"{:$<15.6Le}">(SV("1.234567e+03$$$"), F(1.234567e3)); + test<"{:$>15.6Le}">(SV("$$$1.234567e+03"), F(1.234567e3)); + test<"{:$^15.6Le}">(SV("$1.234567e+03$$"), F(1.234567e3)); + test<"{:015.6Le}">(SV("0001.234567e+03"), F(1.234567e3)); + test<"{:$<16.6Le}">(SV("-1.234567e+03$$$"), F(-1.234567e3)); + test<"{:$>16.6Le}">(SV("$$$-1.234567e+03"), F(-1.234567e3)); + test<"{:$^16.6Le}">(SV("$-1.234567e+03$$"), F(-1.234567e3)); + test<"{:016.6Le}">(SV("-0001.234567e+03"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1#234567e+03$$$"), SV("{:$<15.6Le}"), F(1.234567e3)); - test(SV("$$$1#234567e+03"), SV("{:$>15.6Le}"), F(1.234567e3)); - test(SV("$1#234567e+03$$"), SV("{:$^15.6Le}"), F(1.234567e3)); - test(SV("0001#234567e+03"), SV("{:015.6Le}"), F(1.234567e3)); - test(SV("-1#234567e+03$$$"), SV("{:$<16.6Le}"), F(-1.234567e3)); - test(SV("$$$-1#234567e+03"), SV("{:$>16.6Le}"), F(-1.234567e3)); - test(SV("$-1#234567e+03$$"), SV("{:$^16.6Le}"), F(-1.234567e3)); - test(SV("-0001#234567e+03"), SV("{:016.6Le}"), F(-1.234567e3)); - - test(SV("1.234567e+03$$$"), en_US, SV("{:$<15.6Le}"), F(1.234567e3)); - test(SV("$$$1.234567e+03"), en_US, SV("{:$>15.6Le}"), F(1.234567e3)); - test(SV("$1.234567e+03$$"), en_US, SV("{:$^15.6Le}"), F(1.234567e3)); - test(SV("0001.234567e+03"), en_US, SV("{:015.6Le}"), F(1.234567e3)); - test(SV("-1.234567e+03$$$"), en_US, SV("{:$<16.6Le}"), F(-1.234567e3)); - test(SV("$$$-1.234567e+03"), en_US, SV("{:$>16.6Le}"), F(-1.234567e3)); - test(SV("$-1.234567e+03$$"), en_US, SV("{:$^16.6Le}"), F(-1.234567e3)); - test(SV("-0001.234567e+03"), en_US, SV("{:016.6Le}"), F(-1.234567e3)); + test<"{:$<15.6Le}">(SV("1#234567e+03$$$"), F(1.234567e3)); + test<"{:$>15.6Le}">(SV("$$$1#234567e+03"), F(1.234567e3)); + test<"{:$^15.6Le}">(SV("$1#234567e+03$$"), F(1.234567e3)); + test<"{:015.6Le}">(SV("0001#234567e+03"), F(1.234567e3)); + test<"{:$<16.6Le}">(SV("-1#234567e+03$$$"), F(-1.234567e3)); + test<"{:$>16.6Le}">(SV("$$$-1#234567e+03"), F(-1.234567e3)); + test<"{:$^16.6Le}">(SV("$-1#234567e+03$$"), F(-1.234567e3)); + test<"{:016.6Le}">(SV("-0001#234567e+03"), F(-1.234567e3)); + + test<"{:$<15.6Le}">(SV("1.234567e+03$$$"), en_US, F(1.234567e3)); + test<"{:$>15.6Le}">(SV("$$$1.234567e+03"), en_US, F(1.234567e3)); + test<"{:$^15.6Le}">(SV("$1.234567e+03$$"), en_US, F(1.234567e3)); + test<"{:015.6Le}">(SV("0001.234567e+03"), en_US, F(1.234567e3)); + test<"{:$<16.6Le}">(SV("-1.234567e+03$$$"), en_US, F(-1.234567e3)); + test<"{:$>16.6Le}">(SV("$$$-1.234567e+03"), en_US, F(-1.234567e3)); + test<"{:$^16.6Le}">(SV("$-1.234567e+03$$"), en_US, F(-1.234567e3)); + test<"{:016.6Le}">(SV("-0001.234567e+03"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1#234567e+03$$$"), loc, SV("{:$<15.6Le}"), F(1.234567e3)); - test(SV("$$$1#234567e+03"), loc, SV("{:$>15.6Le}"), F(1.234567e3)); - test(SV("$1#234567e+03$$"), loc, SV("{:$^15.6Le}"), F(1.234567e3)); - test(SV("0001#234567e+03"), loc, SV("{:015.6Le}"), F(1.234567e3)); - test(SV("-1#234567e+03$$$"), loc, SV("{:$<16.6Le}"), F(-1.234567e3)); - test(SV("$$$-1#234567e+03"), loc, SV("{:$>16.6Le}"), F(-1.234567e3)); - test(SV("$-1#234567e+03$$"), loc, SV("{:$^16.6Le}"), F(-1.234567e3)); - test(SV("-0001#234567e+03"), loc, SV("{:016.6Le}"), F(-1.234567e3)); + test<"{:$<15.6Le}">(SV("1#234567e+03$$$"), loc, F(1.234567e3)); + test<"{:$>15.6Le}">(SV("$$$1#234567e+03"), loc, F(1.234567e3)); + test<"{:$^15.6Le}">(SV("$1#234567e+03$$"), loc, F(1.234567e3)); + test<"{:015.6Le}">(SV("0001#234567e+03"), loc, F(1.234567e3)); + test<"{:$<16.6Le}">(SV("-1#234567e+03$$$"), loc, F(-1.234567e3)); + test<"{:$>16.6Le}">(SV("$$$-1#234567e+03"), loc, F(-1.234567e3)); + test<"{:$^16.6Le}">(SV("$-1#234567e+03$$"), loc, F(-1.234567e3)); + test<"{:016.6Le}">(SV("-0001#234567e+03"), loc, F(-1.234567e3)); } template @@ -1070,115 +1074,115 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.234567E-03"), SV("{:.6LE}"), F(1.234567e-3)); - test(SV("1.234567E-02"), SV("{:.6LE}"), F(1.234567e-2)); - test(SV("1.234567E-01"), SV("{:.6LE}"), F(1.234567e-1)); - test(SV("1.234567E+00"), SV("{:.6LE}"), F(1.234567e0)); - test(SV("1.234567E+01"), SV("{:.6LE}"), F(1.234567e1)); - test(SV("1.234567E+02"), SV("{:.6LE}"), F(1.234567e2)); - test(SV("1.234567E+03"), SV("{:.6LE}"), F(1.234567e3)); - test(SV("1.234567E+20"), SV("{:.6LE}"), F(1.234567e20)); - test(SV("-1.234567E-03"), SV("{:.6LE}"), F(-1.234567e-3)); - test(SV("-1.234567E-02"), SV("{:.6LE}"), F(-1.234567e-2)); - test(SV("-1.234567E-01"), SV("{:.6LE}"), F(-1.234567e-1)); - test(SV("-1.234567E+00"), SV("{:.6LE}"), F(-1.234567e0)); - test(SV("-1.234567E+01"), SV("{:.6LE}"), F(-1.234567e1)); - test(SV("-1.234567E+02"), SV("{:.6LE}"), F(-1.234567e2)); - test(SV("-1.234567E+03"), SV("{:.6LE}"), F(-1.234567e3)); - test(SV("-1.234567E+20"), SV("{:.6LE}"), F(-1.234567e20)); + test<"{:.6LE}">(SV("1.234567E-03"), F(1.234567e-3)); + test<"{:.6LE}">(SV("1.234567E-02"), F(1.234567e-2)); + test<"{:.6LE}">(SV("1.234567E-01"), F(1.234567e-1)); + test<"{:.6LE}">(SV("1.234567E+00"), F(1.234567e0)); + test<"{:.6LE}">(SV("1.234567E+01"), F(1.234567e1)); + test<"{:.6LE}">(SV("1.234567E+02"), F(1.234567e2)); + test<"{:.6LE}">(SV("1.234567E+03"), F(1.234567e3)); + test<"{:.6LE}">(SV("1.234567E+20"), F(1.234567e20)); + test<"{:.6LE}">(SV("-1.234567E-03"), F(-1.234567e-3)); + test<"{:.6LE}">(SV("-1.234567E-02"), F(-1.234567e-2)); + test<"{:.6LE}">(SV("-1.234567E-01"), F(-1.234567e-1)); + test<"{:.6LE}">(SV("-1.234567E+00"), F(-1.234567e0)); + test<"{:.6LE}">(SV("-1.234567E+01"), F(-1.234567e1)); + test<"{:.6LE}">(SV("-1.234567E+02"), F(-1.234567e2)); + test<"{:.6LE}">(SV("-1.234567E+03"), F(-1.234567e3)); + test<"{:.6LE}">(SV("-1.234567E+20"), F(-1.234567e20)); std::locale::global(loc); - test(SV("1#234567E-03"), SV("{:.6LE}"), F(1.234567e-3)); - test(SV("1#234567E-02"), SV("{:.6LE}"), F(1.234567e-2)); - test(SV("1#234567E-01"), SV("{:.6LE}"), F(1.234567e-1)); - test(SV("1#234567E+00"), SV("{:.6LE}"), F(1.234567e0)); - test(SV("1#234567E+01"), SV("{:.6LE}"), F(1.234567e1)); - test(SV("1#234567E+02"), SV("{:.6LE}"), F(1.234567e2)); - test(SV("1#234567E+03"), SV("{:.6LE}"), F(1.234567e3)); - test(SV("1#234567E+20"), SV("{:.6LE}"), F(1.234567e20)); - test(SV("-1#234567E-03"), SV("{:.6LE}"), F(-1.234567e-3)); - test(SV("-1#234567E-02"), SV("{:.6LE}"), F(-1.234567e-2)); - test(SV("-1#234567E-01"), SV("{:.6LE}"), F(-1.234567e-1)); - test(SV("-1#234567E+00"), SV("{:.6LE}"), F(-1.234567e0)); - test(SV("-1#234567E+01"), SV("{:.6LE}"), F(-1.234567e1)); - test(SV("-1#234567E+02"), SV("{:.6LE}"), F(-1.234567e2)); - test(SV("-1#234567E+03"), SV("{:.6LE}"), F(-1.234567e3)); - test(SV("-1#234567E+20"), SV("{:.6LE}"), F(-1.234567e20)); - - test(SV("1.234567E-03"), en_US, SV("{:.6LE}"), F(1.234567e-3)); - test(SV("1.234567E-02"), en_US, SV("{:.6LE}"), F(1.234567e-2)); - test(SV("1.234567E-01"), en_US, SV("{:.6LE}"), F(1.234567e-1)); - test(SV("1.234567E+00"), en_US, SV("{:.6LE}"), F(1.234567e0)); - test(SV("1.234567E+01"), en_US, SV("{:.6LE}"), F(1.234567e1)); - test(SV("1.234567E+02"), en_US, SV("{:.6LE}"), F(1.234567e2)); - test(SV("1.234567E+03"), en_US, SV("{:.6LE}"), F(1.234567e3)); - test(SV("1.234567E+20"), en_US, SV("{:.6LE}"), F(1.234567e20)); - test(SV("-1.234567E-03"), en_US, SV("{:.6LE}"), F(-1.234567e-3)); - test(SV("-1.234567E-02"), en_US, SV("{:.6LE}"), F(-1.234567e-2)); - test(SV("-1.234567E-01"), en_US, SV("{:.6LE}"), F(-1.234567e-1)); - test(SV("-1.234567E+00"), en_US, SV("{:.6LE}"), F(-1.234567e0)); - test(SV("-1.234567E+01"), en_US, SV("{:.6LE}"), F(-1.234567e1)); - test(SV("-1.234567E+02"), en_US, SV("{:.6LE}"), F(-1.234567e2)); - test(SV("-1.234567E+03"), en_US, SV("{:.6LE}"), F(-1.234567e3)); - test(SV("-1.234567E+20"), en_US, SV("{:.6LE}"), F(-1.234567e20)); + test<"{:.6LE}">(SV("1#234567E-03"), F(1.234567e-3)); + test<"{:.6LE}">(SV("1#234567E-02"), F(1.234567e-2)); + test<"{:.6LE}">(SV("1#234567E-01"), F(1.234567e-1)); + test<"{:.6LE}">(SV("1#234567E+00"), F(1.234567e0)); + test<"{:.6LE}">(SV("1#234567E+01"), F(1.234567e1)); + test<"{:.6LE}">(SV("1#234567E+02"), F(1.234567e2)); + test<"{:.6LE}">(SV("1#234567E+03"), F(1.234567e3)); + test<"{:.6LE}">(SV("1#234567E+20"), F(1.234567e20)); + test<"{:.6LE}">(SV("-1#234567E-03"), F(-1.234567e-3)); + test<"{:.6LE}">(SV("-1#234567E-02"), F(-1.234567e-2)); + test<"{:.6LE}">(SV("-1#234567E-01"), F(-1.234567e-1)); + test<"{:.6LE}">(SV("-1#234567E+00"), F(-1.234567e0)); + test<"{:.6LE}">(SV("-1#234567E+01"), F(-1.234567e1)); + test<"{:.6LE}">(SV("-1#234567E+02"), F(-1.234567e2)); + test<"{:.6LE}">(SV("-1#234567E+03"), F(-1.234567e3)); + test<"{:.6LE}">(SV("-1#234567E+20"), F(-1.234567e20)); + + test<"{:.6LE}">(SV("1.234567E-03"), en_US, F(1.234567e-3)); + test<"{:.6LE}">(SV("1.234567E-02"), en_US, F(1.234567e-2)); + test<"{:.6LE}">(SV("1.234567E-01"), en_US, F(1.234567e-1)); + test<"{:.6LE}">(SV("1.234567E+00"), en_US, F(1.234567e0)); + test<"{:.6LE}">(SV("1.234567E+01"), en_US, F(1.234567e1)); + test<"{:.6LE}">(SV("1.234567E+02"), en_US, F(1.234567e2)); + test<"{:.6LE}">(SV("1.234567E+03"), en_US, F(1.234567e3)); + test<"{:.6LE}">(SV("1.234567E+20"), en_US, F(1.234567e20)); + test<"{:.6LE}">(SV("-1.234567E-03"), en_US, F(-1.234567e-3)); + test<"{:.6LE}">(SV("-1.234567E-02"), en_US, F(-1.234567e-2)); + test<"{:.6LE}">(SV("-1.234567E-01"), en_US, F(-1.234567e-1)); + test<"{:.6LE}">(SV("-1.234567E+00"), en_US, F(-1.234567e0)); + test<"{:.6LE}">(SV("-1.234567E+01"), en_US, F(-1.234567e1)); + test<"{:.6LE}">(SV("-1.234567E+02"), en_US, F(-1.234567e2)); + test<"{:.6LE}">(SV("-1.234567E+03"), en_US, F(-1.234567e3)); + test<"{:.6LE}">(SV("-1.234567E+20"), en_US, F(-1.234567e20)); std::locale::global(en_US); - test(SV("1#234567E-03"), loc, SV("{:.6LE}"), F(1.234567e-3)); - test(SV("1#234567E-02"), loc, SV("{:.6LE}"), F(1.234567e-2)); - test(SV("1#234567E-01"), loc, SV("{:.6LE}"), F(1.234567e-1)); - test(SV("1#234567E+00"), loc, SV("{:.6LE}"), F(1.234567e0)); - test(SV("1#234567E+01"), loc, SV("{:.6LE}"), F(1.234567e1)); - test(SV("1#234567E+02"), loc, SV("{:.6LE}"), F(1.234567e2)); - test(SV("1#234567E+03"), loc, SV("{:.6LE}"), F(1.234567e3)); - test(SV("1#234567E+20"), loc, SV("{:.6LE}"), F(1.234567e20)); - test(SV("-1#234567E-03"), loc, SV("{:.6LE}"), F(-1.234567e-3)); - test(SV("-1#234567E-02"), loc, SV("{:.6LE}"), F(-1.234567e-2)); - test(SV("-1#234567E-01"), loc, SV("{:.6LE}"), F(-1.234567e-1)); - test(SV("-1#234567E+00"), loc, SV("{:.6LE}"), F(-1.234567e0)); - test(SV("-1#234567E+01"), loc, SV("{:.6LE}"), F(-1.234567e1)); - test(SV("-1#234567E+02"), loc, SV("{:.6LE}"), F(-1.234567e2)); - test(SV("-1#234567E+03"), loc, SV("{:.6LE}"), F(-1.234567e3)); - test(SV("-1#234567E+20"), loc, SV("{:.6LE}"), F(-1.234567e20)); + test<"{:.6LE}">(SV("1#234567E-03"), loc, F(1.234567e-3)); + test<"{:.6LE}">(SV("1#234567E-02"), loc, F(1.234567e-2)); + test<"{:.6LE}">(SV("1#234567E-01"), loc, F(1.234567e-1)); + test<"{:.6LE}">(SV("1#234567E+00"), loc, F(1.234567e0)); + test<"{:.6LE}">(SV("1#234567E+01"), loc, F(1.234567e1)); + test<"{:.6LE}">(SV("1#234567E+02"), loc, F(1.234567e2)); + test<"{:.6LE}">(SV("1#234567E+03"), loc, F(1.234567e3)); + test<"{:.6LE}">(SV("1#234567E+20"), loc, F(1.234567e20)); + test<"{:.6LE}">(SV("-1#234567E-03"), loc, F(-1.234567e-3)); + test<"{:.6LE}">(SV("-1#234567E-02"), loc, F(-1.234567e-2)); + test<"{:.6LE}">(SV("-1#234567E-01"), loc, F(-1.234567e-1)); + test<"{:.6LE}">(SV("-1#234567E+00"), loc, F(-1.234567e0)); + test<"{:.6LE}">(SV("-1#234567E+01"), loc, F(-1.234567e1)); + test<"{:.6LE}">(SV("-1#234567E+02"), loc, F(-1.234567e2)); + test<"{:.6LE}">(SV("-1#234567E+03"), loc, F(-1.234567e3)); + test<"{:.6LE}">(SV("-1#234567E+20"), loc, F(-1.234567e20)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1.234567E+03$$$"), SV("{:$<15.6LE}"), F(1.234567e3)); - test(SV("$$$1.234567E+03"), SV("{:$>15.6LE}"), F(1.234567e3)); - test(SV("$1.234567E+03$$"), SV("{:$^15.6LE}"), F(1.234567e3)); - test(SV("0001.234567E+03"), SV("{:015.6LE}"), F(1.234567e3)); - test(SV("-1.234567E+03$$$"), SV("{:$<16.6LE}"), F(-1.234567e3)); - test(SV("$$$-1.234567E+03"), SV("{:$>16.6LE}"), F(-1.234567e3)); - test(SV("$-1.234567E+03$$"), SV("{:$^16.6LE}"), F(-1.234567e3)); - test(SV("-0001.234567E+03"), SV("{:016.6LE}"), F(-1.234567e3)); + test<"{:$<15.6LE}">(SV("1.234567E+03$$$"), F(1.234567e3)); + test<"{:$>15.6LE}">(SV("$$$1.234567E+03"), F(1.234567e3)); + test<"{:$^15.6LE}">(SV("$1.234567E+03$$"), F(1.234567e3)); + test<"{:015.6LE}">(SV("0001.234567E+03"), F(1.234567e3)); + test<"{:$<16.6LE}">(SV("-1.234567E+03$$$"), F(-1.234567e3)); + test<"{:$>16.6LE}">(SV("$$$-1.234567E+03"), F(-1.234567e3)); + test<"{:$^16.6LE}">(SV("$-1.234567E+03$$"), F(-1.234567e3)); + test<"{:016.6LE}">(SV("-0001.234567E+03"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1#234567E+03$$$"), SV("{:$<15.6LE}"), F(1.234567e3)); - test(SV("$$$1#234567E+03"), SV("{:$>15.6LE}"), F(1.234567e3)); - test(SV("$1#234567E+03$$"), SV("{:$^15.6LE}"), F(1.234567e3)); - test(SV("0001#234567E+03"), SV("{:015.6LE}"), F(1.234567e3)); - test(SV("-1#234567E+03$$$"), SV("{:$<16.6LE}"), F(-1.234567e3)); - test(SV("$$$-1#234567E+03"), SV("{:$>16.6LE}"), F(-1.234567e3)); - test(SV("$-1#234567E+03$$"), SV("{:$^16.6LE}"), F(-1.234567e3)); - test(SV("-0001#234567E+03"), SV("{:016.6LE}"), F(-1.234567e3)); - - test(SV("1.234567E+03$$$"), en_US, SV("{:$<15.6LE}"), F(1.234567e3)); - test(SV("$$$1.234567E+03"), en_US, SV("{:$>15.6LE}"), F(1.234567e3)); - test(SV("$1.234567E+03$$"), en_US, SV("{:$^15.6LE}"), F(1.234567e3)); - test(SV("0001.234567E+03"), en_US, SV("{:015.6LE}"), F(1.234567e3)); - test(SV("-1.234567E+03$$$"), en_US, SV("{:$<16.6LE}"), F(-1.234567e3)); - test(SV("$$$-1.234567E+03"), en_US, SV("{:$>16.6LE}"), F(-1.234567e3)); - test(SV("$-1.234567E+03$$"), en_US, SV("{:$^16.6LE}"), F(-1.234567e3)); - test(SV("-0001.234567E+03"), en_US, SV("{:016.6LE}"), F(-1.234567e3)); + test<"{:$<15.6LE}">(SV("1#234567E+03$$$"), F(1.234567e3)); + test<"{:$>15.6LE}">(SV("$$$1#234567E+03"), F(1.234567e3)); + test<"{:$^15.6LE}">(SV("$1#234567E+03$$"), F(1.234567e3)); + test<"{:015.6LE}">(SV("0001#234567E+03"), F(1.234567e3)); + test<"{:$<16.6LE}">(SV("-1#234567E+03$$$"), F(-1.234567e3)); + test<"{:$>16.6LE}">(SV("$$$-1#234567E+03"), F(-1.234567e3)); + test<"{:$^16.6LE}">(SV("$-1#234567E+03$$"), F(-1.234567e3)); + test<"{:016.6LE}">(SV("-0001#234567E+03"), F(-1.234567e3)); + + test<"{:$<15.6LE}">(SV("1.234567E+03$$$"), en_US, F(1.234567e3)); + test<"{:$>15.6LE}">(SV("$$$1.234567E+03"), en_US, F(1.234567e3)); + test<"{:$^15.6LE}">(SV("$1.234567E+03$$"), en_US, F(1.234567e3)); + test<"{:015.6LE}">(SV("0001.234567E+03"), en_US, F(1.234567e3)); + test<"{:$<16.6LE}">(SV("-1.234567E+03$$$"), en_US, F(-1.234567e3)); + test<"{:$>16.6LE}">(SV("$$$-1.234567E+03"), en_US, F(-1.234567e3)); + test<"{:$^16.6LE}">(SV("$-1.234567E+03$$"), en_US, F(-1.234567e3)); + test<"{:016.6LE}">(SV("-0001.234567E+03"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1#234567E+03$$$"), loc, SV("{:$<15.6LE}"), F(1.234567e3)); - test(SV("$$$1#234567E+03"), loc, SV("{:$>15.6LE}"), F(1.234567e3)); - test(SV("$1#234567E+03$$"), loc, SV("{:$^15.6LE}"), F(1.234567e3)); - test(SV("0001#234567E+03"), loc, SV("{:015.6LE}"), F(1.234567e3)); - test(SV("-1#234567E+03$$$"), loc, SV("{:$<16.6LE}"), F(-1.234567e3)); - test(SV("$$$-1#234567E+03"), loc, SV("{:$>16.6LE}"), F(-1.234567e3)); - test(SV("$-1#234567E+03$$"), loc, SV("{:$^16.6LE}"), F(-1.234567e3)); - test(SV("-0001#234567E+03"), loc, SV("{:016.6LE}"), F(-1.234567e3)); + test<"{:$<15.6LE}">(SV("1#234567E+03$$$"), loc, F(1.234567e3)); + test<"{:$>15.6LE}">(SV("$$$1#234567E+03"), loc, F(1.234567e3)); + test<"{:$^15.6LE}">(SV("$1#234567E+03$$"), loc, F(1.234567e3)); + test<"{:015.6LE}">(SV("0001#234567E+03"), loc, F(1.234567e3)); + test<"{:$<16.6LE}">(SV("-1#234567E+03$$$"), loc, F(-1.234567e3)); + test<"{:$>16.6LE}">(SV("$$$-1#234567E+03"), loc, F(-1.234567e3)); + test<"{:$^16.6LE}">(SV("$-1#234567E+03$$"), loc, F(-1.234567e3)); + test<"{:016.6LE}">(SV("-0001#234567E+03"), loc, F(-1.234567e3)); } template @@ -1188,188 +1192,188 @@ // *** Basic *** std::locale::global(en_US); - test(SV("0.000001"), SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0.000012"), SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0.000123"), SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0.001235"), SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0.012346"), SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0.123457"), SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1.234567"), SV("{:.6Lf}"), F(1.234567e0)); - test(SV("12.345670"), SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0.000001"), F(1.234567e-6)); + test<"{:.6Lf}">(SV("0.000012"), F(1.234567e-5)); + test<"{:.6Lf}">(SV("0.000123"), F(1.234567e-4)); + test<"{:.6Lf}">(SV("0.001235"), F(1.234567e-3)); + test<"{:.6Lf}">(SV("0.012346"), F(1.234567e-2)); + test<"{:.6Lf}">(SV("0.123457"), F(1.234567e-1)); + test<"{:.6Lf}">(SV("1.234567"), F(1.234567e0)); + test<"{:.6Lf}">(SV("12.345670"), F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("123.456700"), SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1,234.567000"), SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12,345.670000"), SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123,456.700000"), SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1,234,567.000000"), SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12,345,670.000000"), SV("{:.6Lf}"), F(1.234567e7)); - test(SV("123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("123.456700"), F(1.234567e2)); + test<"{:.6Lf}">(SV("1,234.567000"), F(1.234567e3)); + test<"{:.6Lf}">(SV("12,345.670000"), F(1.234567e4)); + test<"{:.6Lf}">(SV("123,456.700000"), F(1.234567e5)); + test<"{:.6Lf}">(SV("1,234,567.000000"), F(1.234567e6)); + test<"{:.6Lf}">(SV("12,345,670.000000"), F(1.234567e7)); + test<"{:.6Lf}">(SV("123,456,700,000,000,000,000.000000"), F(1.234567e20)); } - test(SV("-0.000001"), SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0.000012"), SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0.000123"), SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0.001235"), SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0.012346"), SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0.123457"), SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1.234567"), SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-12.345670"), SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0.000001"), F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0.000012"), F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0.000123"), F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0.001235"), F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0.012346"), F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0.123457"), F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1.234567"), F(-1.234567e0)); + test<"{:.6Lf}">(SV("-12.345670"), F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-123.456700"), SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1,234.567000"), SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12,345.670000"), SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123,456.700000"), SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1,234,567.000000"), SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12,345,670.000000"), SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-123.456700"), F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1,234.567000"), F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12,345.670000"), F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123,456.700000"), F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1,234,567.000000"), F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12,345,670.000000"), F(-1.234567e7)); + test<"{:.6Lf}">(SV("-123,456,700,000,000,000,000.000000"), F(-1.234567e20)); } std::locale::global(loc); - test(SV("0#000001"), SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0#000012"), SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0#000123"), SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0#001235"), SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0#012346"), SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0#123457"), SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1#234567"), SV("{:.6Lf}"), F(1.234567e0)); - test(SV("1_2#345670"), SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0#000001"), F(1.234567e-6)); + test<"{:.6Lf}">(SV("0#000012"), F(1.234567e-5)); + test<"{:.6Lf}">(SV("0#000123"), F(1.234567e-4)); + test<"{:.6Lf}">(SV("0#001235"), F(1.234567e-3)); + test<"{:.6Lf}">(SV("0#012346"), F(1.234567e-2)); + test<"{:.6Lf}">(SV("0#123457"), F(1.234567e-1)); + test<"{:.6Lf}">(SV("1#234567"), F(1.234567e0)); + test<"{:.6Lf}">(SV("1_2#345670"), F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("12_3#456700"), SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1_23_4#567000"), SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12_34_5#670000"), SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123_45_6#700000"), SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1_234_56_7#000000"), SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12_345_67_0#000000"), SV("{:.6Lf}"), F(1.234567e7)); - test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("12_3#456700"), F(1.234567e2)); + test<"{:.6Lf}">(SV("1_23_4#567000"), F(1.234567e3)); + test<"{:.6Lf}">(SV("12_34_5#670000"), F(1.234567e4)); + test<"{:.6Lf}">(SV("123_45_6#700000"), F(1.234567e5)); + test<"{:.6Lf}">(SV("1_234_56_7#000000"), F(1.234567e6)); + test<"{:.6Lf}">(SV("12_345_67_0#000000"), F(1.234567e7)); + test<"{:.6Lf}">(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), F(1.234567e20)); } - test(SV("-0#000001"), SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0#000012"), SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0#000123"), SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0#001235"), SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0#012346"), SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0#123457"), SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1#234567"), SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-1_2#345670"), SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0#000001"), F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0#000012"), F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0#000123"), F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0#001235"), F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0#012346"), F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0#123457"), F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1#234567"), F(-1.234567e0)); + test<"{:.6Lf}">(SV("-1_2#345670"), F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-12_3#456700"), SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1_23_4#567000"), SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12_34_5#670000"), SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123_45_6#700000"), SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1_234_56_7#000000"), SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12_345_67_0#000000"), SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-12_3#456700"), F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1_23_4#567000"), F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12_34_5#670000"), F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123_45_6#700000"), F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1_234_56_7#000000"), F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12_345_67_0#000000"), F(-1.234567e7)); + test<"{:.6Lf}">(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), F(-1.234567e20)); } - test(SV("0.000001"), en_US, SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0.000012"), en_US, SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0.000123"), en_US, SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0.001235"), en_US, SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0.012346"), en_US, SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0.123457"), en_US, SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1.234567"), en_US, SV("{:.6Lf}"), F(1.234567e0)); - test(SV("12.345670"), en_US, SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0.000001"), en_US, F(1.234567e-6)); + test<"{:.6Lf}">(SV("0.000012"), en_US, F(1.234567e-5)); + test<"{:.6Lf}">(SV("0.000123"), en_US, F(1.234567e-4)); + test<"{:.6Lf}">(SV("0.001235"), en_US, F(1.234567e-3)); + test<"{:.6Lf}">(SV("0.012346"), en_US, F(1.234567e-2)); + test<"{:.6Lf}">(SV("0.123457"), en_US, F(1.234567e-1)); + test<"{:.6Lf}">(SV("1.234567"), en_US, F(1.234567e0)); + test<"{:.6Lf}">(SV("12.345670"), en_US, F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("123.456700"), en_US, SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1,234.567000"), en_US, SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12,345.670000"), en_US, SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123,456.700000"), en_US, SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1,234,567.000000"), en_US, SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12,345,670.000000"), en_US, SV("{:.6Lf}"), F(1.234567e7)); - test(SV("123,456,700,000,000,000,000.000000"), en_US, SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("123.456700"), en_US, F(1.234567e2)); + test<"{:.6Lf}">(SV("1,234.567000"), en_US, F(1.234567e3)); + test<"{:.6Lf}">(SV("12,345.670000"), en_US, F(1.234567e4)); + test<"{:.6Lf}">(SV("123,456.700000"), en_US, F(1.234567e5)); + test<"{:.6Lf}">(SV("1,234,567.000000"), en_US, F(1.234567e6)); + test<"{:.6Lf}">(SV("12,345,670.000000"), en_US, F(1.234567e7)); + test<"{:.6Lf}">(SV("123,456,700,000,000,000,000.000000"), en_US, F(1.234567e20)); } - test(SV("-0.000001"), en_US, SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0.000012"), en_US, SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0.000123"), en_US, SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0.001235"), en_US, SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0.012346"), en_US, SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0.123457"), en_US, SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1.234567"), en_US, SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-12.345670"), en_US, SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0.000001"), en_US, F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0.000012"), en_US, F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0.000123"), en_US, F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0.001235"), en_US, F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0.012346"), en_US, F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0.123457"), en_US, F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1.234567"), en_US, F(-1.234567e0)); + test<"{:.6Lf}">(SV("-12.345670"), en_US, F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-123.456700"), en_US, SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1,234.567000"), en_US, SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12,345.670000"), en_US, SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123,456.700000"), en_US, SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1,234,567.000000"), en_US, SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12,345,670.000000"), en_US, SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-123,456,700,000,000,000,000.000000"), en_US, SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-123.456700"), en_US, F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1,234.567000"), en_US, F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12,345.670000"), en_US, F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123,456.700000"), en_US, F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1,234,567.000000"), en_US, F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12,345,670.000000"), en_US, F(-1.234567e7)); + test<"{:.6Lf}">(SV("-123,456,700,000,000,000,000.000000"), en_US, F(-1.234567e20)); } std::locale::global(en_US); - test(SV("0#000001"), loc, SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0#000012"), loc, SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0#000123"), loc, SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0#001235"), loc, SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0#012346"), loc, SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0#123457"), loc, SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1#234567"), loc, SV("{:.6Lf}"), F(1.234567e0)); - test(SV("1_2#345670"), loc, SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0#000001"), loc, F(1.234567e-6)); + test<"{:.6Lf}">(SV("0#000012"), loc, F(1.234567e-5)); + test<"{:.6Lf}">(SV("0#000123"), loc, F(1.234567e-4)); + test<"{:.6Lf}">(SV("0#001235"), loc, F(1.234567e-3)); + test<"{:.6Lf}">(SV("0#012346"), loc, F(1.234567e-2)); + test<"{:.6Lf}">(SV("0#123457"), loc, F(1.234567e-1)); + test<"{:.6Lf}">(SV("1#234567"), loc, F(1.234567e0)); + test<"{:.6Lf}">(SV("1_2#345670"), loc, F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("12_3#456700"), loc, SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1_23_4#567000"), loc, SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12_34_5#670000"), loc, SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123_45_6#700000"), loc, SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1_234_56_7#000000"), loc, SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12_345_67_0#000000"), loc, SV("{:.6Lf}"), F(1.234567e7)); - test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("12_3#456700"), loc, F(1.234567e2)); + test<"{:.6Lf}">(SV("1_23_4#567000"), loc, F(1.234567e3)); + test<"{:.6Lf}">(SV("12_34_5#670000"), loc, F(1.234567e4)); + test<"{:.6Lf}">(SV("123_45_6#700000"), loc, F(1.234567e5)); + test<"{:.6Lf}">(SV("1_234_56_7#000000"), loc, F(1.234567e6)); + test<"{:.6Lf}">(SV("12_345_67_0#000000"), loc, F(1.234567e7)); + test<"{:.6Lf}">(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, F(1.234567e20)); } - test(SV("-0#000001"), loc, SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0#000012"), loc, SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0#000123"), loc, SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0#001235"), loc, SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0#012346"), loc, SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0#123457"), loc, SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1#234567"), loc, SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-1_2#345670"), loc, SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0#000001"), loc, F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0#000012"), loc, F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0#000123"), loc, F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0#001235"), loc, F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0#012346"), loc, F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0#123457"), loc, F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1#234567"), loc, F(-1.234567e0)); + test<"{:.6Lf}">(SV("-1_2#345670"), loc, F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-12_3#456700"), loc, SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1_23_4#567000"), loc, SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12_34_5#670000"), loc, SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123_45_6#700000"), loc, SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1_234_56_7#000000"), loc, SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12_345_67_0#000000"), loc, SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-12_3#456700"), loc, F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1_23_4#567000"), loc, F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12_34_5#670000"), loc, F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123_45_6#700000"), loc, F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1_234_56_7#000000"), loc, F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12_345_67_0#000000"), loc, F(-1.234567e7)); + test<"{:.6Lf}">(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, F(-1.234567e20)); } // *** Fill, align, zero padding *** if constexpr (sizeof(F) > sizeof(float)) { std::locale::global(en_US); - test(SV("1,234.567000$$$"), SV("{:$<15.6Lf}"), F(1.234567e3)); - test(SV("$$$1,234.567000"), SV("{:$>15.6Lf}"), F(1.234567e3)); - test(SV("$1,234.567000$$"), SV("{:$^15.6Lf}"), F(1.234567e3)); - test(SV("0001,234.567000"), SV("{:015.6Lf}"), F(1.234567e3)); - test(SV("-1,234.567000$$$"), SV("{:$<16.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1,234.567000"), SV("{:$>16.6Lf}"), F(-1.234567e3)); - test(SV("$-1,234.567000$$"), SV("{:$^16.6Lf}"), F(-1.234567e3)); - test(SV("-0001,234.567000"), SV("{:016.6Lf}"), F(-1.234567e3)); + test<"{:$<15.6Lf}">(SV("1,234.567000$$$"), F(1.234567e3)); + test<"{:$>15.6Lf}">(SV("$$$1,234.567000"), F(1.234567e3)); + test<"{:$^15.6Lf}">(SV("$1,234.567000$$"), F(1.234567e3)); + test<"{:015.6Lf}">(SV("0001,234.567000"), F(1.234567e3)); + test<"{:$<16.6Lf}">(SV("-1,234.567000$$$"), F(-1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$-1,234.567000"), F(-1.234567e3)); + test<"{:$^16.6Lf}">(SV("$-1,234.567000$$"), F(-1.234567e3)); + test<"{:016.6Lf}">(SV("-0001,234.567000"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1_23_4#567000$$$"), SV("{:$<16.6Lf}"), F(1.234567e3)); - test(SV("$$$1_23_4#567000"), SV("{:$>16.6Lf}"), F(1.234567e3)); - test(SV("$1_23_4#567000$$"), SV("{:$^16.6Lf}"), F(1.234567e3)); - test(SV("0001_23_4#567000"), SV("{:016.6Lf}"), F(1.234567e3)); - test(SV("-1_23_4#567000$$$"), SV("{:$<17.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#567000"), SV("{:$>17.6Lf}"), F(-1.234567e3)); - test(SV("$-1_23_4#567000$$"), SV("{:$^17.6Lf}"), F(-1.234567e3)); - test(SV("-0001_23_4#567000"), SV("{:017.6Lf}"), F(-1.234567e3)); - - test(SV("1,234.567000$$$"), en_US, SV("{:$<15.6Lf}"), F(1.234567e3)); - test(SV("$$$1,234.567000"), en_US, SV("{:$>15.6Lf}"), F(1.234567e3)); - test(SV("$1,234.567000$$"), en_US, SV("{:$^15.6Lf}"), F(1.234567e3)); - test(SV("0001,234.567000"), en_US, SV("{:015.6Lf}"), F(1.234567e3)); - test(SV("-1,234.567000$$$"), en_US, SV("{:$<16.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1,234.567000"), en_US, SV("{:$>16.6Lf}"), F(-1.234567e3)); - test(SV("$-1,234.567000$$"), en_US, SV("{:$^16.6Lf}"), F(-1.234567e3)); - test(SV("-0001,234.567000"), en_US, SV("{:016.6Lf}"), F(-1.234567e3)); + test<"{:$<16.6Lf}">(SV("1_23_4#567000$$$"), F(1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$1_23_4#567000"), F(1.234567e3)); + test<"{:$^16.6Lf}">(SV("$1_23_4#567000$$"), F(1.234567e3)); + test<"{:016.6Lf}">(SV("0001_23_4#567000"), F(1.234567e3)); + test<"{:$<17.6Lf}">(SV("-1_23_4#567000$$$"), F(-1.234567e3)); + test<"{:$>17.6Lf}">(SV("$$$-1_23_4#567000"), F(-1.234567e3)); + test<"{:$^17.6Lf}">(SV("$-1_23_4#567000$$"), F(-1.234567e3)); + test<"{:017.6Lf}">(SV("-0001_23_4#567000"), F(-1.234567e3)); + + test<"{:$<15.6Lf}">(SV("1,234.567000$$$"), en_US, F(1.234567e3)); + test<"{:$>15.6Lf}">(SV("$$$1,234.567000"), en_US, F(1.234567e3)); + test<"{:$^15.6Lf}">(SV("$1,234.567000$$"), en_US, F(1.234567e3)); + test<"{:015.6Lf}">(SV("0001,234.567000"), en_US, F(1.234567e3)); + test<"{:$<16.6Lf}">(SV("-1,234.567000$$$"), en_US, F(-1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$-1,234.567000"), en_US, F(-1.234567e3)); + test<"{:$^16.6Lf}">(SV("$-1,234.567000$$"), en_US, F(-1.234567e3)); + test<"{:016.6Lf}">(SV("-0001,234.567000"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1_23_4#567000$$$"), loc, SV("{:$<16.6Lf}"), F(1.234567e3)); - test(SV("$$$1_23_4#567000"), loc, SV("{:$>16.6Lf}"), F(1.234567e3)); - test(SV("$1_23_4#567000$$"), loc, SV("{:$^16.6Lf}"), F(1.234567e3)); - test(SV("0001_23_4#567000"), loc, SV("{:016.6Lf}"), F(1.234567e3)); - test(SV("-1_23_4#567000$$$"), loc, SV("{:$<17.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#567000"), loc, SV("{:$>17.6Lf}"), F(-1.234567e3)); - test(SV("$-1_23_4#567000$$"), loc, SV("{:$^17.6Lf}"), F(-1.234567e3)); - test(SV("-0001_23_4#567000"), loc, SV("{:017.6Lf}"), F(-1.234567e3)); + test<"{:$<16.6Lf}">(SV("1_23_4#567000$$$"), loc, F(1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$1_23_4#567000"), loc, F(1.234567e3)); + test<"{:$^16.6Lf}">(SV("$1_23_4#567000$$"), loc, F(1.234567e3)); + test<"{:016.6Lf}">(SV("0001_23_4#567000"), loc, F(1.234567e3)); + test<"{:$<17.6Lf}">(SV("-1_23_4#567000$$$"), loc, F(-1.234567e3)); + test<"{:$>17.6Lf}">(SV("$$$-1_23_4#567000"), loc, F(-1.234567e3)); + test<"{:$^17.6Lf}">(SV("$-1_23_4#567000$$"), loc, F(-1.234567e3)); + test<"{:017.6Lf}">(SV("-0001_23_4#567000"), loc, F(-1.234567e3)); } } @@ -1380,188 +1384,188 @@ // *** Basic *** std::locale::global(en_US); - test(SV("0.000001"), SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0.000012"), SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0.000123"), SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0.001235"), SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0.012346"), SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0.123457"), SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1.234567"), SV("{:.6Lf}"), F(1.234567e0)); - test(SV("12.345670"), SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0.000001"), F(1.234567e-6)); + test<"{:.6Lf}">(SV("0.000012"), F(1.234567e-5)); + test<"{:.6Lf}">(SV("0.000123"), F(1.234567e-4)); + test<"{:.6Lf}">(SV("0.001235"), F(1.234567e-3)); + test<"{:.6Lf}">(SV("0.012346"), F(1.234567e-2)); + test<"{:.6Lf}">(SV("0.123457"), F(1.234567e-1)); + test<"{:.6Lf}">(SV("1.234567"), F(1.234567e0)); + test<"{:.6Lf}">(SV("12.345670"), F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("123.456700"), SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1,234.567000"), SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12,345.670000"), SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123,456.700000"), SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1,234,567.000000"), SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12,345,670.000000"), SV("{:.6Lf}"), F(1.234567e7)); - test(SV("123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("123.456700"), F(1.234567e2)); + test<"{:.6Lf}">(SV("1,234.567000"), F(1.234567e3)); + test<"{:.6Lf}">(SV("12,345.670000"), F(1.234567e4)); + test<"{:.6Lf}">(SV("123,456.700000"), F(1.234567e5)); + test<"{:.6Lf}">(SV("1,234,567.000000"), F(1.234567e6)); + test<"{:.6Lf}">(SV("12,345,670.000000"), F(1.234567e7)); + test<"{:.6Lf}">(SV("123,456,700,000,000,000,000.000000"), F(1.234567e20)); } - test(SV("-0.000001"), SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0.000012"), SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0.000123"), SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0.001235"), SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0.012346"), SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0.123457"), SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1.234567"), SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-12.345670"), SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0.000001"), F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0.000012"), F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0.000123"), F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0.001235"), F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0.012346"), F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0.123457"), F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1.234567"), F(-1.234567e0)); + test<"{:.6Lf}">(SV("-12.345670"), F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-123.456700"), SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1,234.567000"), SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12,345.670000"), SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123,456.700000"), SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1,234,567.000000"), SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12,345,670.000000"), SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-123,456,700,000,000,000,000.000000"), SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-123.456700"), F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1,234.567000"), F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12,345.670000"), F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123,456.700000"), F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1,234,567.000000"), F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12,345,670.000000"), F(-1.234567e7)); + test<"{:.6Lf}">(SV("-123,456,700,000,000,000,000.000000"), F(-1.234567e20)); } std::locale::global(loc); - test(SV("0#000001"), SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0#000012"), SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0#000123"), SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0#001235"), SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0#012346"), SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0#123457"), SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1#234567"), SV("{:.6Lf}"), F(1.234567e0)); - test(SV("1_2#345670"), SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0#000001"), F(1.234567e-6)); + test<"{:.6Lf}">(SV("0#000012"), F(1.234567e-5)); + test<"{:.6Lf}">(SV("0#000123"), F(1.234567e-4)); + test<"{:.6Lf}">(SV("0#001235"), F(1.234567e-3)); + test<"{:.6Lf}">(SV("0#012346"), F(1.234567e-2)); + test<"{:.6Lf}">(SV("0#123457"), F(1.234567e-1)); + test<"{:.6Lf}">(SV("1#234567"), F(1.234567e0)); + test<"{:.6Lf}">(SV("1_2#345670"), F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("12_3#456700"), SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1_23_4#567000"), SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12_34_5#670000"), SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123_45_6#700000"), SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1_234_56_7#000000"), SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12_345_67_0#000000"), SV("{:.6Lf}"), F(1.234567e7)); - test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("12_3#456700"), F(1.234567e2)); + test<"{:.6Lf}">(SV("1_23_4#567000"), F(1.234567e3)); + test<"{:.6Lf}">(SV("12_34_5#670000"), F(1.234567e4)); + test<"{:.6Lf}">(SV("123_45_6#700000"), F(1.234567e5)); + test<"{:.6Lf}">(SV("1_234_56_7#000000"), F(1.234567e6)); + test<"{:.6Lf}">(SV("12_345_67_0#000000"), F(1.234567e7)); + test<"{:.6Lf}">(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), F(1.234567e20)); } - test(SV("-0#000001"), SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0#000012"), SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0#000123"), SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0#001235"), SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0#012346"), SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0#123457"), SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1#234567"), SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-1_2#345670"), SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0#000001"), F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0#000012"), F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0#000123"), F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0#001235"), F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0#012346"), F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0#123457"), F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1#234567"), F(-1.234567e0)); + test<"{:.6Lf}">(SV("-1_2#345670"), F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-12_3#456700"), SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1_23_4#567000"), SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12_34_5#670000"), SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123_45_6#700000"), SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1_234_56_7#000000"), SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12_345_67_0#000000"), SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-12_3#456700"), F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1_23_4#567000"), F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12_34_5#670000"), F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123_45_6#700000"), F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1_234_56_7#000000"), F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12_345_67_0#000000"), F(-1.234567e7)); + test<"{:.6Lf}">(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), F(-1.234567e20)); } - test(SV("0.000001"), en_US, SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0.000012"), en_US, SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0.000123"), en_US, SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0.001235"), en_US, SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0.012346"), en_US, SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0.123457"), en_US, SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1.234567"), en_US, SV("{:.6Lf}"), F(1.234567e0)); - test(SV("12.345670"), en_US, SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0.000001"), en_US, F(1.234567e-6)); + test<"{:.6Lf}">(SV("0.000012"), en_US, F(1.234567e-5)); + test<"{:.6Lf}">(SV("0.000123"), en_US, F(1.234567e-4)); + test<"{:.6Lf}">(SV("0.001235"), en_US, F(1.234567e-3)); + test<"{:.6Lf}">(SV("0.012346"), en_US, F(1.234567e-2)); + test<"{:.6Lf}">(SV("0.123457"), en_US, F(1.234567e-1)); + test<"{:.6Lf}">(SV("1.234567"), en_US, F(1.234567e0)); + test<"{:.6Lf}">(SV("12.345670"), en_US, F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("123.456700"), en_US, SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1,234.567000"), en_US, SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12,345.670000"), en_US, SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123,456.700000"), en_US, SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1,234,567.000000"), en_US, SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12,345,670.000000"), en_US, SV("{:.6Lf}"), F(1.234567e7)); - test(SV("123,456,700,000,000,000,000.000000"), en_US, SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("123.456700"), en_US, F(1.234567e2)); + test<"{:.6Lf}">(SV("1,234.567000"), en_US, F(1.234567e3)); + test<"{:.6Lf}">(SV("12,345.670000"), en_US, F(1.234567e4)); + test<"{:.6Lf}">(SV("123,456.700000"), en_US, F(1.234567e5)); + test<"{:.6Lf}">(SV("1,234,567.000000"), en_US, F(1.234567e6)); + test<"{:.6Lf}">(SV("12,345,670.000000"), en_US, F(1.234567e7)); + test<"{:.6Lf}">(SV("123,456,700,000,000,000,000.000000"), en_US, F(1.234567e20)); } - test(SV("-0.000001"), en_US, SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0.000012"), en_US, SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0.000123"), en_US, SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0.001235"), en_US, SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0.012346"), en_US, SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0.123457"), en_US, SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1.234567"), en_US, SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-12.345670"), en_US, SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0.000001"), en_US, F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0.000012"), en_US, F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0.000123"), en_US, F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0.001235"), en_US, F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0.012346"), en_US, F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0.123457"), en_US, F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1.234567"), en_US, F(-1.234567e0)); + test<"{:.6Lf}">(SV("-12.345670"), en_US, F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-123.456700"), en_US, SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1,234.567000"), en_US, SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12,345.670000"), en_US, SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123,456.700000"), en_US, SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1,234,567.000000"), en_US, SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12,345,670.000000"), en_US, SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-123,456,700,000,000,000,000.000000"), en_US, SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-123.456700"), en_US, F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1,234.567000"), en_US, F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12,345.670000"), en_US, F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123,456.700000"), en_US, F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1,234,567.000000"), en_US, F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12,345,670.000000"), en_US, F(-1.234567e7)); + test<"{:.6Lf}">(SV("-123,456,700,000,000,000,000.000000"), en_US, F(-1.234567e20)); } std::locale::global(en_US); - test(SV("0#000001"), loc, SV("{:.6Lf}"), F(1.234567e-6)); - test(SV("0#000012"), loc, SV("{:.6Lf}"), F(1.234567e-5)); - test(SV("0#000123"), loc, SV("{:.6Lf}"), F(1.234567e-4)); - test(SV("0#001235"), loc, SV("{:.6Lf}"), F(1.234567e-3)); - test(SV("0#012346"), loc, SV("{:.6Lf}"), F(1.234567e-2)); - test(SV("0#123457"), loc, SV("{:.6Lf}"), F(1.234567e-1)); - test(SV("1#234567"), loc, SV("{:.6Lf}"), F(1.234567e0)); - test(SV("1_2#345670"), loc, SV("{:.6Lf}"), F(1.234567e1)); + test<"{:.6Lf}">(SV("0#000001"), loc, F(1.234567e-6)); + test<"{:.6Lf}">(SV("0#000012"), loc, F(1.234567e-5)); + test<"{:.6Lf}">(SV("0#000123"), loc, F(1.234567e-4)); + test<"{:.6Lf}">(SV("0#001235"), loc, F(1.234567e-3)); + test<"{:.6Lf}">(SV("0#012346"), loc, F(1.234567e-2)); + test<"{:.6Lf}">(SV("0#123457"), loc, F(1.234567e-1)); + test<"{:.6Lf}">(SV("1#234567"), loc, F(1.234567e0)); + test<"{:.6Lf}">(SV("1_2#345670"), loc, F(1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("12_3#456700"), loc, SV("{:.6Lf}"), F(1.234567e2)); - test(SV("1_23_4#567000"), loc, SV("{:.6Lf}"), F(1.234567e3)); - test(SV("12_34_5#670000"), loc, SV("{:.6Lf}"), F(1.234567e4)); - test(SV("123_45_6#700000"), loc, SV("{:.6Lf}"), F(1.234567e5)); - test(SV("1_234_56_7#000000"), loc, SV("{:.6Lf}"), F(1.234567e6)); - test(SV("12_345_67_0#000000"), loc, SV("{:.6Lf}"), F(1.234567e7)); - test(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, SV("{:.6Lf}"), F(1.234567e20)); + test<"{:.6Lf}">(SV("12_3#456700"), loc, F(1.234567e2)); + test<"{:.6Lf}">(SV("1_23_4#567000"), loc, F(1.234567e3)); + test<"{:.6Lf}">(SV("12_34_5#670000"), loc, F(1.234567e4)); + test<"{:.6Lf}">(SV("123_45_6#700000"), loc, F(1.234567e5)); + test<"{:.6Lf}">(SV("1_234_56_7#000000"), loc, F(1.234567e6)); + test<"{:.6Lf}">(SV("12_345_67_0#000000"), loc, F(1.234567e7)); + test<"{:.6Lf}">(SV("1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, F(1.234567e20)); } - test(SV("-0#000001"), loc, SV("{:.6Lf}"), F(-1.234567e-6)); - test(SV("-0#000012"), loc, SV("{:.6Lf}"), F(-1.234567e-5)); - test(SV("-0#000123"), loc, SV("{:.6Lf}"), F(-1.234567e-4)); - test(SV("-0#001235"), loc, SV("{:.6Lf}"), F(-1.234567e-3)); - test(SV("-0#012346"), loc, SV("{:.6Lf}"), F(-1.234567e-2)); - test(SV("-0#123457"), loc, SV("{:.6Lf}"), F(-1.234567e-1)); - test(SV("-1#234567"), loc, SV("{:.6Lf}"), F(-1.234567e0)); - test(SV("-1_2#345670"), loc, SV("{:.6Lf}"), F(-1.234567e1)); + test<"{:.6Lf}">(SV("-0#000001"), loc, F(-1.234567e-6)); + test<"{:.6Lf}">(SV("-0#000012"), loc, F(-1.234567e-5)); + test<"{:.6Lf}">(SV("-0#000123"), loc, F(-1.234567e-4)); + test<"{:.6Lf}">(SV("-0#001235"), loc, F(-1.234567e-3)); + test<"{:.6Lf}">(SV("-0#012346"), loc, F(-1.234567e-2)); + test<"{:.6Lf}">(SV("-0#123457"), loc, F(-1.234567e-1)); + test<"{:.6Lf}">(SV("-1#234567"), loc, F(-1.234567e0)); + test<"{:.6Lf}">(SV("-1_2#345670"), loc, F(-1.234567e1)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-12_3#456700"), loc, SV("{:.6Lf}"), F(-1.234567e2)); - test(SV("-1_23_4#567000"), loc, SV("{:.6Lf}"), F(-1.234567e3)); - test(SV("-12_34_5#670000"), loc, SV("{:.6Lf}"), F(-1.234567e4)); - test(SV("-123_45_6#700000"), loc, SV("{:.6Lf}"), F(-1.234567e5)); - test(SV("-1_234_56_7#000000"), loc, SV("{:.6Lf}"), F(-1.234567e6)); - test(SV("-12_345_67_0#000000"), loc, SV("{:.6Lf}"), F(-1.234567e7)); - test(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, SV("{:.6Lf}"), F(-1.234567e20)); + test<"{:.6Lf}">(SV("-12_3#456700"), loc, F(-1.234567e2)); + test<"{:.6Lf}">(SV("-1_23_4#567000"), loc, F(-1.234567e3)); + test<"{:.6Lf}">(SV("-12_34_5#670000"), loc, F(-1.234567e4)); + test<"{:.6Lf}">(SV("-123_45_6#700000"), loc, F(-1.234567e5)); + test<"{:.6Lf}">(SV("-1_234_56_7#000000"), loc, F(-1.234567e6)); + test<"{:.6Lf}">(SV("-12_345_67_0#000000"), loc, F(-1.234567e7)); + test<"{:.6Lf}">(SV("-1_2_3_4_5_6_7_0_0_0_0_0_0_00_000_00_0#000000"), loc, F(-1.234567e20)); } // *** Fill, align, zero padding *** if constexpr (sizeof(F) > sizeof(float)) { std::locale::global(en_US); - test(SV("1,234.567000$$$"), SV("{:$<15.6Lf}"), F(1.234567e3)); - test(SV("$$$1,234.567000"), SV("{:$>15.6Lf}"), F(1.234567e3)); - test(SV("$1,234.567000$$"), SV("{:$^15.6Lf}"), F(1.234567e3)); - test(SV("0001,234.567000"), SV("{:015.6Lf}"), F(1.234567e3)); - test(SV("-1,234.567000$$$"), SV("{:$<16.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1,234.567000"), SV("{:$>16.6Lf}"), F(-1.234567e3)); - test(SV("$-1,234.567000$$"), SV("{:$^16.6Lf}"), F(-1.234567e3)); - test(SV("-0001,234.567000"), SV("{:016.6Lf}"), F(-1.234567e3)); + test<"{:$<15.6Lf}">(SV("1,234.567000$$$"), F(1.234567e3)); + test<"{:$>15.6Lf}">(SV("$$$1,234.567000"), F(1.234567e3)); + test<"{:$^15.6Lf}">(SV("$1,234.567000$$"), F(1.234567e3)); + test<"{:015.6Lf}">(SV("0001,234.567000"), F(1.234567e3)); + test<"{:$<16.6Lf}">(SV("-1,234.567000$$$"), F(-1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$-1,234.567000"), F(-1.234567e3)); + test<"{:$^16.6Lf}">(SV("$-1,234.567000$$"), F(-1.234567e3)); + test<"{:016.6Lf}">(SV("-0001,234.567000"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1_23_4#567000$$$"), SV("{:$<16.6Lf}"), F(1.234567e3)); - test(SV("$$$1_23_4#567000"), SV("{:$>16.6Lf}"), F(1.234567e3)); - test(SV("$1_23_4#567000$$"), SV("{:$^16.6Lf}"), F(1.234567e3)); - test(SV("0001_23_4#567000"), SV("{:016.6Lf}"), F(1.234567e3)); - test(SV("-1_23_4#567000$$$"), SV("{:$<17.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#567000"), SV("{:$>17.6Lf}"), F(-1.234567e3)); - test(SV("$-1_23_4#567000$$"), SV("{:$^17.6Lf}"), F(-1.234567e3)); - test(SV("-0001_23_4#567000"), SV("{:017.6Lf}"), F(-1.234567e3)); - - test(SV("1,234.567000$$$"), en_US, SV("{:$<15.6Lf}"), F(1.234567e3)); - test(SV("$$$1,234.567000"), en_US, SV("{:$>15.6Lf}"), F(1.234567e3)); - test(SV("$1,234.567000$$"), en_US, SV("{:$^15.6Lf}"), F(1.234567e3)); - test(SV("0001,234.567000"), en_US, SV("{:015.6Lf}"), F(1.234567e3)); - test(SV("-1,234.567000$$$"), en_US, SV("{:$<16.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1,234.567000"), en_US, SV("{:$>16.6Lf}"), F(-1.234567e3)); - test(SV("$-1,234.567000$$"), en_US, SV("{:$^16.6Lf}"), F(-1.234567e3)); - test(SV("-0001,234.567000"), en_US, SV("{:016.6Lf}"), F(-1.234567e3)); + test<"{:$<16.6Lf}">(SV("1_23_4#567000$$$"), F(1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$1_23_4#567000"), F(1.234567e3)); + test<"{:$^16.6Lf}">(SV("$1_23_4#567000$$"), F(1.234567e3)); + test<"{:016.6Lf}">(SV("0001_23_4#567000"), F(1.234567e3)); + test<"{:$<17.6Lf}">(SV("-1_23_4#567000$$$"), F(-1.234567e3)); + test<"{:$>17.6Lf}">(SV("$$$-1_23_4#567000"), F(-1.234567e3)); + test<"{:$^17.6Lf}">(SV("$-1_23_4#567000$$"), F(-1.234567e3)); + test<"{:017.6Lf}">(SV("-0001_23_4#567000"), F(-1.234567e3)); + + test<"{:$<15.6Lf}">(SV("1,234.567000$$$"), en_US, F(1.234567e3)); + test<"{:$>15.6Lf}">(SV("$$$1,234.567000"), en_US, F(1.234567e3)); + test<"{:$^15.6Lf}">(SV("$1,234.567000$$"), en_US, F(1.234567e3)); + test<"{:015.6Lf}">(SV("0001,234.567000"), en_US, F(1.234567e3)); + test<"{:$<16.6Lf}">(SV("-1,234.567000$$$"), en_US, F(-1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$-1,234.567000"), en_US, F(-1.234567e3)); + test<"{:$^16.6Lf}">(SV("$-1,234.567000$$"), en_US, F(-1.234567e3)); + test<"{:016.6Lf}">(SV("-0001,234.567000"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1_23_4#567000$$$"), loc, SV("{:$<16.6Lf}"), F(1.234567e3)); - test(SV("$$$1_23_4#567000"), loc, SV("{:$>16.6Lf}"), F(1.234567e3)); - test(SV("$1_23_4#567000$$"), loc, SV("{:$^16.6Lf}"), F(1.234567e3)); - test(SV("0001_23_4#567000"), loc, SV("{:016.6Lf}"), F(1.234567e3)); - test(SV("-1_23_4#567000$$$"), loc, SV("{:$<17.6Lf}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#567000"), loc, SV("{:$>17.6Lf}"), F(-1.234567e3)); - test(SV("$-1_23_4#567000$$"), loc, SV("{:$^17.6Lf}"), F(-1.234567e3)); - test(SV("-0001_23_4#567000"), loc, SV("{:017.6Lf}"), F(-1.234567e3)); + test<"{:$<16.6Lf}">(SV("1_23_4#567000$$$"), loc, F(1.234567e3)); + test<"{:$>16.6Lf}">(SV("$$$1_23_4#567000"), loc, F(1.234567e3)); + test<"{:$^16.6Lf}">(SV("$1_23_4#567000$$"), loc, F(1.234567e3)); + test<"{:016.6Lf}">(SV("0001_23_4#567000"), loc, F(1.234567e3)); + test<"{:$<17.6Lf}">(SV("-1_23_4#567000$$$"), loc, F(-1.234567e3)); + test<"{:$>17.6Lf}">(SV("$$$-1_23_4#567000"), loc, F(-1.234567e3)); + test<"{:$^17.6Lf}">(SV("$-1_23_4#567000$$"), loc, F(-1.234567e3)); + test<"{:017.6Lf}">(SV("-0001_23_4#567000"), loc, F(-1.234567e3)); } } @@ -1572,163 +1576,163 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.23457e-06"), SV("{:.6Lg}"), F(1.234567e-6)); - test(SV("1.23457e-05"), SV("{:.6Lg}"), F(1.234567e-5)); - test(SV("0.000123457"), SV("{:.6Lg}"), F(1.234567e-4)); - test(SV("0.00123457"), SV("{:.6Lg}"), F(1.234567e-3)); - test(SV("0.0123457"), SV("{:.6Lg}"), F(1.234567e-2)); - test(SV("0.123457"), SV("{:.6Lg}"), F(1.234567e-1)); - test(SV("1.23457"), SV("{:.6Lg}"), F(1.234567e0)); - test(SV("12.3457"), SV("{:.6Lg}"), F(1.234567e1)); - test(SV("123.457"), SV("{:.6Lg}"), F(1.234567e2)); - test(SV("1,234.57"), SV("{:.6Lg}"), F(1.234567e3)); - test(SV("12,345.7"), SV("{:.6Lg}"), F(1.234567e4)); - test(SV("123,457"), SV("{:.6Lg}"), F(1.234567e5)); - test(SV("1.23457e+06"), SV("{:.6Lg}"), F(1.234567e6)); - test(SV("1.23457e+07"), SV("{:.6Lg}"), F(1.234567e7)); - test(SV("-1.23457e-06"), SV("{:.6Lg}"), F(-1.234567e-6)); - test(SV("-1.23457e-05"), SV("{:.6Lg}"), F(-1.234567e-5)); - test(SV("-0.000123457"), SV("{:.6Lg}"), F(-1.234567e-4)); - test(SV("-0.00123457"), SV("{:.6Lg}"), F(-1.234567e-3)); - test(SV("-0.0123457"), SV("{:.6Lg}"), F(-1.234567e-2)); - test(SV("-0.123457"), SV("{:.6Lg}"), F(-1.234567e-1)); - test(SV("-1.23457"), SV("{:.6Lg}"), F(-1.234567e0)); - test(SV("-12.3457"), SV("{:.6Lg}"), F(-1.234567e1)); - test(SV("-123.457"), SV("{:.6Lg}"), F(-1.234567e2)); - test(SV("-1,234.57"), SV("{:.6Lg}"), F(-1.234567e3)); - test(SV("-12,345.7"), SV("{:.6Lg}"), F(-1.234567e4)); - test(SV("-123,457"), SV("{:.6Lg}"), F(-1.234567e5)); - test(SV("-1.23457e+06"), SV("{:.6Lg}"), F(-1.234567e6)); - test(SV("-1.23457e+07"), SV("{:.6Lg}"), F(-1.234567e7)); + test<"{:.6Lg}">(SV("1.23457e-06"), F(1.234567e-6)); + test<"{:.6Lg}">(SV("1.23457e-05"), F(1.234567e-5)); + test<"{:.6Lg}">(SV("0.000123457"), F(1.234567e-4)); + test<"{:.6Lg}">(SV("0.00123457"), F(1.234567e-3)); + test<"{:.6Lg}">(SV("0.0123457"), F(1.234567e-2)); + test<"{:.6Lg}">(SV("0.123457"), F(1.234567e-1)); + test<"{:.6Lg}">(SV("1.23457"), F(1.234567e0)); + test<"{:.6Lg}">(SV("12.3457"), F(1.234567e1)); + test<"{:.6Lg}">(SV("123.457"), F(1.234567e2)); + test<"{:.6Lg}">(SV("1,234.57"), F(1.234567e3)); + test<"{:.6Lg}">(SV("12,345.7"), F(1.234567e4)); + test<"{:.6Lg}">(SV("123,457"), F(1.234567e5)); + test<"{:.6Lg}">(SV("1.23457e+06"), F(1.234567e6)); + test<"{:.6Lg}">(SV("1.23457e+07"), F(1.234567e7)); + test<"{:.6Lg}">(SV("-1.23457e-06"), F(-1.234567e-6)); + test<"{:.6Lg}">(SV("-1.23457e-05"), F(-1.234567e-5)); + test<"{:.6Lg}">(SV("-0.000123457"), F(-1.234567e-4)); + test<"{:.6Lg}">(SV("-0.00123457"), F(-1.234567e-3)); + test<"{:.6Lg}">(SV("-0.0123457"), F(-1.234567e-2)); + test<"{:.6Lg}">(SV("-0.123457"), F(-1.234567e-1)); + test<"{:.6Lg}">(SV("-1.23457"), F(-1.234567e0)); + test<"{:.6Lg}">(SV("-12.3457"), F(-1.234567e1)); + test<"{:.6Lg}">(SV("-123.457"), F(-1.234567e2)); + test<"{:.6Lg}">(SV("-1,234.57"), F(-1.234567e3)); + test<"{:.6Lg}">(SV("-12,345.7"), F(-1.234567e4)); + test<"{:.6Lg}">(SV("-123,457"), F(-1.234567e5)); + test<"{:.6Lg}">(SV("-1.23457e+06"), F(-1.234567e6)); + test<"{:.6Lg}">(SV("-1.23457e+07"), F(-1.234567e7)); std::locale::global(loc); - test(SV("1#23457e-06"), SV("{:.6Lg}"), F(1.234567e-6)); - test(SV("1#23457e-05"), SV("{:.6Lg}"), F(1.234567e-5)); - test(SV("0#000123457"), SV("{:.6Lg}"), F(1.234567e-4)); - test(SV("0#00123457"), SV("{:.6Lg}"), F(1.234567e-3)); - test(SV("0#0123457"), SV("{:.6Lg}"), F(1.234567e-2)); - test(SV("0#123457"), SV("{:.6Lg}"), F(1.234567e-1)); - test(SV("1#23457"), SV("{:.6Lg}"), F(1.234567e0)); - test(SV("1_2#3457"), SV("{:.6Lg}"), F(1.234567e1)); - test(SV("12_3#457"), SV("{:.6Lg}"), F(1.234567e2)); - test(SV("1_23_4#57"), SV("{:.6Lg}"), F(1.234567e3)); - test(SV("12_34_5#7"), SV("{:.6Lg}"), F(1.234567e4)); - test(SV("123_45_7"), SV("{:.6Lg}"), F(1.234567e5)); - test(SV("1#23457e+06"), SV("{:.6Lg}"), F(1.234567e6)); - test(SV("1#23457e+07"), SV("{:.6Lg}"), F(1.234567e7)); - test(SV("-1#23457e-06"), SV("{:.6Lg}"), F(-1.234567e-6)); - test(SV("-1#23457e-05"), SV("{:.6Lg}"), F(-1.234567e-5)); - test(SV("-0#000123457"), SV("{:.6Lg}"), F(-1.234567e-4)); - test(SV("-0#00123457"), SV("{:.6Lg}"), F(-1.234567e-3)); - test(SV("-0#0123457"), SV("{:.6Lg}"), F(-1.234567e-2)); - test(SV("-0#123457"), SV("{:.6Lg}"), F(-1.234567e-1)); - test(SV("-1#23457"), SV("{:.6Lg}"), F(-1.234567e0)); - test(SV("-1_2#3457"), SV("{:.6Lg}"), F(-1.234567e1)); - test(SV("-12_3#457"), SV("{:.6Lg}"), F(-1.234567e2)); - test(SV("-1_23_4#57"), SV("{:.6Lg}"), F(-1.234567e3)); - test(SV("-12_34_5#7"), SV("{:.6Lg}"), F(-1.234567e4)); - test(SV("-123_45_7"), SV("{:.6Lg}"), F(-1.234567e5)); - test(SV("-1#23457e+06"), SV("{:.6Lg}"), F(-1.234567e6)); - test(SV("-1#23457e+07"), SV("{:.6Lg}"), F(-1.234567e7)); - - test(SV("1.23457e-06"), en_US, SV("{:.6Lg}"), F(1.234567e-6)); - test(SV("1.23457e-05"), en_US, SV("{:.6Lg}"), F(1.234567e-5)); - test(SV("0.000123457"), en_US, SV("{:.6Lg}"), F(1.234567e-4)); - test(SV("0.00123457"), en_US, SV("{:.6Lg}"), F(1.234567e-3)); - test(SV("0.0123457"), en_US, SV("{:.6Lg}"), F(1.234567e-2)); - test(SV("0.123457"), en_US, SV("{:.6Lg}"), F(1.234567e-1)); - test(SV("1.23457"), en_US, SV("{:.6Lg}"), F(1.234567e0)); - test(SV("12.3457"), en_US, SV("{:.6Lg}"), F(1.234567e1)); - test(SV("123.457"), en_US, SV("{:.6Lg}"), F(1.234567e2)); - test(SV("1,234.57"), en_US, SV("{:.6Lg}"), F(1.234567e3)); - test(SV("12,345.7"), en_US, SV("{:.6Lg}"), F(1.234567e4)); - test(SV("123,457"), en_US, SV("{:.6Lg}"), F(1.234567e5)); - test(SV("1.23457e+06"), en_US, SV("{:.6Lg}"), F(1.234567e6)); - test(SV("1.23457e+07"), en_US, SV("{:.6Lg}"), F(1.234567e7)); - test(SV("-1.23457e-06"), en_US, SV("{:.6Lg}"), F(-1.234567e-6)); - test(SV("-1.23457e-05"), en_US, SV("{:.6Lg}"), F(-1.234567e-5)); - test(SV("-0.000123457"), en_US, SV("{:.6Lg}"), F(-1.234567e-4)); - test(SV("-0.00123457"), en_US, SV("{:.6Lg}"), F(-1.234567e-3)); - test(SV("-0.0123457"), en_US, SV("{:.6Lg}"), F(-1.234567e-2)); - test(SV("-0.123457"), en_US, SV("{:.6Lg}"), F(-1.234567e-1)); - test(SV("-1.23457"), en_US, SV("{:.6Lg}"), F(-1.234567e0)); - test(SV("-12.3457"), en_US, SV("{:.6Lg}"), F(-1.234567e1)); - test(SV("-123.457"), en_US, SV("{:.6Lg}"), F(-1.234567e2)); - test(SV("-1,234.57"), en_US, SV("{:.6Lg}"), F(-1.234567e3)); - test(SV("-12,345.7"), en_US, SV("{:.6Lg}"), F(-1.234567e4)); - test(SV("-123,457"), en_US, SV("{:.6Lg}"), F(-1.234567e5)); - test(SV("-1.23457e+06"), en_US, SV("{:.6Lg}"), F(-1.234567e6)); - test(SV("-1.23457e+07"), en_US, SV("{:.6Lg}"), F(-1.234567e7)); + test<"{:.6Lg}">(SV("1#23457e-06"), F(1.234567e-6)); + test<"{:.6Lg}">(SV("1#23457e-05"), F(1.234567e-5)); + test<"{:.6Lg}">(SV("0#000123457"), F(1.234567e-4)); + test<"{:.6Lg}">(SV("0#00123457"), F(1.234567e-3)); + test<"{:.6Lg}">(SV("0#0123457"), F(1.234567e-2)); + test<"{:.6Lg}">(SV("0#123457"), F(1.234567e-1)); + test<"{:.6Lg}">(SV("1#23457"), F(1.234567e0)); + test<"{:.6Lg}">(SV("1_2#3457"), F(1.234567e1)); + test<"{:.6Lg}">(SV("12_3#457"), F(1.234567e2)); + test<"{:.6Lg}">(SV("1_23_4#57"), F(1.234567e3)); + test<"{:.6Lg}">(SV("12_34_5#7"), F(1.234567e4)); + test<"{:.6Lg}">(SV("123_45_7"), F(1.234567e5)); + test<"{:.6Lg}">(SV("1#23457e+06"), F(1.234567e6)); + test<"{:.6Lg}">(SV("1#23457e+07"), F(1.234567e7)); + test<"{:.6Lg}">(SV("-1#23457e-06"), F(-1.234567e-6)); + test<"{:.6Lg}">(SV("-1#23457e-05"), F(-1.234567e-5)); + test<"{:.6Lg}">(SV("-0#000123457"), F(-1.234567e-4)); + test<"{:.6Lg}">(SV("-0#00123457"), F(-1.234567e-3)); + test<"{:.6Lg}">(SV("-0#0123457"), F(-1.234567e-2)); + test<"{:.6Lg}">(SV("-0#123457"), F(-1.234567e-1)); + test<"{:.6Lg}">(SV("-1#23457"), F(-1.234567e0)); + test<"{:.6Lg}">(SV("-1_2#3457"), F(-1.234567e1)); + test<"{:.6Lg}">(SV("-12_3#457"), F(-1.234567e2)); + test<"{:.6Lg}">(SV("-1_23_4#57"), F(-1.234567e3)); + test<"{:.6Lg}">(SV("-12_34_5#7"), F(-1.234567e4)); + test<"{:.6Lg}">(SV("-123_45_7"), F(-1.234567e5)); + test<"{:.6Lg}">(SV("-1#23457e+06"), F(-1.234567e6)); + test<"{:.6Lg}">(SV("-1#23457e+07"), F(-1.234567e7)); + + test<"{:.6Lg}">(SV("1.23457e-06"), en_US, F(1.234567e-6)); + test<"{:.6Lg}">(SV("1.23457e-05"), en_US, F(1.234567e-5)); + test<"{:.6Lg}">(SV("0.000123457"), en_US, F(1.234567e-4)); + test<"{:.6Lg}">(SV("0.00123457"), en_US, F(1.234567e-3)); + test<"{:.6Lg}">(SV("0.0123457"), en_US, F(1.234567e-2)); + test<"{:.6Lg}">(SV("0.123457"), en_US, F(1.234567e-1)); + test<"{:.6Lg}">(SV("1.23457"), en_US, F(1.234567e0)); + test<"{:.6Lg}">(SV("12.3457"), en_US, F(1.234567e1)); + test<"{:.6Lg}">(SV("123.457"), en_US, F(1.234567e2)); + test<"{:.6Lg}">(SV("1,234.57"), en_US, F(1.234567e3)); + test<"{:.6Lg}">(SV("12,345.7"), en_US, F(1.234567e4)); + test<"{:.6Lg}">(SV("123,457"), en_US, F(1.234567e5)); + test<"{:.6Lg}">(SV("1.23457e+06"), en_US, F(1.234567e6)); + test<"{:.6Lg}">(SV("1.23457e+07"), en_US, F(1.234567e7)); + test<"{:.6Lg}">(SV("-1.23457e-06"), en_US, F(-1.234567e-6)); + test<"{:.6Lg}">(SV("-1.23457e-05"), en_US, F(-1.234567e-5)); + test<"{:.6Lg}">(SV("-0.000123457"), en_US, F(-1.234567e-4)); + test<"{:.6Lg}">(SV("-0.00123457"), en_US, F(-1.234567e-3)); + test<"{:.6Lg}">(SV("-0.0123457"), en_US, F(-1.234567e-2)); + test<"{:.6Lg}">(SV("-0.123457"), en_US, F(-1.234567e-1)); + test<"{:.6Lg}">(SV("-1.23457"), en_US, F(-1.234567e0)); + test<"{:.6Lg}">(SV("-12.3457"), en_US, F(-1.234567e1)); + test<"{:.6Lg}">(SV("-123.457"), en_US, F(-1.234567e2)); + test<"{:.6Lg}">(SV("-1,234.57"), en_US, F(-1.234567e3)); + test<"{:.6Lg}">(SV("-12,345.7"), en_US, F(-1.234567e4)); + test<"{:.6Lg}">(SV("-123,457"), en_US, F(-1.234567e5)); + test<"{:.6Lg}">(SV("-1.23457e+06"), en_US, F(-1.234567e6)); + test<"{:.6Lg}">(SV("-1.23457e+07"), en_US, F(-1.234567e7)); std::locale::global(en_US); - test(SV("1#23457e-06"), loc, SV("{:.6Lg}"), F(1.234567e-6)); - test(SV("1#23457e-05"), loc, SV("{:.6Lg}"), F(1.234567e-5)); - test(SV("0#000123457"), loc, SV("{:.6Lg}"), F(1.234567e-4)); - test(SV("0#00123457"), loc, SV("{:.6Lg}"), F(1.234567e-3)); - test(SV("0#0123457"), loc, SV("{:.6Lg}"), F(1.234567e-2)); - test(SV("0#123457"), loc, SV("{:.6Lg}"), F(1.234567e-1)); - test(SV("1#23457"), loc, SV("{:.6Lg}"), F(1.234567e0)); - test(SV("1_2#3457"), loc, SV("{:.6Lg}"), F(1.234567e1)); - test(SV("12_3#457"), loc, SV("{:.6Lg}"), F(1.234567e2)); - test(SV("1_23_4#57"), loc, SV("{:.6Lg}"), F(1.234567e3)); - test(SV("12_34_5#7"), loc, SV("{:.6Lg}"), F(1.234567e4)); - test(SV("123_45_7"), loc, SV("{:.6Lg}"), F(1.234567e5)); - test(SV("1#23457e+06"), loc, SV("{:.6Lg}"), F(1.234567e6)); - test(SV("1#23457e+07"), loc, SV("{:.6Lg}"), F(1.234567e7)); - test(SV("-1#23457e-06"), loc, SV("{:.6Lg}"), F(-1.234567e-6)); - test(SV("-1#23457e-05"), loc, SV("{:.6Lg}"), F(-1.234567e-5)); - test(SV("-0#000123457"), loc, SV("{:.6Lg}"), F(-1.234567e-4)); - test(SV("-0#00123457"), loc, SV("{:.6Lg}"), F(-1.234567e-3)); - test(SV("-0#0123457"), loc, SV("{:.6Lg}"), F(-1.234567e-2)); - test(SV("-0#123457"), loc, SV("{:.6Lg}"), F(-1.234567e-1)); - test(SV("-1#23457"), loc, SV("{:.6Lg}"), F(-1.234567e0)); - test(SV("-1_2#3457"), loc, SV("{:.6Lg}"), F(-1.234567e1)); - test(SV("-12_3#457"), loc, SV("{:.6Lg}"), F(-1.234567e2)); - test(SV("-1_23_4#57"), loc, SV("{:.6Lg}"), F(-1.234567e3)); - test(SV("-12_34_5#7"), loc, SV("{:.6Lg}"), F(-1.234567e4)); - test(SV("-123_45_7"), loc, SV("{:.6Lg}"), F(-1.234567e5)); - test(SV("-1#23457e+06"), loc, SV("{:.6Lg}"), F(-1.234567e6)); - test(SV("-1#23457e+07"), loc, SV("{:.6Lg}"), F(-1.234567e7)); + test<"{:.6Lg}">(SV("1#23457e-06"), loc, F(1.234567e-6)); + test<"{:.6Lg}">(SV("1#23457e-05"), loc, F(1.234567e-5)); + test<"{:.6Lg}">(SV("0#000123457"), loc, F(1.234567e-4)); + test<"{:.6Lg}">(SV("0#00123457"), loc, F(1.234567e-3)); + test<"{:.6Lg}">(SV("0#0123457"), loc, F(1.234567e-2)); + test<"{:.6Lg}">(SV("0#123457"), loc, F(1.234567e-1)); + test<"{:.6Lg}">(SV("1#23457"), loc, F(1.234567e0)); + test<"{:.6Lg}">(SV("1_2#3457"), loc, F(1.234567e1)); + test<"{:.6Lg}">(SV("12_3#457"), loc, F(1.234567e2)); + test<"{:.6Lg}">(SV("1_23_4#57"), loc, F(1.234567e3)); + test<"{:.6Lg}">(SV("12_34_5#7"), loc, F(1.234567e4)); + test<"{:.6Lg}">(SV("123_45_7"), loc, F(1.234567e5)); + test<"{:.6Lg}">(SV("1#23457e+06"), loc, F(1.234567e6)); + test<"{:.6Lg}">(SV("1#23457e+07"), loc, F(1.234567e7)); + test<"{:.6Lg}">(SV("-1#23457e-06"), loc, F(-1.234567e-6)); + test<"{:.6Lg}">(SV("-1#23457e-05"), loc, F(-1.234567e-5)); + test<"{:.6Lg}">(SV("-0#000123457"), loc, F(-1.234567e-4)); + test<"{:.6Lg}">(SV("-0#00123457"), loc, F(-1.234567e-3)); + test<"{:.6Lg}">(SV("-0#0123457"), loc, F(-1.234567e-2)); + test<"{:.6Lg}">(SV("-0#123457"), loc, F(-1.234567e-1)); + test<"{:.6Lg}">(SV("-1#23457"), loc, F(-1.234567e0)); + test<"{:.6Lg}">(SV("-1_2#3457"), loc, F(-1.234567e1)); + test<"{:.6Lg}">(SV("-12_3#457"), loc, F(-1.234567e2)); + test<"{:.6Lg}">(SV("-1_23_4#57"), loc, F(-1.234567e3)); + test<"{:.6Lg}">(SV("-12_34_5#7"), loc, F(-1.234567e4)); + test<"{:.6Lg}">(SV("-123_45_7"), loc, F(-1.234567e5)); + test<"{:.6Lg}">(SV("-1#23457e+06"), loc, F(-1.234567e6)); + test<"{:.6Lg}">(SV("-1#23457e+07"), loc, F(-1.234567e7)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1,234.57$$$"), SV("{:$<11.6Lg}"), F(1.234567e3)); - test(SV("$$$1,234.57"), SV("{:$>11.6Lg}"), F(1.234567e3)); - test(SV("$1,234.57$$"), SV("{:$^11.6Lg}"), F(1.234567e3)); - test(SV("0001,234.57"), SV("{:011.6Lg}"), F(1.234567e3)); - test(SV("-1,234.57$$$"), SV("{:$<12.6Lg}"), F(-1.234567e3)); - test(SV("$$$-1,234.57"), SV("{:$>12.6Lg}"), F(-1.234567e3)); - test(SV("$-1,234.57$$"), SV("{:$^12.6Lg}"), F(-1.234567e3)); - test(SV("-0001,234.57"), SV("{:012.6Lg}"), F(-1.234567e3)); + test<"{:$<11.6Lg}">(SV("1,234.57$$$"), F(1.234567e3)); + test<"{:$>11.6Lg}">(SV("$$$1,234.57"), F(1.234567e3)); + test<"{:$^11.6Lg}">(SV("$1,234.57$$"), F(1.234567e3)); + test<"{:011.6Lg}">(SV("0001,234.57"), F(1.234567e3)); + test<"{:$<12.6Lg}">(SV("-1,234.57$$$"), F(-1.234567e3)); + test<"{:$>12.6Lg}">(SV("$$$-1,234.57"), F(-1.234567e3)); + test<"{:$^12.6Lg}">(SV("$-1,234.57$$"), F(-1.234567e3)); + test<"{:012.6Lg}">(SV("-0001,234.57"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1_23_4#57$$$"), SV("{:$<12.6Lg}"), F(1.234567e3)); - test(SV("$$$1_23_4#57"), SV("{:$>12.6Lg}"), F(1.234567e3)); - test(SV("$1_23_4#57$$"), SV("{:$^12.6Lg}"), F(1.234567e3)); - test(SV("0001_23_4#57"), SV("{:012.6Lg}"), F(1.234567e3)); - test(SV("-1_23_4#57$$$"), SV("{:$<13.6Lg}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#57"), SV("{:$>13.6Lg}"), F(-1.234567e3)); - test(SV("$-1_23_4#57$$"), SV("{:$^13.6Lg}"), F(-1.234567e3)); - test(SV("-0001_23_4#57"), SV("{:013.6Lg}"), F(-1.234567e3)); - - test(SV("1,234.57$$$"), en_US, SV("{:$<11.6Lg}"), F(1.234567e3)); - test(SV("$$$1,234.57"), en_US, SV("{:$>11.6Lg}"), F(1.234567e3)); - test(SV("$1,234.57$$"), en_US, SV("{:$^11.6Lg}"), F(1.234567e3)); - test(SV("0001,234.57"), en_US, SV("{:011.6Lg}"), F(1.234567e3)); - test(SV("-1,234.57$$$"), en_US, SV("{:$<12.6Lg}"), F(-1.234567e3)); - test(SV("$$$-1,234.57"), en_US, SV("{:$>12.6Lg}"), F(-1.234567e3)); - test(SV("$-1,234.57$$"), en_US, SV("{:$^12.6Lg}"), F(-1.234567e3)); - test(SV("-0001,234.57"), en_US, SV("{:012.6Lg}"), F(-1.234567e3)); + test<"{:$<12.6Lg}">(SV("1_23_4#57$$$"), F(1.234567e3)); + test<"{:$>12.6Lg}">(SV("$$$1_23_4#57"), F(1.234567e3)); + test<"{:$^12.6Lg}">(SV("$1_23_4#57$$"), F(1.234567e3)); + test<"{:012.6Lg}">(SV("0001_23_4#57"), F(1.234567e3)); + test<"{:$<13.6Lg}">(SV("-1_23_4#57$$$"), F(-1.234567e3)); + test<"{:$>13.6Lg}">(SV("$$$-1_23_4#57"), F(-1.234567e3)); + test<"{:$^13.6Lg}">(SV("$-1_23_4#57$$"), F(-1.234567e3)); + test<"{:013.6Lg}">(SV("-0001_23_4#57"), F(-1.234567e3)); + + test<"{:$<11.6Lg}">(SV("1,234.57$$$"), en_US, F(1.234567e3)); + test<"{:$>11.6Lg}">(SV("$$$1,234.57"), en_US, F(1.234567e3)); + test<"{:$^11.6Lg}">(SV("$1,234.57$$"), en_US, F(1.234567e3)); + test<"{:011.6Lg}">(SV("0001,234.57"), en_US, F(1.234567e3)); + test<"{:$<12.6Lg}">(SV("-1,234.57$$$"), en_US, F(-1.234567e3)); + test<"{:$>12.6Lg}">(SV("$$$-1,234.57"), en_US, F(-1.234567e3)); + test<"{:$^12.6Lg}">(SV("$-1,234.57$$"), en_US, F(-1.234567e3)); + test<"{:012.6Lg}">(SV("-0001,234.57"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1_23_4#57$$$"), loc, SV("{:$<12.6Lg}"), F(1.234567e3)); - test(SV("$$$1_23_4#57"), loc, SV("{:$>12.6Lg}"), F(1.234567e3)); - test(SV("$1_23_4#57$$"), loc, SV("{:$^12.6Lg}"), F(1.234567e3)); - test(SV("0001_23_4#57"), loc, SV("{:012.6Lg}"), F(1.234567e3)); - test(SV("-1_23_4#57$$$"), loc, SV("{:$<13.6Lg}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#57"), loc, SV("{:$>13.6Lg}"), F(-1.234567e3)); - test(SV("$-1_23_4#57$$"), loc, SV("{:$^13.6Lg}"), F(-1.234567e3)); - test(SV("-0001_23_4#57"), loc, SV("{:013.6Lg}"), F(-1.234567e3)); + test<"{:$<12.6Lg}">(SV("1_23_4#57$$$"), loc, F(1.234567e3)); + test<"{:$>12.6Lg}">(SV("$$$1_23_4#57"), loc, F(1.234567e3)); + test<"{:$^12.6Lg}">(SV("$1_23_4#57$$"), loc, F(1.234567e3)); + test<"{:012.6Lg}">(SV("0001_23_4#57"), loc, F(1.234567e3)); + test<"{:$<13.6Lg}">(SV("-1_23_4#57$$$"), loc, F(-1.234567e3)); + test<"{:$>13.6Lg}">(SV("$$$-1_23_4#57"), loc, F(-1.234567e3)); + test<"{:$^13.6Lg}">(SV("$-1_23_4#57$$"), loc, F(-1.234567e3)); + test<"{:013.6Lg}">(SV("-0001_23_4#57"), loc, F(-1.234567e3)); } template @@ -1738,163 +1742,163 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.23457E-06"), SV("{:.6LG}"), F(1.234567e-6)); - test(SV("1.23457E-05"), SV("{:.6LG}"), F(1.234567e-5)); - test(SV("0.000123457"), SV("{:.6LG}"), F(1.234567e-4)); - test(SV("0.00123457"), SV("{:.6LG}"), F(1.234567e-3)); - test(SV("0.0123457"), SV("{:.6LG}"), F(1.234567e-2)); - test(SV("0.123457"), SV("{:.6LG}"), F(1.234567e-1)); - test(SV("1.23457"), SV("{:.6LG}"), F(1.234567e0)); - test(SV("12.3457"), SV("{:.6LG}"), F(1.234567e1)); - test(SV("123.457"), SV("{:.6LG}"), F(1.234567e2)); - test(SV("1,234.57"), SV("{:.6LG}"), F(1.234567e3)); - test(SV("12,345.7"), SV("{:.6LG}"), F(1.234567e4)); - test(SV("123,457"), SV("{:.6LG}"), F(1.234567e5)); - test(SV("1.23457E+06"), SV("{:.6LG}"), F(1.234567e6)); - test(SV("1.23457E+07"), SV("{:.6LG}"), F(1.234567e7)); - test(SV("-1.23457E-06"), SV("{:.6LG}"), F(-1.234567e-6)); - test(SV("-1.23457E-05"), SV("{:.6LG}"), F(-1.234567e-5)); - test(SV("-0.000123457"), SV("{:.6LG}"), F(-1.234567e-4)); - test(SV("-0.00123457"), SV("{:.6LG}"), F(-1.234567e-3)); - test(SV("-0.0123457"), SV("{:.6LG}"), F(-1.234567e-2)); - test(SV("-0.123457"), SV("{:.6LG}"), F(-1.234567e-1)); - test(SV("-1.23457"), SV("{:.6LG}"), F(-1.234567e0)); - test(SV("-12.3457"), SV("{:.6LG}"), F(-1.234567e1)); - test(SV("-123.457"), SV("{:.6LG}"), F(-1.234567e2)); - test(SV("-1,234.57"), SV("{:.6LG}"), F(-1.234567e3)); - test(SV("-12,345.7"), SV("{:.6LG}"), F(-1.234567e4)); - test(SV("-123,457"), SV("{:.6LG}"), F(-1.234567e5)); - test(SV("-1.23457E+06"), SV("{:.6LG}"), F(-1.234567e6)); - test(SV("-1.23457E+07"), SV("{:.6LG}"), F(-1.234567e7)); + test<"{:.6LG}">(SV("1.23457E-06"), F(1.234567e-6)); + test<"{:.6LG}">(SV("1.23457E-05"), F(1.234567e-5)); + test<"{:.6LG}">(SV("0.000123457"), F(1.234567e-4)); + test<"{:.6LG}">(SV("0.00123457"), F(1.234567e-3)); + test<"{:.6LG}">(SV("0.0123457"), F(1.234567e-2)); + test<"{:.6LG}">(SV("0.123457"), F(1.234567e-1)); + test<"{:.6LG}">(SV("1.23457"), F(1.234567e0)); + test<"{:.6LG}">(SV("12.3457"), F(1.234567e1)); + test<"{:.6LG}">(SV("123.457"), F(1.234567e2)); + test<"{:.6LG}">(SV("1,234.57"), F(1.234567e3)); + test<"{:.6LG}">(SV("12,345.7"), F(1.234567e4)); + test<"{:.6LG}">(SV("123,457"), F(1.234567e5)); + test<"{:.6LG}">(SV("1.23457E+06"), F(1.234567e6)); + test<"{:.6LG}">(SV("1.23457E+07"), F(1.234567e7)); + test<"{:.6LG}">(SV("-1.23457E-06"), F(-1.234567e-6)); + test<"{:.6LG}">(SV("-1.23457E-05"), F(-1.234567e-5)); + test<"{:.6LG}">(SV("-0.000123457"), F(-1.234567e-4)); + test<"{:.6LG}">(SV("-0.00123457"), F(-1.234567e-3)); + test<"{:.6LG}">(SV("-0.0123457"), F(-1.234567e-2)); + test<"{:.6LG}">(SV("-0.123457"), F(-1.234567e-1)); + test<"{:.6LG}">(SV("-1.23457"), F(-1.234567e0)); + test<"{:.6LG}">(SV("-12.3457"), F(-1.234567e1)); + test<"{:.6LG}">(SV("-123.457"), F(-1.234567e2)); + test<"{:.6LG}">(SV("-1,234.57"), F(-1.234567e3)); + test<"{:.6LG}">(SV("-12,345.7"), F(-1.234567e4)); + test<"{:.6LG}">(SV("-123,457"), F(-1.234567e5)); + test<"{:.6LG}">(SV("-1.23457E+06"), F(-1.234567e6)); + test<"{:.6LG}">(SV("-1.23457E+07"), F(-1.234567e7)); std::locale::global(loc); - test(SV("1#23457E-06"), SV("{:.6LG}"), F(1.234567e-6)); - test(SV("1#23457E-05"), SV("{:.6LG}"), F(1.234567e-5)); - test(SV("0#000123457"), SV("{:.6LG}"), F(1.234567e-4)); - test(SV("0#00123457"), SV("{:.6LG}"), F(1.234567e-3)); - test(SV("0#0123457"), SV("{:.6LG}"), F(1.234567e-2)); - test(SV("0#123457"), SV("{:.6LG}"), F(1.234567e-1)); - test(SV("1#23457"), SV("{:.6LG}"), F(1.234567e0)); - test(SV("1_2#3457"), SV("{:.6LG}"), F(1.234567e1)); - test(SV("12_3#457"), SV("{:.6LG}"), F(1.234567e2)); - test(SV("1_23_4#57"), SV("{:.6LG}"), F(1.234567e3)); - test(SV("12_34_5#7"), SV("{:.6LG}"), F(1.234567e4)); - test(SV("123_45_7"), SV("{:.6LG}"), F(1.234567e5)); - test(SV("1#23457E+06"), SV("{:.6LG}"), F(1.234567e6)); - test(SV("1#23457E+07"), SV("{:.6LG}"), F(1.234567e7)); - test(SV("-1#23457E-06"), SV("{:.6LG}"), F(-1.234567e-6)); - test(SV("-1#23457E-05"), SV("{:.6LG}"), F(-1.234567e-5)); - test(SV("-0#000123457"), SV("{:.6LG}"), F(-1.234567e-4)); - test(SV("-0#00123457"), SV("{:.6LG}"), F(-1.234567e-3)); - test(SV("-0#0123457"), SV("{:.6LG}"), F(-1.234567e-2)); - test(SV("-0#123457"), SV("{:.6LG}"), F(-1.234567e-1)); - test(SV("-1#23457"), SV("{:.6LG}"), F(-1.234567e0)); - test(SV("-1_2#3457"), SV("{:.6LG}"), F(-1.234567e1)); - test(SV("-12_3#457"), SV("{:.6LG}"), F(-1.234567e2)); - test(SV("-1_23_4#57"), SV("{:.6LG}"), F(-1.234567e3)); - test(SV("-12_34_5#7"), SV("{:.6LG}"), F(-1.234567e4)); - test(SV("-123_45_7"), SV("{:.6LG}"), F(-1.234567e5)); - test(SV("-1#23457E+06"), SV("{:.6LG}"), F(-1.234567e6)); - test(SV("-1#23457E+07"), SV("{:.6LG}"), F(-1.234567e7)); - - test(SV("1.23457E-06"), en_US, SV("{:.6LG}"), F(1.234567e-6)); - test(SV("1.23457E-05"), en_US, SV("{:.6LG}"), F(1.234567e-5)); - test(SV("0.000123457"), en_US, SV("{:.6LG}"), F(1.234567e-4)); - test(SV("0.00123457"), en_US, SV("{:.6LG}"), F(1.234567e-3)); - test(SV("0.0123457"), en_US, SV("{:.6LG}"), F(1.234567e-2)); - test(SV("0.123457"), en_US, SV("{:.6LG}"), F(1.234567e-1)); - test(SV("1.23457"), en_US, SV("{:.6LG}"), F(1.234567e0)); - test(SV("12.3457"), en_US, SV("{:.6LG}"), F(1.234567e1)); - test(SV("123.457"), en_US, SV("{:.6LG}"), F(1.234567e2)); - test(SV("1,234.57"), en_US, SV("{:.6LG}"), F(1.234567e3)); - test(SV("12,345.7"), en_US, SV("{:.6LG}"), F(1.234567e4)); - test(SV("123,457"), en_US, SV("{:.6LG}"), F(1.234567e5)); - test(SV("1.23457E+06"), en_US, SV("{:.6LG}"), F(1.234567e6)); - test(SV("1.23457E+07"), en_US, SV("{:.6LG}"), F(1.234567e7)); - test(SV("-1.23457E-06"), en_US, SV("{:.6LG}"), F(-1.234567e-6)); - test(SV("-1.23457E-05"), en_US, SV("{:.6LG}"), F(-1.234567e-5)); - test(SV("-0.000123457"), en_US, SV("{:.6LG}"), F(-1.234567e-4)); - test(SV("-0.00123457"), en_US, SV("{:.6LG}"), F(-1.234567e-3)); - test(SV("-0.0123457"), en_US, SV("{:.6LG}"), F(-1.234567e-2)); - test(SV("-0.123457"), en_US, SV("{:.6LG}"), F(-1.234567e-1)); - test(SV("-1.23457"), en_US, SV("{:.6LG}"), F(-1.234567e0)); - test(SV("-12.3457"), en_US, SV("{:.6LG}"), F(-1.234567e1)); - test(SV("-123.457"), en_US, SV("{:.6LG}"), F(-1.234567e2)); - test(SV("-1,234.57"), en_US, SV("{:.6LG}"), F(-1.234567e3)); - test(SV("-12,345.7"), en_US, SV("{:.6LG}"), F(-1.234567e4)); - test(SV("-123,457"), en_US, SV("{:.6LG}"), F(-1.234567e5)); - test(SV("-1.23457E+06"), en_US, SV("{:.6LG}"), F(-1.234567e6)); - test(SV("-1.23457E+07"), en_US, SV("{:.6LG}"), F(-1.234567e7)); + test<"{:.6LG}">(SV("1#23457E-06"), F(1.234567e-6)); + test<"{:.6LG}">(SV("1#23457E-05"), F(1.234567e-5)); + test<"{:.6LG}">(SV("0#000123457"), F(1.234567e-4)); + test<"{:.6LG}">(SV("0#00123457"), F(1.234567e-3)); + test<"{:.6LG}">(SV("0#0123457"), F(1.234567e-2)); + test<"{:.6LG}">(SV("0#123457"), F(1.234567e-1)); + test<"{:.6LG}">(SV("1#23457"), F(1.234567e0)); + test<"{:.6LG}">(SV("1_2#3457"), F(1.234567e1)); + test<"{:.6LG}">(SV("12_3#457"), F(1.234567e2)); + test<"{:.6LG}">(SV("1_23_4#57"), F(1.234567e3)); + test<"{:.6LG}">(SV("12_34_5#7"), F(1.234567e4)); + test<"{:.6LG}">(SV("123_45_7"), F(1.234567e5)); + test<"{:.6LG}">(SV("1#23457E+06"), F(1.234567e6)); + test<"{:.6LG}">(SV("1#23457E+07"), F(1.234567e7)); + test<"{:.6LG}">(SV("-1#23457E-06"), F(-1.234567e-6)); + test<"{:.6LG}">(SV("-1#23457E-05"), F(-1.234567e-5)); + test<"{:.6LG}">(SV("-0#000123457"), F(-1.234567e-4)); + test<"{:.6LG}">(SV("-0#00123457"), F(-1.234567e-3)); + test<"{:.6LG}">(SV("-0#0123457"), F(-1.234567e-2)); + test<"{:.6LG}">(SV("-0#123457"), F(-1.234567e-1)); + test<"{:.6LG}">(SV("-1#23457"), F(-1.234567e0)); + test<"{:.6LG}">(SV("-1_2#3457"), F(-1.234567e1)); + test<"{:.6LG}">(SV("-12_3#457"), F(-1.234567e2)); + test<"{:.6LG}">(SV("-1_23_4#57"), F(-1.234567e3)); + test<"{:.6LG}">(SV("-12_34_5#7"), F(-1.234567e4)); + test<"{:.6LG}">(SV("-123_45_7"), F(-1.234567e5)); + test<"{:.6LG}">(SV("-1#23457E+06"), F(-1.234567e6)); + test<"{:.6LG}">(SV("-1#23457E+07"), F(-1.234567e7)); + + test<"{:.6LG}">(SV("1.23457E-06"), en_US, F(1.234567e-6)); + test<"{:.6LG}">(SV("1.23457E-05"), en_US, F(1.234567e-5)); + test<"{:.6LG}">(SV("0.000123457"), en_US, F(1.234567e-4)); + test<"{:.6LG}">(SV("0.00123457"), en_US, F(1.234567e-3)); + test<"{:.6LG}">(SV("0.0123457"), en_US, F(1.234567e-2)); + test<"{:.6LG}">(SV("0.123457"), en_US, F(1.234567e-1)); + test<"{:.6LG}">(SV("1.23457"), en_US, F(1.234567e0)); + test<"{:.6LG}">(SV("12.3457"), en_US, F(1.234567e1)); + test<"{:.6LG}">(SV("123.457"), en_US, F(1.234567e2)); + test<"{:.6LG}">(SV("1,234.57"), en_US, F(1.234567e3)); + test<"{:.6LG}">(SV("12,345.7"), en_US, F(1.234567e4)); + test<"{:.6LG}">(SV("123,457"), en_US, F(1.234567e5)); + test<"{:.6LG}">(SV("1.23457E+06"), en_US, F(1.234567e6)); + test<"{:.6LG}">(SV("1.23457E+07"), en_US, F(1.234567e7)); + test<"{:.6LG}">(SV("-1.23457E-06"), en_US, F(-1.234567e-6)); + test<"{:.6LG}">(SV("-1.23457E-05"), en_US, F(-1.234567e-5)); + test<"{:.6LG}">(SV("-0.000123457"), en_US, F(-1.234567e-4)); + test<"{:.6LG}">(SV("-0.00123457"), en_US, F(-1.234567e-3)); + test<"{:.6LG}">(SV("-0.0123457"), en_US, F(-1.234567e-2)); + test<"{:.6LG}">(SV("-0.123457"), en_US, F(-1.234567e-1)); + test<"{:.6LG}">(SV("-1.23457"), en_US, F(-1.234567e0)); + test<"{:.6LG}">(SV("-12.3457"), en_US, F(-1.234567e1)); + test<"{:.6LG}">(SV("-123.457"), en_US, F(-1.234567e2)); + test<"{:.6LG}">(SV("-1,234.57"), en_US, F(-1.234567e3)); + test<"{:.6LG}">(SV("-12,345.7"), en_US, F(-1.234567e4)); + test<"{:.6LG}">(SV("-123,457"), en_US, F(-1.234567e5)); + test<"{:.6LG}">(SV("-1.23457E+06"), en_US, F(-1.234567e6)); + test<"{:.6LG}">(SV("-1.23457E+07"), en_US, F(-1.234567e7)); std::locale::global(en_US); - test(SV("1#23457E-06"), loc, SV("{:.6LG}"), F(1.234567e-6)); - test(SV("1#23457E-05"), loc, SV("{:.6LG}"), F(1.234567e-5)); - test(SV("0#000123457"), loc, SV("{:.6LG}"), F(1.234567e-4)); - test(SV("0#00123457"), loc, SV("{:.6LG}"), F(1.234567e-3)); - test(SV("0#0123457"), loc, SV("{:.6LG}"), F(1.234567e-2)); - test(SV("0#123457"), loc, SV("{:.6LG}"), F(1.234567e-1)); - test(SV("1#23457"), loc, SV("{:.6LG}"), F(1.234567e0)); - test(SV("1_2#3457"), loc, SV("{:.6LG}"), F(1.234567e1)); - test(SV("12_3#457"), loc, SV("{:.6LG}"), F(1.234567e2)); - test(SV("1_23_4#57"), loc, SV("{:.6LG}"), F(1.234567e3)); - test(SV("12_34_5#7"), loc, SV("{:.6LG}"), F(1.234567e4)); - test(SV("123_45_7"), loc, SV("{:.6LG}"), F(1.234567e5)); - test(SV("1#23457E+06"), loc, SV("{:.6LG}"), F(1.234567e6)); - test(SV("1#23457E+07"), loc, SV("{:.6LG}"), F(1.234567e7)); - test(SV("-1#23457E-06"), loc, SV("{:.6LG}"), F(-1.234567e-6)); - test(SV("-1#23457E-05"), loc, SV("{:.6LG}"), F(-1.234567e-5)); - test(SV("-0#000123457"), loc, SV("{:.6LG}"), F(-1.234567e-4)); - test(SV("-0#00123457"), loc, SV("{:.6LG}"), F(-1.234567e-3)); - test(SV("-0#0123457"), loc, SV("{:.6LG}"), F(-1.234567e-2)); - test(SV("-0#123457"), loc, SV("{:.6LG}"), F(-1.234567e-1)); - test(SV("-1#23457"), loc, SV("{:.6LG}"), F(-1.234567e0)); - test(SV("-1_2#3457"), loc, SV("{:.6LG}"), F(-1.234567e1)); - test(SV("-12_3#457"), loc, SV("{:.6LG}"), F(-1.234567e2)); - test(SV("-1_23_4#57"), loc, SV("{:.6LG}"), F(-1.234567e3)); - test(SV("-12_34_5#7"), loc, SV("{:.6LG}"), F(-1.234567e4)); - test(SV("-123_45_7"), loc, SV("{:.6LG}"), F(-1.234567e5)); - test(SV("-1#23457E+06"), loc, SV("{:.6LG}"), F(-1.234567e6)); - test(SV("-1#23457E+07"), loc, SV("{:.6LG}"), F(-1.234567e7)); + test<"{:.6LG}">(SV("1#23457E-06"), loc, F(1.234567e-6)); + test<"{:.6LG}">(SV("1#23457E-05"), loc, F(1.234567e-5)); + test<"{:.6LG}">(SV("0#000123457"), loc, F(1.234567e-4)); + test<"{:.6LG}">(SV("0#00123457"), loc, F(1.234567e-3)); + test<"{:.6LG}">(SV("0#0123457"), loc, F(1.234567e-2)); + test<"{:.6LG}">(SV("0#123457"), loc, F(1.234567e-1)); + test<"{:.6LG}">(SV("1#23457"), loc, F(1.234567e0)); + test<"{:.6LG}">(SV("1_2#3457"), loc, F(1.234567e1)); + test<"{:.6LG}">(SV("12_3#457"), loc, F(1.234567e2)); + test<"{:.6LG}">(SV("1_23_4#57"), loc, F(1.234567e3)); + test<"{:.6LG}">(SV("12_34_5#7"), loc, F(1.234567e4)); + test<"{:.6LG}">(SV("123_45_7"), loc, F(1.234567e5)); + test<"{:.6LG}">(SV("1#23457E+06"), loc, F(1.234567e6)); + test<"{:.6LG}">(SV("1#23457E+07"), loc, F(1.234567e7)); + test<"{:.6LG}">(SV("-1#23457E-06"), loc, F(-1.234567e-6)); + test<"{:.6LG}">(SV("-1#23457E-05"), loc, F(-1.234567e-5)); + test<"{:.6LG}">(SV("-0#000123457"), loc, F(-1.234567e-4)); + test<"{:.6LG}">(SV("-0#00123457"), loc, F(-1.234567e-3)); + test<"{:.6LG}">(SV("-0#0123457"), loc, F(-1.234567e-2)); + test<"{:.6LG}">(SV("-0#123457"), loc, F(-1.234567e-1)); + test<"{:.6LG}">(SV("-1#23457"), loc, F(-1.234567e0)); + test<"{:.6LG}">(SV("-1_2#3457"), loc, F(-1.234567e1)); + test<"{:.6LG}">(SV("-12_3#457"), loc, F(-1.234567e2)); + test<"{:.6LG}">(SV("-1_23_4#57"), loc, F(-1.234567e3)); + test<"{:.6LG}">(SV("-12_34_5#7"), loc, F(-1.234567e4)); + test<"{:.6LG}">(SV("-123_45_7"), loc, F(-1.234567e5)); + test<"{:.6LG}">(SV("-1#23457E+06"), loc, F(-1.234567e6)); + test<"{:.6LG}">(SV("-1#23457E+07"), loc, F(-1.234567e7)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1,234.57$$$"), SV("{:$<11.6LG}"), F(1.234567e3)); - test(SV("$$$1,234.57"), SV("{:$>11.6LG}"), F(1.234567e3)); - test(SV("$1,234.57$$"), SV("{:$^11.6LG}"), F(1.234567e3)); - test(SV("0001,234.57"), SV("{:011.6LG}"), F(1.234567e3)); - test(SV("-1,234.57$$$"), SV("{:$<12.6LG}"), F(-1.234567e3)); - test(SV("$$$-1,234.57"), SV("{:$>12.6LG}"), F(-1.234567e3)); - test(SV("$-1,234.57$$"), SV("{:$^12.6LG}"), F(-1.234567e3)); - test(SV("-0001,234.57"), SV("{:012.6LG}"), F(-1.234567e3)); + test<"{:$<11.6LG}">(SV("1,234.57$$$"), F(1.234567e3)); + test<"{:$>11.6LG}">(SV("$$$1,234.57"), F(1.234567e3)); + test<"{:$^11.6LG}">(SV("$1,234.57$$"), F(1.234567e3)); + test<"{:011.6LG}">(SV("0001,234.57"), F(1.234567e3)); + test<"{:$<12.6LG}">(SV("-1,234.57$$$"), F(-1.234567e3)); + test<"{:$>12.6LG}">(SV("$$$-1,234.57"), F(-1.234567e3)); + test<"{:$^12.6LG}">(SV("$-1,234.57$$"), F(-1.234567e3)); + test<"{:012.6LG}">(SV("-0001,234.57"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1_23_4#57$$$"), SV("{:$<12.6LG}"), F(1.234567e3)); - test(SV("$$$1_23_4#57"), SV("{:$>12.6LG}"), F(1.234567e3)); - test(SV("$1_23_4#57$$"), SV("{:$^12.6LG}"), F(1.234567e3)); - test(SV("0001_23_4#57"), SV("{:012.6LG}"), F(1.234567e3)); - test(SV("-1_23_4#57$$$"), SV("{:$<13.6LG}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#57"), SV("{:$>13.6LG}"), F(-1.234567e3)); - test(SV("$-1_23_4#57$$"), SV("{:$^13.6LG}"), F(-1.234567e3)); - test(SV("-0001_23_4#57"), SV("{:013.6LG}"), F(-1.234567e3)); - - test(SV("1,234.57$$$"), en_US, SV("{:$<11.6LG}"), F(1.234567e3)); - test(SV("$$$1,234.57"), en_US, SV("{:$>11.6LG}"), F(1.234567e3)); - test(SV("$1,234.57$$"), en_US, SV("{:$^11.6LG}"), F(1.234567e3)); - test(SV("0001,234.57"), en_US, SV("{:011.6LG}"), F(1.234567e3)); - test(SV("-1,234.57$$$"), en_US, SV("{:$<12.6LG}"), F(-1.234567e3)); - test(SV("$$$-1,234.57"), en_US, SV("{:$>12.6LG}"), F(-1.234567e3)); - test(SV("$-1,234.57$$"), en_US, SV("{:$^12.6LG}"), F(-1.234567e3)); - test(SV("-0001,234.57"), en_US, SV("{:012.6LG}"), F(-1.234567e3)); + test<"{:$<12.6LG}">(SV("1_23_4#57$$$"), F(1.234567e3)); + test<"{:$>12.6LG}">(SV("$$$1_23_4#57"), F(1.234567e3)); + test<"{:$^12.6LG}">(SV("$1_23_4#57$$"), F(1.234567e3)); + test<"{:012.6LG}">(SV("0001_23_4#57"), F(1.234567e3)); + test<"{:$<13.6LG}">(SV("-1_23_4#57$$$"), F(-1.234567e3)); + test<"{:$>13.6LG}">(SV("$$$-1_23_4#57"), F(-1.234567e3)); + test<"{:$^13.6LG}">(SV("$-1_23_4#57$$"), F(-1.234567e3)); + test<"{:013.6LG}">(SV("-0001_23_4#57"), F(-1.234567e3)); + + test<"{:$<11.6LG}">(SV("1,234.57$$$"), en_US, F(1.234567e3)); + test<"{:$>11.6LG}">(SV("$$$1,234.57"), en_US, F(1.234567e3)); + test<"{:$^11.6LG}">(SV("$1,234.57$$"), en_US, F(1.234567e3)); + test<"{:011.6LG}">(SV("0001,234.57"), en_US, F(1.234567e3)); + test<"{:$<12.6LG}">(SV("-1,234.57$$$"), en_US, F(-1.234567e3)); + test<"{:$>12.6LG}">(SV("$$$-1,234.57"), en_US, F(-1.234567e3)); + test<"{:$^12.6LG}">(SV("$-1,234.57$$"), en_US, F(-1.234567e3)); + test<"{:012.6LG}">(SV("-0001,234.57"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1_23_4#57$$$"), loc, SV("{:$<12.6LG}"), F(1.234567e3)); - test(SV("$$$1_23_4#57"), loc, SV("{:$>12.6LG}"), F(1.234567e3)); - test(SV("$1_23_4#57$$"), loc, SV("{:$^12.6LG}"), F(1.234567e3)); - test(SV("0001_23_4#57"), loc, SV("{:012.6LG}"), F(1.234567e3)); - test(SV("-1_23_4#57$$$"), loc, SV("{:$<13.6LG}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#57"), loc, SV("{:$>13.6LG}"), F(-1.234567e3)); - test(SV("$-1_23_4#57$$"), loc, SV("{:$^13.6LG}"), F(-1.234567e3)); - test(SV("-0001_23_4#57"), loc, SV("{:013.6LG}"), F(-1.234567e3)); + test<"{:$<12.6LG}">(SV("1_23_4#57$$$"), loc, F(1.234567e3)); + test<"{:$>12.6LG}">(SV("$$$1_23_4#57"), loc, F(1.234567e3)); + test<"{:$^12.6LG}">(SV("$1_23_4#57$$"), loc, F(1.234567e3)); + test<"{:012.6LG}">(SV("0001_23_4#57"), loc, F(1.234567e3)); + test<"{:$<13.6LG}">(SV("-1_23_4#57$$$"), loc, F(-1.234567e3)); + test<"{:$>13.6LG}">(SV("$$$-1_23_4#57"), loc, F(-1.234567e3)); + test<"{:$^13.6LG}">(SV("$-1_23_4#57$$"), loc, F(-1.234567e3)); + test<"{:013.6LG}">(SV("-0001_23_4#57"), loc, F(-1.234567e3)); } template @@ -1904,227 +1908,227 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.234567e-06"), SV("{:L}"), F(1.234567e-6)); - test(SV("1.234567e-05"), SV("{:L}"), F(1.234567e-5)); - test(SV("0.0001234567"), SV("{:L}"), F(1.234567e-4)); - test(SV("0.001234567"), SV("{:L}"), F(1.234567e-3)); - test(SV("0.01234567"), SV("{:L}"), F(1.234567e-2)); - test(SV("0.1234567"), SV("{:L}"), F(1.234567e-1)); - test(SV("1.234567"), SV("{:L}"), F(1.234567e0)); - test(SV("12.34567"), SV("{:L}"), F(1.234567e1)); - test(SV("123.4567"), SV("{:L}"), F(1.234567e2)); - test(SV("1,234.567"), SV("{:L}"), F(1.234567e3)); - test(SV("12,345.67"), SV("{:L}"), F(1.234567e4)); - test(SV("123,456.7"), SV("{:L}"), F(1.234567e5)); - test(SV("1,234,567"), SV("{:L}"), F(1.234567e6)); - test(SV("12,345,670"), SV("{:L}"), F(1.234567e7)); + test<"{:L}">(SV("1.234567e-06"), F(1.234567e-6)); + test<"{:L}">(SV("1.234567e-05"), F(1.234567e-5)); + test<"{:L}">(SV("0.0001234567"), F(1.234567e-4)); + test<"{:L}">(SV("0.001234567"), F(1.234567e-3)); + test<"{:L}">(SV("0.01234567"), F(1.234567e-2)); + test<"{:L}">(SV("0.1234567"), F(1.234567e-1)); + test<"{:L}">(SV("1.234567"), F(1.234567e0)); + test<"{:L}">(SV("12.34567"), F(1.234567e1)); + test<"{:L}">(SV("123.4567"), F(1.234567e2)); + test<"{:L}">(SV("1,234.567"), F(1.234567e3)); + test<"{:L}">(SV("12,345.67"), F(1.234567e4)); + test<"{:L}">(SV("123,456.7"), F(1.234567e5)); + test<"{:L}">(SV("1,234,567"), F(1.234567e6)); + test<"{:L}">(SV("12,345,670"), F(1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("123,456,700"), SV("{:L}"), F(1.234567e8)); - test(SV("1,234,567,000"), SV("{:L}"), F(1.234567e9)); - test(SV("12,345,670,000"), SV("{:L}"), F(1.234567e10)); - test(SV("123,456,700,000"), SV("{:L}"), F(1.234567e11)); - test(SV("1.234567e+12"), SV("{:L}"), F(1.234567e12)); - test(SV("1.234567e+13"), SV("{:L}"), F(1.234567e13)); + test<"{:L}">(SV("123,456,700"), F(1.234567e8)); + test<"{:L}">(SV("1,234,567,000"), F(1.234567e9)); + test<"{:L}">(SV("12,345,670,000"), F(1.234567e10)); + test<"{:L}">(SV("123,456,700,000"), F(1.234567e11)); + test<"{:L}">(SV("1.234567e+12"), F(1.234567e12)); + test<"{:L}">(SV("1.234567e+13"), F(1.234567e13)); } - test(SV("-1.234567e-06"), SV("{:L}"), F(-1.234567e-6)); - test(SV("-1.234567e-05"), SV("{:L}"), F(-1.234567e-5)); - test(SV("-0.0001234567"), SV("{:L}"), F(-1.234567e-4)); - test(SV("-0.001234567"), SV("{:L}"), F(-1.234567e-3)); - test(SV("-0.01234567"), SV("{:L}"), F(-1.234567e-2)); - test(SV("-0.1234567"), SV("{:L}"), F(-1.234567e-1)); - test(SV("-1.234567"), SV("{:L}"), F(-1.234567e0)); - test(SV("-12.34567"), SV("{:L}"), F(-1.234567e1)); - test(SV("-123.4567"), SV("{:L}"), F(-1.234567e2)); - test(SV("-1,234.567"), SV("{:L}"), F(-1.234567e3)); - test(SV("-12,345.67"), SV("{:L}"), F(-1.234567e4)); - test(SV("-123,456.7"), SV("{:L}"), F(-1.234567e5)); - test(SV("-1,234,567"), SV("{:L}"), F(-1.234567e6)); - test(SV("-12,345,670"), SV("{:L}"), F(-1.234567e7)); + test<"{:L}">(SV("-1.234567e-06"), F(-1.234567e-6)); + test<"{:L}">(SV("-1.234567e-05"), F(-1.234567e-5)); + test<"{:L}">(SV("-0.0001234567"), F(-1.234567e-4)); + test<"{:L}">(SV("-0.001234567"), F(-1.234567e-3)); + test<"{:L}">(SV("-0.01234567"), F(-1.234567e-2)); + test<"{:L}">(SV("-0.1234567"), F(-1.234567e-1)); + test<"{:L}">(SV("-1.234567"), F(-1.234567e0)); + test<"{:L}">(SV("-12.34567"), F(-1.234567e1)); + test<"{:L}">(SV("-123.4567"), F(-1.234567e2)); + test<"{:L}">(SV("-1,234.567"), F(-1.234567e3)); + test<"{:L}">(SV("-12,345.67"), F(-1.234567e4)); + test<"{:L}">(SV("-123,456.7"), F(-1.234567e5)); + test<"{:L}">(SV("-1,234,567"), F(-1.234567e6)); + test<"{:L}">(SV("-12,345,670"), F(-1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-123,456,700"), SV("{:L}"), F(-1.234567e8)); - test(SV("-1,234,567,000"), SV("{:L}"), F(-1.234567e9)); - test(SV("-12,345,670,000"), SV("{:L}"), F(-1.234567e10)); - test(SV("-123,456,700,000"), SV("{:L}"), F(-1.234567e11)); - test(SV("-1.234567e+12"), SV("{:L}"), F(-1.234567e12)); - test(SV("-1.234567e+13"), SV("{:L}"), F(-1.234567e13)); + test<"{:L}">(SV("-123,456,700"), F(-1.234567e8)); + test<"{:L}">(SV("-1,234,567,000"), F(-1.234567e9)); + test<"{:L}">(SV("-12,345,670,000"), F(-1.234567e10)); + test<"{:L}">(SV("-123,456,700,000"), F(-1.234567e11)); + test<"{:L}">(SV("-1.234567e+12"), F(-1.234567e12)); + test<"{:L}">(SV("-1.234567e+13"), F(-1.234567e13)); } std::locale::global(loc); - test(SV("1#234567e-06"), SV("{:L}"), F(1.234567e-6)); - test(SV("1#234567e-05"), SV("{:L}"), F(1.234567e-5)); - test(SV("0#0001234567"), SV("{:L}"), F(1.234567e-4)); - test(SV("0#001234567"), SV("{:L}"), F(1.234567e-3)); - test(SV("0#01234567"), SV("{:L}"), F(1.234567e-2)); - test(SV("0#1234567"), SV("{:L}"), F(1.234567e-1)); - test(SV("1#234567"), SV("{:L}"), F(1.234567e0)); - test(SV("1_2#34567"), SV("{:L}"), F(1.234567e1)); - test(SV("12_3#4567"), SV("{:L}"), F(1.234567e2)); - test(SV("1_23_4#567"), SV("{:L}"), F(1.234567e3)); - test(SV("12_34_5#67"), SV("{:L}"), F(1.234567e4)); - test(SV("123_45_6#7"), SV("{:L}"), F(1.234567e5)); - test(SV("1_234_56_7"), SV("{:L}"), F(1.234567e6)); - test(SV("12_345_67_0"), SV("{:L}"), F(1.234567e7)); + test<"{:L}">(SV("1#234567e-06"), F(1.234567e-6)); + test<"{:L}">(SV("1#234567e-05"), F(1.234567e-5)); + test<"{:L}">(SV("0#0001234567"), F(1.234567e-4)); + test<"{:L}">(SV("0#001234567"), F(1.234567e-3)); + test<"{:L}">(SV("0#01234567"), F(1.234567e-2)); + test<"{:L}">(SV("0#1234567"), F(1.234567e-1)); + test<"{:L}">(SV("1#234567"), F(1.234567e0)); + test<"{:L}">(SV("1_2#34567"), F(1.234567e1)); + test<"{:L}">(SV("12_3#4567"), F(1.234567e2)); + test<"{:L}">(SV("1_23_4#567"), F(1.234567e3)); + test<"{:L}">(SV("12_34_5#67"), F(1.234567e4)); + test<"{:L}">(SV("123_45_6#7"), F(1.234567e5)); + test<"{:L}">(SV("1_234_56_7"), F(1.234567e6)); + test<"{:L}">(SV("12_345_67_0"), F(1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("1_23_456_70_0"), SV("{:L}"), F(1.234567e8)); - test(SV("1_2_34_567_00_0"), SV("{:L}"), F(1.234567e9)); - test(SV("1_2_3_45_670_00_0"), SV("{:L}"), F(1.234567e10)); - test(SV("1_2_3_4_56_700_00_0"), SV("{:L}"), F(1.234567e11)); - test(SV("1#234567e+12"), SV("{:L}"), F(1.234567e12)); - test(SV("1#234567e+13"), SV("{:L}"), F(1.234567e13)); + test<"{:L}">(SV("1_23_456_70_0"), F(1.234567e8)); + test<"{:L}">(SV("1_2_34_567_00_0"), F(1.234567e9)); + test<"{:L}">(SV("1_2_3_45_670_00_0"), F(1.234567e10)); + test<"{:L}">(SV("1_2_3_4_56_700_00_0"), F(1.234567e11)); + test<"{:L}">(SV("1#234567e+12"), F(1.234567e12)); + test<"{:L}">(SV("1#234567e+13"), F(1.234567e13)); } - test(SV("-1#234567e-06"), SV("{:L}"), F(-1.234567e-6)); - test(SV("-1#234567e-05"), SV("{:L}"), F(-1.234567e-5)); - test(SV("-0#0001234567"), SV("{:L}"), F(-1.234567e-4)); - test(SV("-0#001234567"), SV("{:L}"), F(-1.234567e-3)); - test(SV("-0#01234567"), SV("{:L}"), F(-1.234567e-2)); - test(SV("-0#1234567"), SV("{:L}"), F(-1.234567e-1)); - test(SV("-1#234567"), SV("{:L}"), F(-1.234567e0)); - test(SV("-1_2#34567"), SV("{:L}"), F(-1.234567e1)); - test(SV("-12_3#4567"), SV("{:L}"), F(-1.234567e2)); - test(SV("-1_23_4#567"), SV("{:L}"), F(-1.234567e3)); - test(SV("-12_34_5#67"), SV("{:L}"), F(-1.234567e4)); - test(SV("-123_45_6#7"), SV("{:L}"), F(-1.234567e5)); - test(SV("-1_234_56_7"), SV("{:L}"), F(-1.234567e6)); - test(SV("-12_345_67_0"), SV("{:L}"), F(-1.234567e7)); + test<"{:L}">(SV("-1#234567e-06"), F(-1.234567e-6)); + test<"{:L}">(SV("-1#234567e-05"), F(-1.234567e-5)); + test<"{:L}">(SV("-0#0001234567"), F(-1.234567e-4)); + test<"{:L}">(SV("-0#001234567"), F(-1.234567e-3)); + test<"{:L}">(SV("-0#01234567"), F(-1.234567e-2)); + test<"{:L}">(SV("-0#1234567"), F(-1.234567e-1)); + test<"{:L}">(SV("-1#234567"), F(-1.234567e0)); + test<"{:L}">(SV("-1_2#34567"), F(-1.234567e1)); + test<"{:L}">(SV("-12_3#4567"), F(-1.234567e2)); + test<"{:L}">(SV("-1_23_4#567"), F(-1.234567e3)); + test<"{:L}">(SV("-12_34_5#67"), F(-1.234567e4)); + test<"{:L}">(SV("-123_45_6#7"), F(-1.234567e5)); + test<"{:L}">(SV("-1_234_56_7"), F(-1.234567e6)); + test<"{:L}">(SV("-12_345_67_0"), F(-1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-1_23_456_70_0"), SV("{:L}"), F(-1.234567e8)); - test(SV("-1_2_34_567_00_0"), SV("{:L}"), F(-1.234567e9)); - test(SV("-1_2_3_45_670_00_0"), SV("{:L}"), F(-1.234567e10)); - test(SV("-1_2_3_4_56_700_00_0"), SV("{:L}"), F(-1.234567e11)); - test(SV("-1#234567e+12"), SV("{:L}"), F(-1.234567e12)); - test(SV("-1#234567e+13"), SV("{:L}"), F(-1.234567e13)); + test<"{:L}">(SV("-1_23_456_70_0"), F(-1.234567e8)); + test<"{:L}">(SV("-1_2_34_567_00_0"), F(-1.234567e9)); + test<"{:L}">(SV("-1_2_3_45_670_00_0"), F(-1.234567e10)); + test<"{:L}">(SV("-1_2_3_4_56_700_00_0"), F(-1.234567e11)); + test<"{:L}">(SV("-1#234567e+12"), F(-1.234567e12)); + test<"{:L}">(SV("-1#234567e+13"), F(-1.234567e13)); } - test(SV("1.234567e-06"), en_US, SV("{:L}"), F(1.234567e-6)); - test(SV("1.234567e-05"), en_US, SV("{:L}"), F(1.234567e-5)); - test(SV("0.0001234567"), en_US, SV("{:L}"), F(1.234567e-4)); - test(SV("0.001234567"), en_US, SV("{:L}"), F(1.234567e-3)); - test(SV("0.01234567"), en_US, SV("{:L}"), F(1.234567e-2)); - test(SV("0.1234567"), en_US, SV("{:L}"), F(1.234567e-1)); - test(SV("1.234567"), en_US, SV("{:L}"), F(1.234567e0)); - test(SV("12.34567"), en_US, SV("{:L}"), F(1.234567e1)); - test(SV("123.4567"), en_US, SV("{:L}"), F(1.234567e2)); - test(SV("1,234.567"), en_US, SV("{:L}"), F(1.234567e3)); - test(SV("12,345.67"), en_US, SV("{:L}"), F(1.234567e4)); - test(SV("123,456.7"), en_US, SV("{:L}"), F(1.234567e5)); - test(SV("1,234,567"), en_US, SV("{:L}"), F(1.234567e6)); - test(SV("12,345,670"), en_US, SV("{:L}"), F(1.234567e7)); + test<"{:L}">(SV("1.234567e-06"), en_US, F(1.234567e-6)); + test<"{:L}">(SV("1.234567e-05"), en_US, F(1.234567e-5)); + test<"{:L}">(SV("0.0001234567"), en_US, F(1.234567e-4)); + test<"{:L}">(SV("0.001234567"), en_US, F(1.234567e-3)); + test<"{:L}">(SV("0.01234567"), en_US, F(1.234567e-2)); + test<"{:L}">(SV("0.1234567"), en_US, F(1.234567e-1)); + test<"{:L}">(SV("1.234567"), en_US, F(1.234567e0)); + test<"{:L}">(SV("12.34567"), en_US, F(1.234567e1)); + test<"{:L}">(SV("123.4567"), en_US, F(1.234567e2)); + test<"{:L}">(SV("1,234.567"), en_US, F(1.234567e3)); + test<"{:L}">(SV("12,345.67"), en_US, F(1.234567e4)); + test<"{:L}">(SV("123,456.7"), en_US, F(1.234567e5)); + test<"{:L}">(SV("1,234,567"), en_US, F(1.234567e6)); + test<"{:L}">(SV("12,345,670"), en_US, F(1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("123,456,700"), en_US, SV("{:L}"), F(1.234567e8)); - test(SV("1,234,567,000"), en_US, SV("{:L}"), F(1.234567e9)); - test(SV("12,345,670,000"), en_US, SV("{:L}"), F(1.234567e10)); - test(SV("123,456,700,000"), en_US, SV("{:L}"), F(1.234567e11)); - test(SV("1.234567e+12"), en_US, SV("{:L}"), F(1.234567e12)); - test(SV("1.234567e+13"), en_US, SV("{:L}"), F(1.234567e13)); + test<"{:L}">(SV("123,456,700"), en_US, F(1.234567e8)); + test<"{:L}">(SV("1,234,567,000"), en_US, F(1.234567e9)); + test<"{:L}">(SV("12,345,670,000"), en_US, F(1.234567e10)); + test<"{:L}">(SV("123,456,700,000"), en_US, F(1.234567e11)); + test<"{:L}">(SV("1.234567e+12"), en_US, F(1.234567e12)); + test<"{:L}">(SV("1.234567e+13"), en_US, F(1.234567e13)); } - test(SV("-1.234567e-06"), en_US, SV("{:L}"), F(-1.234567e-6)); - test(SV("-1.234567e-05"), en_US, SV("{:L}"), F(-1.234567e-5)); - test(SV("-0.0001234567"), en_US, SV("{:L}"), F(-1.234567e-4)); - test(SV("-0.001234567"), en_US, SV("{:L}"), F(-1.234567e-3)); - test(SV("-0.01234567"), en_US, SV("{:L}"), F(-1.234567e-2)); - test(SV("-0.1234567"), en_US, SV("{:L}"), F(-1.234567e-1)); - test(SV("-1.234567"), en_US, SV("{:L}"), F(-1.234567e0)); - test(SV("-12.34567"), en_US, SV("{:L}"), F(-1.234567e1)); - test(SV("-123.4567"), en_US, SV("{:L}"), F(-1.234567e2)); - test(SV("-1,234.567"), en_US, SV("{:L}"), F(-1.234567e3)); - test(SV("-12,345.67"), en_US, SV("{:L}"), F(-1.234567e4)); - test(SV("-123,456.7"), en_US, SV("{:L}"), F(-1.234567e5)); - test(SV("-1,234,567"), en_US, SV("{:L}"), F(-1.234567e6)); - test(SV("-12,345,670"), en_US, SV("{:L}"), F(-1.234567e7)); + test<"{:L}">(SV("-1.234567e-06"), en_US, F(-1.234567e-6)); + test<"{:L}">(SV("-1.234567e-05"), en_US, F(-1.234567e-5)); + test<"{:L}">(SV("-0.0001234567"), en_US, F(-1.234567e-4)); + test<"{:L}">(SV("-0.001234567"), en_US, F(-1.234567e-3)); + test<"{:L}">(SV("-0.01234567"), en_US, F(-1.234567e-2)); + test<"{:L}">(SV("-0.1234567"), en_US, F(-1.234567e-1)); + test<"{:L}">(SV("-1.234567"), en_US, F(-1.234567e0)); + test<"{:L}">(SV("-12.34567"), en_US, F(-1.234567e1)); + test<"{:L}">(SV("-123.4567"), en_US, F(-1.234567e2)); + test<"{:L}">(SV("-1,234.567"), en_US, F(-1.234567e3)); + test<"{:L}">(SV("-12,345.67"), en_US, F(-1.234567e4)); + test<"{:L}">(SV("-123,456.7"), en_US, F(-1.234567e5)); + test<"{:L}">(SV("-1,234,567"), en_US, F(-1.234567e6)); + test<"{:L}">(SV("-12,345,670"), en_US, F(-1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-123,456,700"), en_US, SV("{:L}"), F(-1.234567e8)); - test(SV("-1,234,567,000"), en_US, SV("{:L}"), F(-1.234567e9)); - test(SV("-12,345,670,000"), en_US, SV("{:L}"), F(-1.234567e10)); - test(SV("-123,456,700,000"), en_US, SV("{:L}"), F(-1.234567e11)); - test(SV("-1.234567e+12"), en_US, SV("{:L}"), F(-1.234567e12)); - test(SV("-1.234567e+13"), en_US, SV("{:L}"), F(-1.234567e13)); + test<"{:L}">(SV("-123,456,700"), en_US, F(-1.234567e8)); + test<"{:L}">(SV("-1,234,567,000"), en_US, F(-1.234567e9)); + test<"{:L}">(SV("-12,345,670,000"), en_US, F(-1.234567e10)); + test<"{:L}">(SV("-123,456,700,000"), en_US, F(-1.234567e11)); + test<"{:L}">(SV("-1.234567e+12"), en_US, F(-1.234567e12)); + test<"{:L}">(SV("-1.234567e+13"), en_US, F(-1.234567e13)); } std::locale::global(en_US); - test(SV("1#234567e-06"), loc, SV("{:L}"), F(1.234567e-6)); - test(SV("1#234567e-05"), loc, SV("{:L}"), F(1.234567e-5)); - test(SV("0#0001234567"), loc, SV("{:L}"), F(1.234567e-4)); - test(SV("0#001234567"), loc, SV("{:L}"), F(1.234567e-3)); - test(SV("0#01234567"), loc, SV("{:L}"), F(1.234567e-2)); - test(SV("0#1234567"), loc, SV("{:L}"), F(1.234567e-1)); - test(SV("1#234567"), loc, SV("{:L}"), F(1.234567e0)); - test(SV("1_2#34567"), loc, SV("{:L}"), F(1.234567e1)); - test(SV("12_3#4567"), loc, SV("{:L}"), F(1.234567e2)); - test(SV("1_23_4#567"), loc, SV("{:L}"), F(1.234567e3)); - test(SV("12_34_5#67"), loc, SV("{:L}"), F(1.234567e4)); - test(SV("123_45_6#7"), loc, SV("{:L}"), F(1.234567e5)); - test(SV("1_234_56_7"), loc, SV("{:L}"), F(1.234567e6)); - test(SV("12_345_67_0"), loc, SV("{:L}"), F(1.234567e7)); + test<"{:L}">(SV("1#234567e-06"), loc, F(1.234567e-6)); + test<"{:L}">(SV("1#234567e-05"), loc, F(1.234567e-5)); + test<"{:L}">(SV("0#0001234567"), loc, F(1.234567e-4)); + test<"{:L}">(SV("0#001234567"), loc, F(1.234567e-3)); + test<"{:L}">(SV("0#01234567"), loc, F(1.234567e-2)); + test<"{:L}">(SV("0#1234567"), loc, F(1.234567e-1)); + test<"{:L}">(SV("1#234567"), loc, F(1.234567e0)); + test<"{:L}">(SV("1_2#34567"), loc, F(1.234567e1)); + test<"{:L}">(SV("12_3#4567"), loc, F(1.234567e2)); + test<"{:L}">(SV("1_23_4#567"), loc, F(1.234567e3)); + test<"{:L}">(SV("12_34_5#67"), loc, F(1.234567e4)); + test<"{:L}">(SV("123_45_6#7"), loc, F(1.234567e5)); + test<"{:L}">(SV("1_234_56_7"), loc, F(1.234567e6)); + test<"{:L}">(SV("12_345_67_0"), loc, F(1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("1_23_456_70_0"), loc, SV("{:L}"), F(1.234567e8)); - test(SV("1_2_34_567_00_0"), loc, SV("{:L}"), F(1.234567e9)); - test(SV("1_2_3_45_670_00_0"), loc, SV("{:L}"), F(1.234567e10)); - test(SV("1_2_3_4_56_700_00_0"), loc, SV("{:L}"), F(1.234567e11)); - test(SV("1#234567e+12"), loc, SV("{:L}"), F(1.234567e12)); - test(SV("1#234567e+13"), loc, SV("{:L}"), F(1.234567e13)); + test<"{:L}">(SV("1_23_456_70_0"), loc, F(1.234567e8)); + test<"{:L}">(SV("1_2_34_567_00_0"), loc, F(1.234567e9)); + test<"{:L}">(SV("1_2_3_45_670_00_0"), loc, F(1.234567e10)); + test<"{:L}">(SV("1_2_3_4_56_700_00_0"), loc, F(1.234567e11)); + test<"{:L}">(SV("1#234567e+12"), loc, F(1.234567e12)); + test<"{:L}">(SV("1#234567e+13"), loc, F(1.234567e13)); } - test(SV("-1#234567e-06"), loc, SV("{:L}"), F(-1.234567e-6)); - test(SV("-1#234567e-05"), loc, SV("{:L}"), F(-1.234567e-5)); - test(SV("-0#0001234567"), loc, SV("{:L}"), F(-1.234567e-4)); - test(SV("-0#001234567"), loc, SV("{:L}"), F(-1.234567e-3)); - test(SV("-0#01234567"), loc, SV("{:L}"), F(-1.234567e-2)); - test(SV("-0#1234567"), loc, SV("{:L}"), F(-1.234567e-1)); - test(SV("-1#234567"), loc, SV("{:L}"), F(-1.234567e0)); - test(SV("-1_2#34567"), loc, SV("{:L}"), F(-1.234567e1)); - test(SV("-12_3#4567"), loc, SV("{:L}"), F(-1.234567e2)); - test(SV("-1_23_4#567"), loc, SV("{:L}"), F(-1.234567e3)); - test(SV("-12_34_5#67"), loc, SV("{:L}"), F(-1.234567e4)); - test(SV("-123_45_6#7"), loc, SV("{:L}"), F(-1.234567e5)); - test(SV("-1_234_56_7"), loc, SV("{:L}"), F(-1.234567e6)); - test(SV("-12_345_67_0"), loc, SV("{:L}"), F(-1.234567e7)); + test<"{:L}">(SV("-1#234567e-06"), loc, F(-1.234567e-6)); + test<"{:L}">(SV("-1#234567e-05"), loc, F(-1.234567e-5)); + test<"{:L}">(SV("-0#0001234567"), loc, F(-1.234567e-4)); + test<"{:L}">(SV("-0#001234567"), loc, F(-1.234567e-3)); + test<"{:L}">(SV("-0#01234567"), loc, F(-1.234567e-2)); + test<"{:L}">(SV("-0#1234567"), loc, F(-1.234567e-1)); + test<"{:L}">(SV("-1#234567"), loc, F(-1.234567e0)); + test<"{:L}">(SV("-1_2#34567"), loc, F(-1.234567e1)); + test<"{:L}">(SV("-12_3#4567"), loc, F(-1.234567e2)); + test<"{:L}">(SV("-1_23_4#567"), loc, F(-1.234567e3)); + test<"{:L}">(SV("-12_34_5#67"), loc, F(-1.234567e4)); + test<"{:L}">(SV("-123_45_6#7"), loc, F(-1.234567e5)); + test<"{:L}">(SV("-1_234_56_7"), loc, F(-1.234567e6)); + test<"{:L}">(SV("-12_345_67_0"), loc, F(-1.234567e7)); if constexpr (sizeof(F) > sizeof(float)) { - test(SV("-1_23_456_70_0"), loc, SV("{:L}"), F(-1.234567e8)); - test(SV("-1_2_34_567_00_0"), loc, SV("{:L}"), F(-1.234567e9)); - test(SV("-1_2_3_45_670_00_0"), loc, SV("{:L}"), F(-1.234567e10)); - test(SV("-1_2_3_4_56_700_00_0"), loc, SV("{:L}"), F(-1.234567e11)); - test(SV("-1#234567e+12"), loc, SV("{:L}"), F(-1.234567e12)); - test(SV("-1#234567e+13"), loc, SV("{:L}"), F(-1.234567e13)); + test<"{:L}">(SV("-1_23_456_70_0"), loc, F(-1.234567e8)); + test<"{:L}">(SV("-1_2_34_567_00_0"), loc, F(-1.234567e9)); + test<"{:L}">(SV("-1_2_3_45_670_00_0"), loc, F(-1.234567e10)); + test<"{:L}">(SV("-1_2_3_4_56_700_00_0"), loc, F(-1.234567e11)); + test<"{:L}">(SV("-1#234567e+12"), loc, F(-1.234567e12)); + test<"{:L}">(SV("-1#234567e+13"), loc, F(-1.234567e13)); } // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1,234.567$$$"), SV("{:$<12L}"), F(1.234567e3)); - test(SV("$$$1,234.567"), SV("{:$>12L}"), F(1.234567e3)); - test(SV("$1,234.567$$"), SV("{:$^12L}"), F(1.234567e3)); - test(SV("0001,234.567"), SV("{:012L}"), F(1.234567e3)); - test(SV("-1,234.567$$$"), SV("{:$<13L}"), F(-1.234567e3)); - test(SV("$$$-1,234.567"), SV("{:$>13L}"), F(-1.234567e3)); - test(SV("$-1,234.567$$"), SV("{:$^13L}"), F(-1.234567e3)); - test(SV("-0001,234.567"), SV("{:013L}"), F(-1.234567e3)); + test<"{:$<12L}">(SV("1,234.567$$$"), F(1.234567e3)); + test<"{:$>12L}">(SV("$$$1,234.567"), F(1.234567e3)); + test<"{:$^12L}">(SV("$1,234.567$$"), F(1.234567e3)); + test<"{:012L}">(SV("0001,234.567"), F(1.234567e3)); + test<"{:$<13L}">(SV("-1,234.567$$$"), F(-1.234567e3)); + test<"{:$>13L}">(SV("$$$-1,234.567"), F(-1.234567e3)); + test<"{:$^13L}">(SV("$-1,234.567$$"), F(-1.234567e3)); + test<"{:013L}">(SV("-0001,234.567"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1_23_4#567$$$"), SV("{:$<13L}"), F(1.234567e3)); - test(SV("$$$1_23_4#567"), SV("{:$>13L}"), F(1.234567e3)); - test(SV("$1_23_4#567$$"), SV("{:$^13L}"), F(1.234567e3)); - test(SV("0001_23_4#567"), SV("{:013L}"), F(1.234567e3)); - test(SV("-1_23_4#567$$$"), SV("{:$<14L}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#567"), SV("{:$>14L}"), F(-1.234567e3)); - test(SV("$-1_23_4#567$$"), SV("{:$^14L}"), F(-1.234567e3)); - test(SV("-0001_23_4#567"), SV("{:014L}"), F(-1.234567e3)); - - test(SV("1,234.567$$$"), en_US, SV("{:$<12L}"), F(1.234567e3)); - test(SV("$$$1,234.567"), en_US, SV("{:$>12L}"), F(1.234567e3)); - test(SV("$1,234.567$$"), en_US, SV("{:$^12L}"), F(1.234567e3)); - test(SV("0001,234.567"), en_US, SV("{:012L}"), F(1.234567e3)); - test(SV("-1,234.567$$$"), en_US, SV("{:$<13L}"), F(-1.234567e3)); - test(SV("$$$-1,234.567"), en_US, SV("{:$>13L}"), F(-1.234567e3)); - test(SV("$-1,234.567$$"), en_US, SV("{:$^13L}"), F(-1.234567e3)); - test(SV("-0001,234.567"), en_US, SV("{:013L}"), F(-1.234567e3)); + test<"{:$<13L}">(SV("1_23_4#567$$$"), F(1.234567e3)); + test<"{:$>13L}">(SV("$$$1_23_4#567"), F(1.234567e3)); + test<"{:$^13L}">(SV("$1_23_4#567$$"), F(1.234567e3)); + test<"{:013L}">(SV("0001_23_4#567"), F(1.234567e3)); + test<"{:$<14L}">(SV("-1_23_4#567$$$"), F(-1.234567e3)); + test<"{:$>14L}">(SV("$$$-1_23_4#567"), F(-1.234567e3)); + test<"{:$^14L}">(SV("$-1_23_4#567$$"), F(-1.234567e3)); + test<"{:014L}">(SV("-0001_23_4#567"), F(-1.234567e3)); + + test<"{:$<12L}">(SV("1,234.567$$$"), en_US, F(1.234567e3)); + test<"{:$>12L}">(SV("$$$1,234.567"), en_US, F(1.234567e3)); + test<"{:$^12L}">(SV("$1,234.567$$"), en_US, F(1.234567e3)); + test<"{:012L}">(SV("0001,234.567"), en_US, F(1.234567e3)); + test<"{:$<13L}">(SV("-1,234.567$$$"), en_US, F(-1.234567e3)); + test<"{:$>13L}">(SV("$$$-1,234.567"), en_US, F(-1.234567e3)); + test<"{:$^13L}">(SV("$-1,234.567$$"), en_US, F(-1.234567e3)); + test<"{:013L}">(SV("-0001,234.567"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1_23_4#567$$$"), loc, SV("{:$<13L}"), F(1.234567e3)); - test(SV("$$$1_23_4#567"), loc, SV("{:$>13L}"), F(1.234567e3)); - test(SV("$1_23_4#567$$"), loc, SV("{:$^13L}"), F(1.234567e3)); - test(SV("0001_23_4#567"), loc, SV("{:013L}"), F(1.234567e3)); - test(SV("-1_23_4#567$$$"), loc, SV("{:$<14L}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#567"), loc, SV("{:$>14L}"), F(-1.234567e3)); - test(SV("$-1_23_4#567$$"), loc, SV("{:$^14L}"), F(-1.234567e3)); - test(SV("-0001_23_4#567"), loc, SV("{:014L}"), F(-1.234567e3)); + test<"{:$<13L}">(SV("1_23_4#567$$$"), loc, F(1.234567e3)); + test<"{:$>13L}">(SV("$$$1_23_4#567"), loc, F(1.234567e3)); + test<"{:$^13L}">(SV("$1_23_4#567$$"), loc, F(1.234567e3)); + test<"{:013L}">(SV("0001_23_4#567"), loc, F(1.234567e3)); + test<"{:$<14L}">(SV("-1_23_4#567$$$"), loc, F(-1.234567e3)); + test<"{:$>14L}">(SV("$$$-1_23_4#567"), loc, F(-1.234567e3)); + test<"{:$^14L}">(SV("$-1_23_4#567$$"), loc, F(-1.234567e3)); + test<"{:014L}">(SV("-0001_23_4#567"), loc, F(-1.234567e3)); } template @@ -2134,163 +2138,163 @@ // *** Basic *** std::locale::global(en_US); - test(SV("1.23457e-06"), SV("{:.6L}"), F(1.234567e-6)); - test(SV("1.23457e-05"), SV("{:.6L}"), F(1.234567e-5)); - test(SV("0.000123457"), SV("{:.6L}"), F(1.234567e-4)); - test(SV("0.00123457"), SV("{:.6L}"), F(1.234567e-3)); - test(SV("0.0123457"), SV("{:.6L}"), F(1.234567e-2)); - test(SV("0.123457"), SV("{:.6L}"), F(1.234567e-1)); - test(SV("1.23457"), SV("{:.6L}"), F(1.234567e0)); - test(SV("12.3457"), SV("{:.6L}"), F(1.234567e1)); - test(SV("123.457"), SV("{:.6L}"), F(1.234567e2)); - test(SV("1,234.57"), SV("{:.6L}"), F(1.234567e3)); - test(SV("12,345.7"), SV("{:.6L}"), F(1.234567e4)); - test(SV("123,457"), SV("{:.6L}"), F(1.234567e5)); - test(SV("1.23457e+06"), SV("{:.6L}"), F(1.234567e6)); - test(SV("1.23457e+07"), SV("{:.6L}"), F(1.234567e7)); - test(SV("-1.23457e-06"), SV("{:.6L}"), F(-1.234567e-6)); - test(SV("-1.23457e-05"), SV("{:.6L}"), F(-1.234567e-5)); - test(SV("-0.000123457"), SV("{:.6L}"), F(-1.234567e-4)); - test(SV("-0.00123457"), SV("{:.6L}"), F(-1.234567e-3)); - test(SV("-0.0123457"), SV("{:.6L}"), F(-1.234567e-2)); - test(SV("-0.123457"), SV("{:.6L}"), F(-1.234567e-1)); - test(SV("-1.23457"), SV("{:.6L}"), F(-1.234567e0)); - test(SV("-12.3457"), SV("{:.6L}"), F(-1.234567e1)); - test(SV("-123.457"), SV("{:.6L}"), F(-1.234567e2)); - test(SV("-1,234.57"), SV("{:.6L}"), F(-1.234567e3)); - test(SV("-12,345.7"), SV("{:.6L}"), F(-1.234567e4)); - test(SV("-123,457"), SV("{:.6L}"), F(-1.234567e5)); - test(SV("-1.23457e+06"), SV("{:.6L}"), F(-1.234567e6)); - test(SV("-1.23457e+07"), SV("{:.6L}"), F(-1.234567e7)); + test<"{:.6L}">(SV("1.23457e-06"), F(1.234567e-6)); + test<"{:.6L}">(SV("1.23457e-05"), F(1.234567e-5)); + test<"{:.6L}">(SV("0.000123457"), F(1.234567e-4)); + test<"{:.6L}">(SV("0.00123457"), F(1.234567e-3)); + test<"{:.6L}">(SV("0.0123457"), F(1.234567e-2)); + test<"{:.6L}">(SV("0.123457"), F(1.234567e-1)); + test<"{:.6L}">(SV("1.23457"), F(1.234567e0)); + test<"{:.6L}">(SV("12.3457"), F(1.234567e1)); + test<"{:.6L}">(SV("123.457"), F(1.234567e2)); + test<"{:.6L}">(SV("1,234.57"), F(1.234567e3)); + test<"{:.6L}">(SV("12,345.7"), F(1.234567e4)); + test<"{:.6L}">(SV("123,457"), F(1.234567e5)); + test<"{:.6L}">(SV("1.23457e+06"), F(1.234567e6)); + test<"{:.6L}">(SV("1.23457e+07"), F(1.234567e7)); + test<"{:.6L}">(SV("-1.23457e-06"), F(-1.234567e-6)); + test<"{:.6L}">(SV("-1.23457e-05"), F(-1.234567e-5)); + test<"{:.6L}">(SV("-0.000123457"), F(-1.234567e-4)); + test<"{:.6L}">(SV("-0.00123457"), F(-1.234567e-3)); + test<"{:.6L}">(SV("-0.0123457"), F(-1.234567e-2)); + test<"{:.6L}">(SV("-0.123457"), F(-1.234567e-1)); + test<"{:.6L}">(SV("-1.23457"), F(-1.234567e0)); + test<"{:.6L}">(SV("-12.3457"), F(-1.234567e1)); + test<"{:.6L}">(SV("-123.457"), F(-1.234567e2)); + test<"{:.6L}">(SV("-1,234.57"), F(-1.234567e3)); + test<"{:.6L}">(SV("-12,345.7"), F(-1.234567e4)); + test<"{:.6L}">(SV("-123,457"), F(-1.234567e5)); + test<"{:.6L}">(SV("-1.23457e+06"), F(-1.234567e6)); + test<"{:.6L}">(SV("-1.23457e+07"), F(-1.234567e7)); std::locale::global(loc); - test(SV("1#23457e-06"), SV("{:.6L}"), F(1.234567e-6)); - test(SV("1#23457e-05"), SV("{:.6L}"), F(1.234567e-5)); - test(SV("0#000123457"), SV("{:.6L}"), F(1.234567e-4)); - test(SV("0#00123457"), SV("{:.6L}"), F(1.234567e-3)); - test(SV("0#0123457"), SV("{:.6L}"), F(1.234567e-2)); - test(SV("0#123457"), SV("{:.6L}"), F(1.234567e-1)); - test(SV("1#23457"), SV("{:.6L}"), F(1.234567e0)); - test(SV("1_2#3457"), SV("{:.6L}"), F(1.234567e1)); - test(SV("12_3#457"), SV("{:.6L}"), F(1.234567e2)); - test(SV("1_23_4#57"), SV("{:.6L}"), F(1.234567e3)); - test(SV("12_34_5#7"), SV("{:.6L}"), F(1.234567e4)); - test(SV("123_45_7"), SV("{:.6L}"), F(1.234567e5)); - test(SV("1#23457e+06"), SV("{:.6L}"), F(1.234567e6)); - test(SV("1#23457e+07"), SV("{:.6L}"), F(1.234567e7)); - test(SV("-1#23457e-06"), SV("{:.6L}"), F(-1.234567e-6)); - test(SV("-1#23457e-05"), SV("{:.6L}"), F(-1.234567e-5)); - test(SV("-0#000123457"), SV("{:.6L}"), F(-1.234567e-4)); - test(SV("-0#00123457"), SV("{:.6L}"), F(-1.234567e-3)); - test(SV("-0#0123457"), SV("{:.6L}"), F(-1.234567e-2)); - test(SV("-0#123457"), SV("{:.6L}"), F(-1.234567e-1)); - test(SV("-1#23457"), SV("{:.6L}"), F(-1.234567e0)); - test(SV("-1_2#3457"), SV("{:.6L}"), F(-1.234567e1)); - test(SV("-12_3#457"), SV("{:.6L}"), F(-1.234567e2)); - test(SV("-1_23_4#57"), SV("{:.6L}"), F(-1.234567e3)); - test(SV("-12_34_5#7"), SV("{:.6L}"), F(-1.234567e4)); - test(SV("-123_45_7"), SV("{:.6L}"), F(-1.234567e5)); - test(SV("-1#23457e+06"), SV("{:.6L}"), F(-1.234567e6)); - test(SV("-1#23457e+07"), SV("{:.6L}"), F(-1.234567e7)); - - test(SV("1.23457e-06"), en_US, SV("{:.6L}"), F(1.234567e-6)); - test(SV("1.23457e-05"), en_US, SV("{:.6L}"), F(1.234567e-5)); - test(SV("0.000123457"), en_US, SV("{:.6L}"), F(1.234567e-4)); - test(SV("0.00123457"), en_US, SV("{:.6L}"), F(1.234567e-3)); - test(SV("0.0123457"), en_US, SV("{:.6L}"), F(1.234567e-2)); - test(SV("0.123457"), en_US, SV("{:.6L}"), F(1.234567e-1)); - test(SV("1.23457"), en_US, SV("{:.6L}"), F(1.234567e0)); - test(SV("12.3457"), en_US, SV("{:.6L}"), F(1.234567e1)); - test(SV("123.457"), en_US, SV("{:.6L}"), F(1.234567e2)); - test(SV("1,234.57"), en_US, SV("{:.6L}"), F(1.234567e3)); - test(SV("12,345.7"), en_US, SV("{:.6L}"), F(1.234567e4)); - test(SV("123,457"), en_US, SV("{:.6L}"), F(1.234567e5)); - test(SV("1.23457e+06"), en_US, SV("{:.6L}"), F(1.234567e6)); - test(SV("1.23457e+07"), en_US, SV("{:.6L}"), F(1.234567e7)); - test(SV("-1.23457e-06"), en_US, SV("{:.6L}"), F(-1.234567e-6)); - test(SV("-1.23457e-05"), en_US, SV("{:.6L}"), F(-1.234567e-5)); - test(SV("-0.000123457"), en_US, SV("{:.6L}"), F(-1.234567e-4)); - test(SV("-0.00123457"), en_US, SV("{:.6L}"), F(-1.234567e-3)); - test(SV("-0.0123457"), en_US, SV("{:.6L}"), F(-1.234567e-2)); - test(SV("-0.123457"), en_US, SV("{:.6L}"), F(-1.234567e-1)); - test(SV("-1.23457"), en_US, SV("{:.6L}"), F(-1.234567e0)); - test(SV("-12.3457"), en_US, SV("{:.6L}"), F(-1.234567e1)); - test(SV("-123.457"), en_US, SV("{:.6L}"), F(-1.234567e2)); - test(SV("-1,234.57"), en_US, SV("{:.6L}"), F(-1.234567e3)); - test(SV("-12,345.7"), en_US, SV("{:.6L}"), F(-1.234567e4)); - test(SV("-123,457"), en_US, SV("{:.6L}"), F(-1.234567e5)); - test(SV("-1.23457e+06"), en_US, SV("{:.6L}"), F(-1.234567e6)); - test(SV("-1.23457e+07"), en_US, SV("{:.6L}"), F(-1.234567e7)); + test<"{:.6L}">(SV("1#23457e-06"), F(1.234567e-6)); + test<"{:.6L}">(SV("1#23457e-05"), F(1.234567e-5)); + test<"{:.6L}">(SV("0#000123457"), F(1.234567e-4)); + test<"{:.6L}">(SV("0#00123457"), F(1.234567e-3)); + test<"{:.6L}">(SV("0#0123457"), F(1.234567e-2)); + test<"{:.6L}">(SV("0#123457"), F(1.234567e-1)); + test<"{:.6L}">(SV("1#23457"), F(1.234567e0)); + test<"{:.6L}">(SV("1_2#3457"), F(1.234567e1)); + test<"{:.6L}">(SV("12_3#457"), F(1.234567e2)); + test<"{:.6L}">(SV("1_23_4#57"), F(1.234567e3)); + test<"{:.6L}">(SV("12_34_5#7"), F(1.234567e4)); + test<"{:.6L}">(SV("123_45_7"), F(1.234567e5)); + test<"{:.6L}">(SV("1#23457e+06"), F(1.234567e6)); + test<"{:.6L}">(SV("1#23457e+07"), F(1.234567e7)); + test<"{:.6L}">(SV("-1#23457e-06"), F(-1.234567e-6)); + test<"{:.6L}">(SV("-1#23457e-05"), F(-1.234567e-5)); + test<"{:.6L}">(SV("-0#000123457"), F(-1.234567e-4)); + test<"{:.6L}">(SV("-0#00123457"), F(-1.234567e-3)); + test<"{:.6L}">(SV("-0#0123457"), F(-1.234567e-2)); + test<"{:.6L}">(SV("-0#123457"), F(-1.234567e-1)); + test<"{:.6L}">(SV("-1#23457"), F(-1.234567e0)); + test<"{:.6L}">(SV("-1_2#3457"), F(-1.234567e1)); + test<"{:.6L}">(SV("-12_3#457"), F(-1.234567e2)); + test<"{:.6L}">(SV("-1_23_4#57"), F(-1.234567e3)); + test<"{:.6L}">(SV("-12_34_5#7"), F(-1.234567e4)); + test<"{:.6L}">(SV("-123_45_7"), F(-1.234567e5)); + test<"{:.6L}">(SV("-1#23457e+06"), F(-1.234567e6)); + test<"{:.6L}">(SV("-1#23457e+07"), F(-1.234567e7)); + + test<"{:.6L}">(SV("1.23457e-06"), en_US, F(1.234567e-6)); + test<"{:.6L}">(SV("1.23457e-05"), en_US, F(1.234567e-5)); + test<"{:.6L}">(SV("0.000123457"), en_US, F(1.234567e-4)); + test<"{:.6L}">(SV("0.00123457"), en_US, F(1.234567e-3)); + test<"{:.6L}">(SV("0.0123457"), en_US, F(1.234567e-2)); + test<"{:.6L}">(SV("0.123457"), en_US, F(1.234567e-1)); + test<"{:.6L}">(SV("1.23457"), en_US, F(1.234567e0)); + test<"{:.6L}">(SV("12.3457"), en_US, F(1.234567e1)); + test<"{:.6L}">(SV("123.457"), en_US, F(1.234567e2)); + test<"{:.6L}">(SV("1,234.57"), en_US, F(1.234567e3)); + test<"{:.6L}">(SV("12,345.7"), en_US, F(1.234567e4)); + test<"{:.6L}">(SV("123,457"), en_US, F(1.234567e5)); + test<"{:.6L}">(SV("1.23457e+06"), en_US, F(1.234567e6)); + test<"{:.6L}">(SV("1.23457e+07"), en_US, F(1.234567e7)); + test<"{:.6L}">(SV("-1.23457e-06"), en_US, F(-1.234567e-6)); + test<"{:.6L}">(SV("-1.23457e-05"), en_US, F(-1.234567e-5)); + test<"{:.6L}">(SV("-0.000123457"), en_US, F(-1.234567e-4)); + test<"{:.6L}">(SV("-0.00123457"), en_US, F(-1.234567e-3)); + test<"{:.6L}">(SV("-0.0123457"), en_US, F(-1.234567e-2)); + test<"{:.6L}">(SV("-0.123457"), en_US, F(-1.234567e-1)); + test<"{:.6L}">(SV("-1.23457"), en_US, F(-1.234567e0)); + test<"{:.6L}">(SV("-12.3457"), en_US, F(-1.234567e1)); + test<"{:.6L}">(SV("-123.457"), en_US, F(-1.234567e2)); + test<"{:.6L}">(SV("-1,234.57"), en_US, F(-1.234567e3)); + test<"{:.6L}">(SV("-12,345.7"), en_US, F(-1.234567e4)); + test<"{:.6L}">(SV("-123,457"), en_US, F(-1.234567e5)); + test<"{:.6L}">(SV("-1.23457e+06"), en_US, F(-1.234567e6)); + test<"{:.6L}">(SV("-1.23457e+07"), en_US, F(-1.234567e7)); std::locale::global(en_US); - test(SV("1#23457e-06"), loc, SV("{:.6L}"), F(1.234567e-6)); - test(SV("1#23457e-05"), loc, SV("{:.6L}"), F(1.234567e-5)); - test(SV("0#000123457"), loc, SV("{:.6L}"), F(1.234567e-4)); - test(SV("0#00123457"), loc, SV("{:.6L}"), F(1.234567e-3)); - test(SV("0#0123457"), loc, SV("{:.6L}"), F(1.234567e-2)); - test(SV("0#123457"), loc, SV("{:.6L}"), F(1.234567e-1)); - test(SV("1#23457"), loc, SV("{:.6L}"), F(1.234567e0)); - test(SV("1_2#3457"), loc, SV("{:.6L}"), F(1.234567e1)); - test(SV("12_3#457"), loc, SV("{:.6L}"), F(1.234567e2)); - test(SV("1_23_4#57"), loc, SV("{:.6L}"), F(1.234567e3)); - test(SV("12_34_5#7"), loc, SV("{:.6L}"), F(1.234567e4)); - test(SV("123_45_7"), loc, SV("{:.6L}"), F(1.234567e5)); - test(SV("1#23457e+06"), loc, SV("{:.6L}"), F(1.234567e6)); - test(SV("1#23457e+07"), loc, SV("{:.6L}"), F(1.234567e7)); - test(SV("-1#23457e-06"), loc, SV("{:.6L}"), F(-1.234567e-6)); - test(SV("-1#23457e-05"), loc, SV("{:.6L}"), F(-1.234567e-5)); - test(SV("-0#000123457"), loc, SV("{:.6L}"), F(-1.234567e-4)); - test(SV("-0#00123457"), loc, SV("{:.6L}"), F(-1.234567e-3)); - test(SV("-0#0123457"), loc, SV("{:.6L}"), F(-1.234567e-2)); - test(SV("-0#123457"), loc, SV("{:.6L}"), F(-1.234567e-1)); - test(SV("-1#23457"), loc, SV("{:.6L}"), F(-1.234567e0)); - test(SV("-1_2#3457"), loc, SV("{:.6L}"), F(-1.234567e1)); - test(SV("-12_3#457"), loc, SV("{:.6L}"), F(-1.234567e2)); - test(SV("-1_23_4#57"), loc, SV("{:.6L}"), F(-1.234567e3)); - test(SV("-12_34_5#7"), loc, SV("{:.6L}"), F(-1.234567e4)); - test(SV("-123_45_7"), loc, SV("{:.6L}"), F(-1.234567e5)); - test(SV("-1#23457e+06"), loc, SV("{:.6L}"), F(-1.234567e6)); - test(SV("-1#23457e+07"), loc, SV("{:.6L}"), F(-1.234567e7)); + test<"{:.6L}">(SV("1#23457e-06"), loc, F(1.234567e-6)); + test<"{:.6L}">(SV("1#23457e-05"), loc, F(1.234567e-5)); + test<"{:.6L}">(SV("0#000123457"), loc, F(1.234567e-4)); + test<"{:.6L}">(SV("0#00123457"), loc, F(1.234567e-3)); + test<"{:.6L}">(SV("0#0123457"), loc, F(1.234567e-2)); + test<"{:.6L}">(SV("0#123457"), loc, F(1.234567e-1)); + test<"{:.6L}">(SV("1#23457"), loc, F(1.234567e0)); + test<"{:.6L}">(SV("1_2#3457"), loc, F(1.234567e1)); + test<"{:.6L}">(SV("12_3#457"), loc, F(1.234567e2)); + test<"{:.6L}">(SV("1_23_4#57"), loc, F(1.234567e3)); + test<"{:.6L}">(SV("12_34_5#7"), loc, F(1.234567e4)); + test<"{:.6L}">(SV("123_45_7"), loc, F(1.234567e5)); + test<"{:.6L}">(SV("1#23457e+06"), loc, F(1.234567e6)); + test<"{:.6L}">(SV("1#23457e+07"), loc, F(1.234567e7)); + test<"{:.6L}">(SV("-1#23457e-06"), loc, F(-1.234567e-6)); + test<"{:.6L}">(SV("-1#23457e-05"), loc, F(-1.234567e-5)); + test<"{:.6L}">(SV("-0#000123457"), loc, F(-1.234567e-4)); + test<"{:.6L}">(SV("-0#00123457"), loc, F(-1.234567e-3)); + test<"{:.6L}">(SV("-0#0123457"), loc, F(-1.234567e-2)); + test<"{:.6L}">(SV("-0#123457"), loc, F(-1.234567e-1)); + test<"{:.6L}">(SV("-1#23457"), loc, F(-1.234567e0)); + test<"{:.6L}">(SV("-1_2#3457"), loc, F(-1.234567e1)); + test<"{:.6L}">(SV("-12_3#457"), loc, F(-1.234567e2)); + test<"{:.6L}">(SV("-1_23_4#57"), loc, F(-1.234567e3)); + test<"{:.6L}">(SV("-12_34_5#7"), loc, F(-1.234567e4)); + test<"{:.6L}">(SV("-123_45_7"), loc, F(-1.234567e5)); + test<"{:.6L}">(SV("-1#23457e+06"), loc, F(-1.234567e6)); + test<"{:.6L}">(SV("-1#23457e+07"), loc, F(-1.234567e7)); // *** Fill, align, zero padding *** std::locale::global(en_US); - test(SV("1,234.57$$$"), SV("{:$<11.6L}"), F(1.234567e3)); - test(SV("$$$1,234.57"), SV("{:$>11.6L}"), F(1.234567e3)); - test(SV("$1,234.57$$"), SV("{:$^11.6L}"), F(1.234567e3)); - test(SV("0001,234.57"), SV("{:011.6L}"), F(1.234567e3)); - test(SV("-1,234.57$$$"), SV("{:$<12.6L}"), F(-1.234567e3)); - test(SV("$$$-1,234.57"), SV("{:$>12.6L}"), F(-1.234567e3)); - test(SV("$-1,234.57$$"), SV("{:$^12.6L}"), F(-1.234567e3)); - test(SV("-0001,234.57"), SV("{:012.6L}"), F(-1.234567e3)); + test<"{:$<11.6L}">(SV("1,234.57$$$"), F(1.234567e3)); + test<"{:$>11.6L}">(SV("$$$1,234.57"), F(1.234567e3)); + test<"{:$^11.6L}">(SV("$1,234.57$$"), F(1.234567e3)); + test<"{:011.6L}">(SV("0001,234.57"), F(1.234567e3)); + test<"{:$<12.6L}">(SV("-1,234.57$$$"), F(-1.234567e3)); + test<"{:$>12.6L}">(SV("$$$-1,234.57"), F(-1.234567e3)); + test<"{:$^12.6L}">(SV("$-1,234.57$$"), F(-1.234567e3)); + test<"{:012.6L}">(SV("-0001,234.57"), F(-1.234567e3)); std::locale::global(loc); - test(SV("1_23_4#57$$$"), SV("{:$<12.6L}"), F(1.234567e3)); - test(SV("$$$1_23_4#57"), SV("{:$>12.6L}"), F(1.234567e3)); - test(SV("$1_23_4#57$$"), SV("{:$^12.6L}"), F(1.234567e3)); - test(SV("0001_23_4#57"), SV("{:012.6L}"), F(1.234567e3)); - test(SV("-1_23_4#57$$$"), SV("{:$<13.6L}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#57"), SV("{:$>13.6L}"), F(-1.234567e3)); - test(SV("$-1_23_4#57$$"), SV("{:$^13.6L}"), F(-1.234567e3)); - test(SV("-0001_23_4#57"), SV("{:013.6L}"), F(-1.234567e3)); - - test(SV("1,234.57$$$"), en_US, SV("{:$<11.6L}"), F(1.234567e3)); - test(SV("$$$1,234.57"), en_US, SV("{:$>11.6L}"), F(1.234567e3)); - test(SV("$1,234.57$$"), en_US, SV("{:$^11.6L}"), F(1.234567e3)); - test(SV("0001,234.57"), en_US, SV("{:011.6L}"), F(1.234567e3)); - test(SV("-1,234.57$$$"), en_US, SV("{:$<12.6L}"), F(-1.234567e3)); - test(SV("$$$-1,234.57"), en_US, SV("{:$>12.6L}"), F(-1.234567e3)); - test(SV("$-1,234.57$$"), en_US, SV("{:$^12.6L}"), F(-1.234567e3)); - test(SV("-0001,234.57"), en_US, SV("{:012.6L}"), F(-1.234567e3)); + test<"{:$<12.6L}">(SV("1_23_4#57$$$"), F(1.234567e3)); + test<"{:$>12.6L}">(SV("$$$1_23_4#57"), F(1.234567e3)); + test<"{:$^12.6L}">(SV("$1_23_4#57$$"), F(1.234567e3)); + test<"{:012.6L}">(SV("0001_23_4#57"), F(1.234567e3)); + test<"{:$<13.6L}">(SV("-1_23_4#57$$$"), F(-1.234567e3)); + test<"{:$>13.6L}">(SV("$$$-1_23_4#57"), F(-1.234567e3)); + test<"{:$^13.6L}">(SV("$-1_23_4#57$$"), F(-1.234567e3)); + test<"{:013.6L}">(SV("-0001_23_4#57"), F(-1.234567e3)); + + test<"{:$<11.6L}">(SV("1,234.57$$$"), en_US, F(1.234567e3)); + test<"{:$>11.6L}">(SV("$$$1,234.57"), en_US, F(1.234567e3)); + test<"{:$^11.6L}">(SV("$1,234.57$$"), en_US, F(1.234567e3)); + test<"{:011.6L}">(SV("0001,234.57"), en_US, F(1.234567e3)); + test<"{:$<12.6L}">(SV("-1,234.57$$$"), en_US, F(-1.234567e3)); + test<"{:$>12.6L}">(SV("$$$-1,234.57"), en_US, F(-1.234567e3)); + test<"{:$^12.6L}">(SV("$-1,234.57$$"), en_US, F(-1.234567e3)); + test<"{:012.6L}">(SV("-0001,234.57"), en_US, F(-1.234567e3)); std::locale::global(en_US); - test(SV("1_23_4#57$$$"), loc, SV("{:$<12.6L}"), F(1.234567e3)); - test(SV("$$$1_23_4#57"), loc, SV("{:$>12.6L}"), F(1.234567e3)); - test(SV("$1_23_4#57$$"), loc, SV("{:$^12.6L}"), F(1.234567e3)); - test(SV("0001_23_4#57"), loc, SV("{:012.6L}"), F(1.234567e3)); - test(SV("-1_23_4#57$$$"), loc, SV("{:$<13.6L}"), F(-1.234567e3)); - test(SV("$$$-1_23_4#57"), loc, SV("{:$>13.6L}"), F(-1.234567e3)); - test(SV("$-1_23_4#57$$"), loc, SV("{:$^13.6L}"), F(-1.234567e3)); - test(SV("-0001_23_4#57"), loc, SV("{:013.6L}"), F(-1.234567e3)); + test<"{:$<12.6L}">(SV("1_23_4#57$$$"), loc, F(1.234567e3)); + test<"{:$>12.6L}">(SV("$$$1_23_4#57"), loc, F(1.234567e3)); + test<"{:$^12.6L}">(SV("$1_23_4#57$$"), loc, F(1.234567e3)); + test<"{:012.6L}">(SV("0001_23_4#57"), loc, F(1.234567e3)); + test<"{:$<13.6L}">(SV("-1_23_4#57$$$"), loc, F(-1.234567e3)); + test<"{:$>13.6L}">(SV("$$$-1_23_4#57"), loc, F(-1.234567e3)); + test<"{:$^13.6L}">(SV("$-1_23_4#57$$"), loc, F(-1.234567e3)); + test<"{:013.6L}">(SV("-0001_23_4#57"), loc, F(-1.234567e3)); } template diff --git a/libcxx/test/std/utilities/format/format.functions/vformat.locale.pass.cpp b/libcxx/test/std/utilities/format/format.functions/vformat.locale.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/vformat.locale.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/vformat.locale.pass.cpp @@ -10,6 +10,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -22,10 +24,12 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { - std::basic_string out = std::vformat(std::locale(), fmt, std::make_format_args>(args...)); +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { + std::basic_string out = + std::vformat(std::locale(), fmt.template sv(), std::make_format_args>(args...)); assert(out == expected); }; diff --git a/libcxx/test/std/utilities/format/format.functions/vformat.pass.cpp b/libcxx/test/std/utilities/format/format.functions/vformat.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/vformat.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/vformat.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -21,10 +23,12 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { - std::basic_string out = std::vformat(fmt, std::make_format_args>(args...)); +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { + std::basic_string out = + std::vformat(fmt.template sv(), std::make_format_args>(args...)); assert(out == expected); }; diff --git a/libcxx/test/std/utilities/format/format.functions/vformat_to.locale.pass.cpp b/libcxx/test/std/utilities/format/format.functions/vformat_to.locale.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/vformat_to.locale.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/vformat_to.locale.pass.cpp @@ -10,6 +10,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -28,29 +30,34 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::vformat_to(out.begin(), std::locale(), fmt, std::make_format_args>(args...)); + auto it = std::vformat_to(out.begin(), std::locale(), fmt.template sv(), + std::make_format_args>(args...)); assert(it == out.end()); assert(out == expected); } { std::list out; - std::vformat_to(std::back_inserter(out), std::locale(), fmt, std::make_format_args>(args...)); + std::vformat_to(std::back_inserter(out), std::locale(), fmt.template sv(), + std::make_format_args>(args...)); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { std::vector out; - std::vformat_to(std::back_inserter(out), std::locale(), fmt, std::make_format_args>(args...)); + std::vformat_to(std::back_inserter(out), std::locale(), fmt.template sv(), + std::make_format_args>(args...)); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { assert(expected.size() < 4096 && "Update the size of the buffer."); CharT out[4096]; - CharT* it = std::vformat_to(out, std::locale(), fmt, std::make_format_args>(args...)); + CharT* it = + std::vformat_to(out, std::locale(), fmt.template sv(), std::make_format_args>(args...)); assert(std::distance(out, it) == int(expected.size())); // Convert to std::string since output contains '\0' for boolean tests. assert(std::basic_string(out, it) == expected); diff --git a/libcxx/test/std/utilities/format/format.functions/vformat_to.pass.cpp b/libcxx/test/std/utilities/format/format.functions/vformat_to.pass.cpp --- a/libcxx/test/std/utilities/format/format.functions/vformat_to.pass.cpp +++ b/libcxx/test/std/utilities/format/format.functions/vformat_to.pass.cpp @@ -9,6 +9,8 @@ // UNSUPPORTED: libcpp-has-no-incomplete-format // TODO FMT Evaluate gcc-11 status // UNSUPPORTED: gcc-11 +// TODO FMT Investigate AppleClang ICE +// UNSUPPORTED: apple-clang-13 // @@ -25,29 +27,32 @@ #include "test_macros.h" #include "format_tests.h" +#include "string_literal.h" -auto test = [](std::basic_string_view expected, std::basic_string_view fmt, - const Args&... args) { +auto test = [](std::basic_string_view expected, + const Args&... args) constexpr { { std::basic_string out(expected.size(), CharT(' ')); - auto it = std::vformat_to(out.begin(), fmt, std::make_format_args>(args...)); + auto it = std::vformat_to(out.begin(), fmt.template sv(), std::make_format_args>(args...)); assert(it == out.end()); assert(out == expected); } { std::list out; - std::vformat_to(std::back_inserter(out), fmt, std::make_format_args>(args...)); + std::vformat_to(std::back_inserter(out), fmt.template sv(), + std::make_format_args>(args...)); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { std::vector out; - std::vformat_to(std::back_inserter(out), fmt, std::make_format_args>(args...)); + std::vformat_to(std::back_inserter(out), fmt.template sv(), + std::make_format_args>(args...)); assert(std::equal(out.begin(), out.end(), expected.begin(), expected.end())); } { assert(expected.size() < 4096 && "Update the size of the buffer."); CharT out[4096]; - CharT* it = std::vformat_to(out, fmt, std::make_format_args>(args...)); + CharT* it = std::vformat_to(out, fmt.template sv(), std::make_format_args>(args...)); assert(std::distance(out, it) == int(expected.size())); // Convert to std::string since output contains '\0' for boolean tests. assert(std::basic_string(out, it) == expected); diff --git a/libcxx/test/support/string_literal.h b/libcxx/test/support/string_literal.h new file mode 100644 --- /dev/null +++ b/libcxx/test/support/string_literal.h @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef SUPPORT_TEST_STRING_LITERAL_H +#define SUPPORT_TEST_STRING_LITERAL_H + +#include "test_macros.h" + +#include +#include +#include + +#if TEST_STD_VER > 17 + +/// Helper class to "transfer" a string literal +/// +/// The MAKE_STRING helper macros turn a string literal into a const char*. +/// This is an issue when testing std::format; its format-string needs a string +/// literal for compile-time validation. This class does the job. +/// +/// \note The class assumes a wchar_t can be initialized from a char. +/// \note All members are public to avoid compilation errors. +template +struct string_literal { + consteval /*implicit*/ string_literal(const char (&str)[N + 1]) { + std::copy_n(str, N + 1, data_); +# ifndef TEST_HAS_NO_WIDE_CHARACTERS + std::copy_n(str, N + 1, wdata_); +# endif + } + + template + consteval std::basic_string_view sv() const { + if constexpr (std::same_as) + return std::basic_string_view{data_}; +# ifndef TEST_HAS_NO_WIDE_CHARACTERS + else + return std::basic_string_view{wdata_}; +# endif + } + + char data_[N + 1]; +# ifndef TEST_HAS_NO_WIDE_CHARACTERS + wchar_t wdata_[N + 1]; +# endif +}; + +template +string_literal(const char (&str)[N]) -> string_literal; + +#endif // TEST_STD_VER > 17 + +#endif // SUPPORT_TEST_STRING_LITERAL_H