diff --git a/libc/test/UnitTest/CMakeLists.txt b/libc/test/UnitTest/CMakeLists.txt --- a/libc/test/UnitTest/CMakeLists.txt +++ b/libc/test/UnitTest/CMakeLists.txt @@ -39,6 +39,8 @@ FPExceptMatcher.cpp FPExceptMatcher.h FPMatcher.h + RoundingModeUtils.cpp + RoundingModeUtils.h ) target_include_directories(LibcFPTestHelpers PUBLIC ${LIBC_SOURCE_DIR}) target_link_libraries(LibcFPTestHelpers LibcUnitTest libc_test_utils) diff --git a/libc/test/UnitTest/FPMatcher.h b/libc/test/UnitTest/FPMatcher.h --- a/libc/test/UnitTest/FPMatcher.h +++ b/libc/test/UnitTest/FPMatcher.h @@ -11,9 +11,9 @@ #include "src/__support/FPUtil/FEnvImpl.h" #include "src/__support/FPUtil/FPBits.h" +#include "test/UnitTest/RoundingModeUtils.h" #include "test/UnitTest/StringUtils.h" #include "test/UnitTest/Test.h" -#include "utils/testutils/RoundingModeUtils.h" #include @@ -196,7 +196,7 @@ #define EXPECT_FP_EQ_ALL_ROUNDING(expected, actual) \ do { \ - using namespace __llvm_libc::testutils; \ + using namespace __llvm_libc::fputil::testing; \ ForceRoundingMode __r1(RoundingMode::Nearest); \ EXPECT_FP_EQ((expected), (actual)); \ ForceRoundingMode __r2(RoundingMode::Upward); \ diff --git a/libc/utils/testutils/RoundingModeUtils.h b/libc/test/UnitTest/RoundingModeUtils.h rename from libc/utils/testutils/RoundingModeUtils.h rename to libc/test/UnitTest/RoundingModeUtils.h --- a/libc/utils/testutils/RoundingModeUtils.h +++ b/libc/test/UnitTest/RoundingModeUtils.h @@ -12,7 +12,8 @@ #include namespace __llvm_libc { -namespace testutils { +namespace fputil { +namespace testing { enum class RoundingMode : uint8_t { Upward, Downward, TowardZero, Nearest }; @@ -28,7 +29,8 @@ ForceRoundingModeTest() : ForceRoundingMode(R) {} }; -} // namespace testutils +} // namespace testing +} // namespace fputil } // namespace __llvm_libc #endif // LLVM_LIBC_UTILS_TESTUTILS_ROUNDINGMODEUTILS_H diff --git a/libc/utils/testutils/RoundingModeUtils.cpp b/libc/test/UnitTest/RoundingModeUtils.cpp rename from libc/utils/testutils/RoundingModeUtils.cpp rename to libc/test/UnitTest/RoundingModeUtils.cpp --- a/libc/utils/testutils/RoundingModeUtils.cpp +++ b/libc/test/UnitTest/RoundingModeUtils.cpp @@ -11,7 +11,8 @@ #include namespace __llvm_libc { -namespace testutils { +namespace fputil { +namespace testing { int get_fe_rounding(RoundingMode mode) { switch (mode) { @@ -44,5 +45,6 @@ fesetround(old_rounding_mode); } -} // namespace testutils +} // namespace testing +} // namespace fputil } // namespace __llvm_libc diff --git a/libc/test/src/stdio/CMakeLists.txt b/libc/test/src/stdio/CMakeLists.txt --- a/libc/test/src/stdio/CMakeLists.txt +++ b/libc/test/src/stdio/CMakeLists.txt @@ -112,7 +112,7 @@ LibcMemoryHelpers ) -add_libc_unittest( +add_fp_unittest( sprintf_test SUITE libc_stdio_unittests diff --git a/libc/test/src/stdio/sprintf_test.cpp b/libc/test/src/stdio/sprintf_test.cpp --- a/libc/test/src/stdio/sprintf_test.cpp +++ b/libc/test/src/stdio/sprintf_test.cpp @@ -10,8 +10,8 @@ #include "src/__support/FPUtil/FPBits.h" #include "src/__support/FPUtil/PlatformDefs.h" +#include "test/UnitTest/RoundingModeUtils.h" #include "test/UnitTest/Test.h" -#include "utils/testutils/RoundingModeUtils.h" // #include // namespace __llvm_libc { @@ -505,8 +505,8 @@ #ifndef LIBC_COPT_PRINTF_DISABLE_FLOAT TEST_F(LlvmLibcSPrintfTest, FloatHexExpConv) { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); double inf = __llvm_libc::fputil::FPBits::inf().get_val(); double nan = __llvm_libc::fputil::FPBits::build_nan(1); @@ -706,8 +706,8 @@ // Rounding Mode Tests. { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); written = __llvm_libc::sprintf(buff, "%.1a", 0x1.08p0); ASSERT_STREQ_LEN(written, buff, "0x1.0p+0"); @@ -735,8 +735,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Upward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Upward); written = __llvm_libc::sprintf(buff, "%.1a", 0x1.08p0); ASSERT_STREQ_LEN(written, buff, "0x1.1p+0"); @@ -764,8 +764,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Downward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Downward); written = __llvm_libc::sprintf(buff, "%.1a", 0x1.08p0); ASSERT_STREQ_LEN(written, buff, "0x1.0p+0"); @@ -793,8 +793,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::TowardZero); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::TowardZero); written = __llvm_libc::sprintf(buff, "%.1a", 0x1.08p0); ASSERT_STREQ_LEN(written, buff, "0x1.0p+0"); @@ -866,8 +866,8 @@ } TEST_F(LlvmLibcSPrintfTest, FloatDecimalConv) { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); double inf = __llvm_libc::fputil::FPBits::inf().get_val(); double nan = __llvm_libc::fputil::FPBits::build_nan(1); @@ -1222,8 +1222,8 @@ // Rounding Mode Tests. { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); written = __llvm_libc::sprintf(buff, "%.1f", 1.75); ASSERT_STREQ_LEN(written, buff, "1.8"); @@ -1263,8 +1263,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Upward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Upward); written = __llvm_libc::sprintf(buff, "%.1f", 1.75); ASSERT_STREQ_LEN(written, buff, "1.8"); @@ -1304,8 +1304,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Downward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Downward); written = __llvm_libc::sprintf(buff, "%.1f", 1.75); ASSERT_STREQ_LEN(written, buff, "1.7"); @@ -1345,8 +1345,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::TowardZero); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::TowardZero); written = __llvm_libc::sprintf(buff, "%.1f", 1.75); ASSERT_STREQ_LEN(written, buff, "1.7"); @@ -1453,8 +1453,8 @@ } TEST_F(LlvmLibcSPrintfTest, FloatExponentConv) { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); double inf = __llvm_libc::fputil::FPBits::inf().get_val(); double nan = __llvm_libc::fputil::FPBits::build_nan(1); @@ -1808,8 +1808,8 @@ // Rounding Mode Tests. { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); written = __llvm_libc::sprintf(buff, "%.1e", 1.75); ASSERT_STREQ_LEN(written, buff, "1.8e+00"); @@ -1849,8 +1849,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Upward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Upward); written = __llvm_libc::sprintf(buff, "%.1e", 1.75); ASSERT_STREQ_LEN(written, buff, "1.8e+00"); @@ -1890,8 +1890,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Downward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Downward); written = __llvm_libc::sprintf(buff, "%.1e", 1.75); ASSERT_STREQ_LEN(written, buff, "1.7e+00"); @@ -1931,8 +1931,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::TowardZero); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::TowardZero); written = __llvm_libc::sprintf(buff, "%.1e", 1.75); ASSERT_STREQ_LEN(written, buff, "1.7e+00"); @@ -2048,8 +2048,8 @@ } TEST_F(LlvmLibcSPrintfTest, FloatAutoConv) { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); double inf = __llvm_libc::fputil::FPBits::inf().get_val(); double nan = __llvm_libc::fputil::FPBits::build_nan(1); @@ -2427,8 +2427,8 @@ // Rounding Mode Tests. { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Nearest); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Nearest); written = __llvm_libc::sprintf(buff, "%.2g", 1.75); ASSERT_STREQ_LEN(written, buff, "1.8"); @@ -2468,8 +2468,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Upward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Upward); written = __llvm_libc::sprintf(buff, "%.2g", 1.75); ASSERT_STREQ_LEN(written, buff, "1.8"); @@ -2509,8 +2509,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::Downward); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::Downward); written = __llvm_libc::sprintf(buff, "%.2g", 1.75); ASSERT_STREQ_LEN(written, buff, "1.7"); @@ -2550,8 +2550,8 @@ } { - __llvm_libc::testutils::ForceRoundingMode r( - __llvm_libc::testutils::RoundingMode::TowardZero); + __llvm_libc::fputil::testing::ForceRoundingMode r( + __llvm_libc::fputil::testing::RoundingMode::TowardZero); written = __llvm_libc::sprintf(buff, "%.2g", 1.75); ASSERT_STREQ_LEN(written, buff, "1.7"); diff --git a/libc/test/src/stdlib/CMakeLists.txt b/libc/test/src/stdlib/CMakeLists.txt --- a/libc/test/src/stdlib/CMakeLists.txt +++ b/libc/test/src/stdlib/CMakeLists.txt @@ -53,7 +53,7 @@ libc.src.stdlib.atoll ) -add_libc_unittest( +add_fp_unittest( strtod_test SUITE libc_stdlib_unittests @@ -64,7 +64,7 @@ libc.src.stdlib.strtod ) -add_libc_unittest( +add_fp_unittest( strtof_test SUITE libc_stdlib_unittests diff --git a/libc/test/src/stdlib/strtod_test.cpp b/libc/test/src/stdlib/strtod_test.cpp --- a/libc/test/src/stdlib/strtod_test.cpp +++ b/libc/test/src/stdlib/strtod_test.cpp @@ -10,14 +10,15 @@ #include "src/errno/libc_errno.h" #include "src/stdlib/strtod.h" +#include "test/UnitTest/FPMatcher.h" +#include "test/UnitTest/RoundingModeUtils.h" #include "test/UnitTest/Test.h" -#include "utils/testutils/RoundingModeUtils.h" #include #include -using __llvm_libc::testutils::ForceRoundingModeTest; -using __llvm_libc::testutils::RoundingMode; +using __llvm_libc::fputil::testing::ForceRoundingModeTest; +using __llvm_libc::fputil::testing::RoundingMode; class LlvmLibcStrToDTest : public __llvm_libc::testing::Test, ForceRoundingModeTest { @@ -46,15 +47,8 @@ libc_errno = 0; double result = __llvm_libc::strtod(inputString, &str_end); - __llvm_libc::fputil::FPBits actual_fp = - __llvm_libc::fputil::FPBits(result); - EXPECT_EQ(str_end - inputString, expectedStrLen); - - EXPECT_EQ(actual_fp.bits, expected_fp.bits); - EXPECT_EQ(actual_fp.get_sign(), expected_fp.get_sign()); - EXPECT_EQ(actual_fp.get_exponent(), expected_fp.get_exponent()); - EXPECT_EQ(actual_fp.get_mantissa(), expected_fp.get_mantissa()); + EXPECT_FP_EQ(result, static_cast(expected_fp)); EXPECT_EQ(libc_errno, expectedErrno); } }; diff --git a/libc/test/src/stdlib/strtof_test.cpp b/libc/test/src/stdlib/strtof_test.cpp --- a/libc/test/src/stdlib/strtof_test.cpp +++ b/libc/test/src/stdlib/strtof_test.cpp @@ -10,14 +10,15 @@ #include "src/errno/libc_errno.h" #include "src/stdlib/strtof.h" +#include "test/UnitTest/FPMatcher.h" +#include "test/UnitTest/RoundingModeUtils.h" #include "test/UnitTest/Test.h" -#include "utils/testutils/RoundingModeUtils.h" #include #include -using __llvm_libc::testutils::ForceRoundingModeTest; -using __llvm_libc::testutils::RoundingMode; +using __llvm_libc::fputil::testing::ForceRoundingModeTest; +using __llvm_libc::fputil::testing::RoundingMode; class LlvmLibcStrToFTest : public __llvm_libc::testing::Test, ForceRoundingModeTest { @@ -46,15 +47,8 @@ libc_errno = 0; float result = __llvm_libc::strtof(inputString, &str_end); - __llvm_libc::fputil::FPBits actual_fp = - __llvm_libc::fputil::FPBits(result); - EXPECT_EQ(str_end - inputString, expectedStrLen); - - EXPECT_EQ(actual_fp.bits, expected_fp.bits); - EXPECT_EQ(actual_fp.get_sign(), expected_fp.get_sign()); - EXPECT_EQ(actual_fp.get_exponent(), expected_fp.get_exponent()); - EXPECT_EQ(actual_fp.get_mantissa(), expected_fp.get_mantissa()); + EXPECT_FP_EQ(result, static_cast(expected_fp)); EXPECT_EQ(libc_errno, expectedErrno); } }; diff --git a/libc/utils/MPFRWrapper/MPFRUtils.h b/libc/utils/MPFRWrapper/MPFRUtils.h --- a/libc/utils/MPFRWrapper/MPFRUtils.h +++ b/libc/utils/MPFRWrapper/MPFRUtils.h @@ -10,8 +10,8 @@ #define LLVM_LIBC_UTILS_TESTUTILS_MPFRUTILS_H #include "src/__support/CPP/type_traits.h" +#include "test/UnitTest/RoundingModeUtils.h" #include "test/UnitTest/Test.h" -#include "utils/testutils/RoundingModeUtils.h" #include @@ -86,8 +86,8 @@ EndTernaryOperationsSingleOutput, }; -using __llvm_libc::testutils::ForceRoundingMode; -using __llvm_libc::testutils::RoundingMode; +using __llvm_libc::fputil::testing::ForceRoundingMode; +using __llvm_libc::fputil::testing::RoundingMode; template struct BinaryInput { static_assert( diff --git a/libc/utils/testutils/CMakeLists.txt b/libc/utils/testutils/CMakeLists.txt --- a/libc/utils/testutils/CMakeLists.txt +++ b/libc/utils/testutils/CMakeLists.txt @@ -6,5 +6,4 @@ libc_test_utils ${EFFile} ExecuteFunction.h - RoundingModeUtils.cpp ) diff --git a/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel --- a/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/test/UnitTest/BUILD.bazel @@ -50,10 +50,12 @@ name = "fp_test_helpers", srcs = [ "FPExceptMatcher.cpp", + "RoundingModeUtils.cpp", ], hdrs = [ "FPExceptMatcher.h", "FPMatcher.h", + "RoundingModeUtils.h", ], deps = [ ":LibcUnitTest", diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel --- a/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/test/src/stdio/BUILD.bazel @@ -64,7 +64,7 @@ deps = [ "//libc:__support_fputil_fp_bits", "//libc:__support_fputil_platform_defs", - "//libc/utils/testutils:libc_test_utils", + "//libc/test/UnitTest:fp_test_helpers", ], ) diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/stdlib/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/stdlib/BUILD.bazel --- a/utils/bazel/llvm-project-overlay/libc/test/src/stdlib/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/test/src/stdlib/BUILD.bazel @@ -128,7 +128,7 @@ ], deps = [ "//libc:__support_fputil_fp_bits", - "//libc/utils/testutils:libc_test_utils", + "//libc/test/UnitTest:fp_test_helpers", ], ) @@ -141,6 +141,7 @@ deps = [ "//libc:__support_fputil_fp_bits", "//libc/utils/testutils:libc_test_utils", + "//libc/test/UnitTest:fp_test_helpers", ], ) diff --git a/utils/bazel/llvm-project-overlay/libc/utils/testutils/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/utils/testutils/BUILD.bazel --- a/utils/bazel/llvm-project-overlay/libc/utils/testutils/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/libc/utils/testutils/BUILD.bazel @@ -10,11 +10,9 @@ name = "libc_test_utils", srcs = [ "ExecuteFunctionUnix.cpp", - "RoundingModeUtils.cpp", ], hdrs = [ "ExecuteFunction.h", - "RoundingModeUtils.h", ], deps = [ "//libc:libc_root",