add forgotten template argument to make_format_args which made some uses of FMT_COMPILE not work anymore after 54daa0864a, add more elaborate test cases to compile-test as regression tests

This commit is contained in:
rimathia 2020-09-17 14:51:17 +02:00
parent f674434a67
commit c664f458b5
2 changed files with 34 additions and 10 deletions

View File

@ -444,7 +444,8 @@ template <typename Char, typename T, int N> 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<N>(args...);
const auto& vargs = make_format_args(args...);
const auto& vargs =
make_format_args<basic_format_context<OutputIt, Char>>(args...);
basic_format_context<OutputIt, Char> ctx(out, vargs);
return fmt.format(arg, ctx);
}

View File

@ -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) {