Skip to content

Commit

Permalink
add forgotten template argument to make_format_args which made some u… (
Browse files Browse the repository at this point in the history
#1877)

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

* fix old-style cast which gcc on travis thankfully doesn't accept anymore

* hopefully last forgotten (void*)
  • Loading branch information
rimathia authored Sep 20, 2020
1 parent 0016da7 commit 2696dc9
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 10 deletions.
3 changes: 2 additions & 1 deletion include/fmt/compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
42 changes: 33 additions & 9 deletions test/compile-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,9 @@ TEST(CompileTest, FormatWideString) {

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", reinterpret_cast<void*>(1000), 'X'));
}

TEST(CompileTest, DynamicWidth) {
Expand All @@ -163,18 +166,39 @@ 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", reinterpret_cast<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", reinterpret_cast<void*>(1000), 'X');
*res.out = '\0';
EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buffer);
}
}

TEST(CompileTest, TextAndArg) {
Expand Down

0 comments on commit 2696dc9

Please sign in to comment.