diff --git a/test/unittests/execute_floating_point_test.cpp b/test/unittests/execute_floating_point_test.cpp index 9cfdc424e..6e0988476 100644 --- a/test/unittests/execute_floating_point_test.cpp +++ b/test/unittests/execute_floating_point_test.cpp @@ -98,33 +98,18 @@ TEST(execute_floating_point, f64_promote_f32) EXPECT_THAT(execute(*instance, 0, {f32_limits::infinity()}), Result(f64_limits::infinity())); EXPECT_THAT(execute(*instance, 0, {-f32_limits::infinity()}), Result(-f64_limits::infinity())); - { - // The canonical NaN must result in canonical NaN (only the top bit set). - const auto result = execute(*instance, 0, {nan()}); - ASSERT_TRUE(!result.trapped && result.has_value); - const auto cnan = result.value.f64; - EXPECT_TRUE(std::isnan(cnan)); - EXPECT_EQ(get_nan_payload(cnan), FPUtils::CanonicalNaNPayload); - } - - { - // An arithmetic NaN must result in any arithmetic NaN (payload >= canonical payload). - const auto result = - execute(*instance, 0, {nan(FPUtils::CanonicalNaNPayload + 1)}); - ASSERT_TRUE(!result.trapped && result.has_value); - const auto anan = result.value.f64; - EXPECT_TRUE(std::isnan(anan)); - EXPECT_GT(get_nan_payload(anan), FPUtils::CanonicalNaNPayload); - } - - { - // Other NaN must also result in arithmetic NaN. - const auto result = execute(*instance, 0, {nan(1)}); - ASSERT_TRUE(!result.trapped && result.has_value); - const auto nan = result.value.f64; - EXPECT_TRUE(std::isnan(nan)); - EXPECT_GT(get_nan_payload(nan), FPUtils::CanonicalNaNPayload); - } + // The canonical NaN must result in canonical NaN (only the top bit set). + EXPECT_THAT(execute(*instance, 0, {FP32::nan()}), Result(FP64::nan())); + + // An arithmetic NaN must result in any arithmetic NaN (payload >= canonical payload). + const auto res1 = execute(*instance, 0, {FP32::nan(FP32::canon + 1)}); + ASSERT_TRUE(!res1.trapped && res1.has_value); + EXPECT_GT(FP{res1.value.f64}.nan_payload(), FP64::canon); + + // Other NaN must also result in arithmetic NaN. + const auto res2 = execute(*instance, 0, {FP32::nan(1)}); + ASSERT_TRUE(!res2.trapped && res2.has_value); + EXPECT_GT(FP{res2.value.f64}.nan_payload(), FP64::canon); }