Commit 97619e27 authored by Victor Zverovich's avatar Victor Zverovich

More fixed precision tests

parent dd6cc0e6
...@@ -588,7 +588,7 @@ struct fixed_handler { ...@@ -588,7 +588,7 @@ struct fixed_handler {
} }
digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder,
uint64_t error, int& exp, bool integral) { uint64_t error, int, bool integral) {
FMT_ASSERT(remainder < divisor, ""); FMT_ASSERT(remainder < divisor, "");
buf[size++] = digit; buf[size++] = digit;
if (size != precision) return digits::more; if (size != precision) return digits::more;
...@@ -601,7 +601,6 @@ struct fixed_handler { ...@@ -601,7 +601,6 @@ struct fixed_handler {
FMT_ASSERT(error == 1 && divisor > 2, ""); FMT_ASSERT(error == 1 && divisor > 2, "");
} }
auto dir = get_round_direction(divisor, remainder, error); auto dir = get_round_direction(divisor, remainder, error);
// TODO: test rounding
if (dir != up) return dir == down ? digits::done : digits::error; if (dir != up) return dir == down ? digits::done : digits::error;
++buf[size - 1]; ++buf[size - 1];
for (int i = size - 1; i > 0 && buf[i] > '9'; --i) { for (int i = size - 1; i > 0 && buf[i] > '9'; --i) {
...@@ -610,7 +609,7 @@ struct fixed_handler { ...@@ -610,7 +609,7 @@ struct fixed_handler {
} }
if (buf[0] > '9') { if (buf[0] > '9') {
buf[0] = '1'; buf[0] = '1';
++exp; buf[size++] = '0';
} }
return digits::done; return digits::done;
} }
......
...@@ -1476,7 +1476,13 @@ TEST(FormatterTest, PrecisionRounding) { ...@@ -1476,7 +1476,13 @@ TEST(FormatterTest, PrecisionRounding) {
EXPECT_EQ("0.001", format("{:.3f}", 0.0005)); EXPECT_EQ("0.001", format("{:.3f}", 0.0005));
EXPECT_EQ("0.001", format("{:.3f}", 0.00149)); EXPECT_EQ("0.001", format("{:.3f}", 0.00149));
EXPECT_EQ("0.002", format("{:.3f}", 0.0015)); EXPECT_EQ("0.002", format("{:.3f}", 0.0015));
EXPECT_EQ("1.000", format("{:.3f}", 0.9999));
EXPECT_EQ("0.00123", format("{:.3}", 0.00123)); EXPECT_EQ("0.00123", format("{:.3}", 0.00123));
// Trigger rounding error in Grisu by a carefully chosen number.
auto n = 3788512123356.985352;
char buffer[64];
sprintf(buffer, "%f", n);
EXPECT_EQ(buffer, format("{:f}", n));
} }
TEST(FormatterTest, FormatNaN) { TEST(FormatterTest, FormatNaN) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment