mirror of
https://github.com/fmtlib/fmt.git
synced 2026-10-29 02:17:28 +08:00
Fix output position for compiled variant and expected formatting (#4968)
This commit is contained in:
parent
c4927e6086
commit
10cda465ed
@ -143,6 +143,7 @@ FMT_CONSTEXPR auto write_escaped_alternative(OutputIt out, const T& v,
|
||||
|
||||
formatter<std::remove_cv_t<T>, Char> underlying;
|
||||
maybe_set_debug_format(underlying, true);
|
||||
ctx.advance_to(out);
|
||||
return underlying.format(v, ctx);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -185,6 +185,59 @@ TEST(compile_test, format_to) {
|
||||
EXPECT_STREQ("2a", buf);
|
||||
}
|
||||
|
||||
TEST(compile_test, format_variant) {
|
||||
# ifdef __cpp_lib_variant
|
||||
char buffer[100];
|
||||
auto end =
|
||||
fmt::format_to(buffer, FMT_COMPILE("<{}> {}"), std::variant<int>{42}, 7);
|
||||
EXPECT_EQ("<variant(42)> 7", std::string(buffer, end));
|
||||
|
||||
end =
|
||||
fmt::format_to(buffer, FMT_COMPILE("{}"), std::variant<std::monostate>{});
|
||||
EXPECT_EQ("variant(monostate)", std::string(buffer, end));
|
||||
|
||||
end = fmt::format_to(buffer, FMT_COMPILE("{}"),
|
||||
std::variant<std::variant<int>>{std::variant<int>{42}});
|
||||
EXPECT_EQ("variant(variant(42))", std::string(buffer, end));
|
||||
|
||||
end = fmt::format_to(buffer, FMT_COMPILE("{}"),
|
||||
std::variant<std::string>{"test"});
|
||||
EXPECT_EQ("variant(\"test\")", std::string(buffer, end));
|
||||
|
||||
end = fmt::format_to(buffer, FMT_COMPILE("{}"), std::variant<char>{'a'});
|
||||
EXPECT_EQ("variant('a')", std::string(buffer, end));
|
||||
# endif
|
||||
}
|
||||
|
||||
TEST(compile_test, format_expected) {
|
||||
# ifdef __cpp_lib_expected
|
||||
char buffer[100];
|
||||
auto end = fmt::format_to(buffer, FMT_COMPILE("<{}> {}"),
|
||||
std::expected<int, int>{42}, 7);
|
||||
EXPECT_EQ("<expected(42)> 7", std::string(buffer, end));
|
||||
|
||||
end = fmt::format_to(buffer, FMT_COMPILE("{}"),
|
||||
std::expected<int, int>{std::unexpected(42)});
|
||||
EXPECT_EQ("unexpected(42)", std::string(buffer, end));
|
||||
|
||||
end = fmt::format_to(buffer, FMT_COMPILE("{}"), std::expected<void, int>{});
|
||||
EXPECT_EQ("expected()", std::string(buffer, end));
|
||||
|
||||
end = fmt::format_to(buffer, FMT_COMPILE("{}"),
|
||||
std::expected<std::string, int>{"test"});
|
||||
EXPECT_EQ("expected(\"test\")", std::string(buffer, end));
|
||||
# endif
|
||||
}
|
||||
|
||||
TEST(compile_test, format_unexpected) {
|
||||
# ifdef __cpp_lib_expected
|
||||
char buffer[100];
|
||||
auto end = fmt::format_to(buffer, FMT_COMPILE("<{}> {}"),
|
||||
std::unexpected<int>{42}, 7);
|
||||
EXPECT_EQ("<unexpected(42)> 7", std::string(buffer, end));
|
||||
# endif
|
||||
}
|
||||
|
||||
TEST(compile_test, format_to_n) {
|
||||
constexpr auto buffer_size = 8;
|
||||
char buffer[buffer_size];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user