Test and fix compiled format_to_n and formatted_size

This commit is contained in:
Victor Zverovich 2019-08-25 06:38:41 -07:00
parent 4070c1d80b
commit a5f470eb10
2 changed files with 16 additions and 14 deletions

View File

@ -553,16 +553,15 @@ format_to_n_result<OutputIt> format_to_n(OutputIt out, size_t n,
const CompiledFormat& cf,
const Args&... args) {
auto it =
cf.format_to(internal::truncating_iterator<OutputIt>(out, n), args...);
format_to(internal::truncating_iterator<OutputIt>(out, n), cf, args...);
return {it.base(), it.count()};
}
template <typename CompiledFormat, typename... Args>
std::size_t formatted_size(const CompiledFormat& cf, const Args&... args) {
return cf
.format_to(
internal::counting_iterator<typename CompiledFormat::char_type>(),
args...)
return fmt::format_to(
internal::counting_iterator<typename CompiledFormat::char_type>(),
cf, args...)
.count();
}

View File

@ -505,13 +505,16 @@ TEST(CompileTest, FormatToIterator) {
EXPECT_EQ(L"42", ws);
}
TEST(CompileTest, FormatToBackInserter) {
std::string s;
const auto prepared = fmt::compile<int>("4{}");
fmt::format_to(std::back_inserter(s), prepared, 2);
EXPECT_EQ("42", s);
std::wstring ws;
const auto wprepared = fmt::compile<int>(L"4{}");
fmt::format_to(std::back_inserter(ws), wprepared, 2);
EXPECT_EQ(L"42", ws);
TEST(CompileTest, FormatToN) {
char buf[5];
auto f = fmt::compile<int>("{:10}");
auto result = fmt::format_to_n(buf, 5, f, 42);
EXPECT_EQ(result.size, 10);
EXPECT_EQ(result.out, buf + 5);
EXPECT_EQ(fmt::string_view(buf, 5), " ");
}
TEST(CompileTest, FormattedSize) {
auto f = fmt::compile<int>("{:10}");
EXPECT_EQ(fmt::formatted_size(f, 42), 10);
}