diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9d0216c8..e6c6bc09 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -91,8 +91,6 @@ add_fmt_test(assert-test) add_fmt_test(chrono-test) add_fmt_test(color-test) add_fmt_test(core-test) -add_fmt_test(grisu-test) -target_compile_definitions(grisu-test PRIVATE FMT_USE_GRISU=1) add_fmt_test(gtest-extra-test) add_fmt_test(format-test mock-allocator.h) if (MSVC) diff --git a/test/format-test.cc b/test/format-test.cc index 8d33f056..7c1fd496 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1277,14 +1277,30 @@ TEST(FormatterTest, PrecisionRounding) { EXPECT_EQ("1.000", format("{:.3f}", 0.9999)); EXPECT_EQ("0.00123", format("{:.3}", 0.00123)); EXPECT_EQ("0.1", format("{:.16g}", 0.1)); - // Trigger rounding error in Grisu by a carefully chosen number. - auto n = 3788512123356.985352; - char buffer[64]; - safe_sprintf(buffer, "%f", n); - EXPECT_EQ(buffer, format("{:f}", n)); + EXPECT_EQ("1", fmt::format("{:.0}", 1.0)); EXPECT_EQ("225.51575035152063720", fmt::format("{:.17f}", 225.51575035152064)); EXPECT_EQ("-761519619559038.2", fmt::format("{:.1f}", -761519619559038.2)); + EXPECT_EQ("1.9156918820264798e-56", + fmt::format("{}", 1.9156918820264798e-56)); + EXPECT_EQ("0.0000", fmt::format("{:.4f}", 7.2809479766055470e-15)); + + // Trigger a rounding error in Grisu by a specially chosen number. + EXPECT_EQ("3788512123356.985352", format("{:f}", 3788512123356.985352)); +} + +TEST(FormatterTest, PrettifyFloat) { + EXPECT_EQ("0.0001", fmt::format("{}", 1e-4)); + EXPECT_EQ("1e-05", fmt::format("{}", 1e-5)); + EXPECT_EQ("9.999e-05", fmt::format("{}", 9.999e-5)); + EXPECT_EQ("10000000000", fmt::format("{}", 1e10)); + EXPECT_EQ("100000000000", fmt::format("{}", 1e11)); + EXPECT_EQ("12340000000", fmt::format("{}", 1234e7)); + EXPECT_EQ("12.34", fmt::format("{}", 1234e-2)); + EXPECT_EQ("0.001234", fmt::format("{}", 1234e-6)); + EXPECT_EQ("0.1", fmt::format("{}", 0.1f)); + EXPECT_EQ("0.10000000149011612", fmt::format("{}", double(0.1f))); + EXPECT_EQ("1.3563156e-19", fmt::format("{}", 1.35631564e-19f)); } TEST(FormatterTest, FormatNaN) { diff --git a/test/grisu-test.cc b/test/grisu-test.cc deleted file mode 100644 index 926723dc..00000000 --- a/test/grisu-test.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Formatting library for C++ - Grisu tests -// -// Copyright (c) 2012 - present, Victor Zverovich -// All rights reserved. -// -// For the license information refer to format.h. - -#include "fmt/format.h" -#include "gtest.h" - -static bool reported_skipped; - -#undef TEST -#define TEST(test_fixture, test_name) \ - void test_fixture##test_name(); \ - GTEST_TEST(test_fixture, test_name) { \ - if (FMT_USE_GRISU) { \ - test_fixture##test_name(); \ - } else if (!reported_skipped) { \ - reported_skipped = true; \ - fmt::print("Skipping Grisu tests.\n"); \ - } \ - } \ - void test_fixture##test_name() - -TEST(GrisuTest, NaN) { - auto nan = std::numeric_limits::quiet_NaN(); - EXPECT_EQ("nan", fmt::format("{}", nan)); - EXPECT_EQ("-nan", fmt::format("{}", -nan)); -} - -TEST(GrisuTest, Inf) { - auto inf = std::numeric_limits::infinity(); - EXPECT_EQ("inf", fmt::format("{}", inf)); - EXPECT_EQ("-inf", fmt::format("{}", -inf)); -} - -TEST(GrisuTest, Zero) { EXPECT_EQ("0", fmt::format("{}", 0.0)); } - -TEST(GrisuTest, Round) { - EXPECT_EQ("1.9156918820264798e-56", - fmt::format("{}", 1.9156918820264798e-56)); - EXPECT_EQ("0.0000", fmt::format("{:.4f}", 7.2809479766055470e-15)); -} - -TEST(GrisuTest, Prettify) { - EXPECT_EQ("0.0001", fmt::format("{}", 1e-4)); - EXPECT_EQ("1e-05", fmt::format("{}", 1e-5)); - EXPECT_EQ("9.999e-05", fmt::format("{}", 9.999e-5)); - EXPECT_EQ("10000000000", fmt::format("{}", 1e10)); - EXPECT_EQ("100000000000", fmt::format("{}", 1e11)); - EXPECT_EQ("12340000000", fmt::format("{}", 1234e7)); - EXPECT_EQ("12.34", fmt::format("{}", 1234e-2)); - EXPECT_EQ("0.001234", fmt::format("{}", 1234e-6)); - EXPECT_EQ("0.1", fmt::format("{}", 0.1f)); - EXPECT_EQ("0.10000000149011612", fmt::format("{}", double(0.1f))); - EXPECT_EQ("1.3563156e-19", fmt::format("{}", 1.35631564e-19f)); -} - -TEST(GrisuTest, ZeroPrecision) { EXPECT_EQ("1", fmt::format("{:.0}", 1.0)); } - -TEST(GrisuTest, Fallback) { - EXPECT_EQ("1e+23", fmt::format("{}", 1e23)); - EXPECT_EQ("9e-265", fmt::format("{}", 9e-265)); - EXPECT_EQ("5.423717798060526e+125", - fmt::format("{}", 5.423717798060526e+125)); - EXPECT_EQ("1.372371880954233e-288", - fmt::format("{}", 1.372371880954233e-288)); - EXPECT_EQ("55388492.622190244", fmt::format("{}", 55388492.622190244)); - EXPECT_EQ("2.2506787569811123e-253", - fmt::format("{}", 2.2506787569811123e-253)); - EXPECT_EQ("1103618912042992.8", fmt::format("{}", 1103618912042992.8)); - // pow(2, -25) - assymetric boundaries: - EXPECT_EQ("2.9802322387695312e-08", - fmt::format("{}", 2.9802322387695312e-08)); -}