Refactor precision parsing
This commit is contained in:
+14
-4
@@ -568,10 +568,20 @@ struct test_format_specs_handler {
|
||||
}
|
||||
}
|
||||
|
||||
constexpr void on_precision(int p) { precision = p; }
|
||||
constexpr void on_dynamic_precision(fmt::detail::auto_id) {}
|
||||
constexpr void on_dynamic_precision(int index) { precision_ref = index; }
|
||||
constexpr void on_dynamic_precision(string_view) {}
|
||||
constexpr void on_precision(const fmt::detail::dynamic_spec<char>& spec) {
|
||||
switch (spec.kind) {
|
||||
case fmt::detail::dynamic_spec_kind::none:
|
||||
break;
|
||||
case fmt::detail::dynamic_spec_kind::value:
|
||||
precision = spec.value;
|
||||
break;
|
||||
case fmt::detail::dynamic_spec_kind::index:
|
||||
precision_ref = spec.value;
|
||||
break;
|
||||
case fmt::detail::dynamic_spec_kind::name:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
constexpr void end_precision() {}
|
||||
constexpr void on_type(fmt::presentation_type t) { type = t; }
|
||||
|
||||
+2
-2
@@ -929,9 +929,9 @@ TEST(format_test, precision) {
|
||||
"number is too big");
|
||||
|
||||
EXPECT_THROW_MSG((void)fmt::format(runtime("{0:."), 0), format_error,
|
||||
"missing precision specifier");
|
||||
"missing precision");
|
||||
EXPECT_THROW_MSG((void)fmt::format(runtime("{0:.}"), 0), format_error,
|
||||
"missing precision specifier");
|
||||
"missing precision");
|
||||
|
||||
EXPECT_THROW_MSG((void)fmt::format(runtime("{0:.2"), 0), format_error,
|
||||
"precision not allowed for this argument type");
|
||||
|
||||
Reference in New Issue
Block a user