From c664f458b57e699d11809b589271a5d793c4f97f Mon Sep 17 00:00:00 2001 From: rimathia Date: Thu, 17 Sep 2020 14:51:17 +0200 Subject: [PATCH] add forgotten template argument to make_format_args which made some uses of FMT_COMPILE not work anymore after 54daa0864afb57e9d1, add more elaborate test cases to compile-test as regression tests --- include/fmt/compile.h | 3 ++- test/compile-test.cc | 41 ++++++++++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/include/fmt/compile.h b/include/fmt/compile.h index c68c3328..333395eb 100644 --- a/include/fmt/compile.h +++ b/include/fmt/compile.h @@ -444,7 +444,8 @@ template struct spec_field { OutputIt format(OutputIt out, const Args&... args) const { // This ensures that the argument type is convertile to `const T&`. const T& arg = get(args...); - const auto& vargs = make_format_args(args...); + const auto& vargs = + make_format_args>(args...); basic_format_context ctx(out, vargs); return fmt.format(arg, ctx); } diff --git a/test/compile-test.cc b/test/compile-test.cc index 38f94d24..85e4d9b0 100644 --- a/test/compile-test.cc +++ b/test/compile-test.cc @@ -151,6 +151,9 @@ TEST(CompileTest, FormatDefault) { TEST(CompileTest, FormatSpecs) { EXPECT_EQ("42", fmt::format(FMT_COMPILE("{:x}"), 0x42)); + EXPECT_EQ("1.234000:0042:+3.13:str:0x3e8:X", + fmt::format(FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234, 42, + 3.13, "str", (void*)1000, 'X')); } TEST(CompileTest, DynamicWidth) { @@ -159,18 +162,38 @@ TEST(CompileTest, DynamicWidth) { } TEST(CompileTest, FormatTo) { - char buf[8]; - auto end = fmt::format_to(buf, FMT_COMPILE("{}"), 42); - *end = '\0'; - EXPECT_STREQ("42", buf); + { + char buf[8]; + auto end = fmt::format_to(buf, FMT_COMPILE("{}"), 42); + *end = '\0'; + EXPECT_STREQ("42", buf); + } + { + char buf[100]; + auto end = fmt::format_to(buf, FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), + 1.234, 42, 3.13, "str", (void*)1000, 'X'); + *end = '\0'; + EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buf); + } } TEST(CompileTest, FormatToNWithCompileMacro) { - constexpr auto buffer_size = 8; - char buffer[buffer_size]; - auto res = fmt::format_to_n(buffer, buffer_size, FMT_COMPILE("{}"), 42); - *res.out = '\0'; - EXPECT_STREQ("42", buffer); + { + constexpr auto buffer_size = 8; + char buffer[buffer_size]; + auto res = fmt::format_to_n(buffer, buffer_size, FMT_COMPILE("{}"), 42); + *res.out = '\0'; + EXPECT_STREQ("42", buffer); + } + { + constexpr auto buffer_size = 100; + char buffer[buffer_size]; + auto res = fmt::format_to_n(buffer, buffer_size, + FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), + 1.234, 42, 3.13, "str", (void*)1000, 'X'); + *res.out = '\0'; + EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buffer); + } } TEST(CompileTest, TextAndArg) {