1b2822597SOverMighty //===-- Utility class to test different flavors of ufromfpx -----*- C++ -*-===// 2b2822597SOverMighty // 3b2822597SOverMighty // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4b2822597SOverMighty // See https://llvm.org/LICENSE.txt for license information. 5b2822597SOverMighty // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b2822597SOverMighty // 7b2822597SOverMighty //===----------------------------------------------------------------------===// 8b2822597SOverMighty 9b2822597SOverMighty #ifndef LIBC_TEST_SRC_MATH_SMOKE_UFROMFPXTEST_H 10b2822597SOverMighty #define LIBC_TEST_SRC_MATH_SMOKE_UFROMFPXTEST_H 11b2822597SOverMighty 12837dab96SRoland McGrath #include "test/UnitTest/FEnvSafeTest.h" 13b2822597SOverMighty #include "test/UnitTest/FPMatcher.h" 14b2822597SOverMighty #include "test/UnitTest/Test.h" 15b2822597SOverMighty 16b2822597SOverMighty template <typename T> 17837dab96SRoland McGrath class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { 18b2822597SOverMighty 19b2822597SOverMighty DECLARE_SPECIAL_CONSTANTS(T) 20b2822597SOverMighty 21b2822597SOverMighty public: 22b2822597SOverMighty typedef T (*UfromfpxFunc)(T, int, unsigned int); 23b2822597SOverMighty testSpecialNumbersNonzeroWidth(UfromfpxFunc func)24b2822597SOverMighty void testSpecialNumbersNonzeroWidth(UfromfpxFunc func) { 25b2822597SOverMighty for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 26b2822597SOverMighty EXPECT_FP_EQ(zero, func(zero, rnd, 32U)); 27b2822597SOverMighty EXPECT_FP_EQ(neg_zero, func(neg_zero, rnd, 32U)); 28b2822597SOverMighty 296aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 32U), FE_INVALID); 306aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 32U), FE_INVALID); 31b2822597SOverMighty 326aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 32U), FE_INVALID); 33b2822597SOverMighty } 34b2822597SOverMighty } 35b2822597SOverMighty testSpecialNumbersZeroWidth(UfromfpxFunc func)36b2822597SOverMighty void testSpecialNumbersZeroWidth(UfromfpxFunc func) { 37b2822597SOverMighty for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 386aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(zero, rnd, 0U), FE_INVALID); 396aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_zero, rnd, 0U), FE_INVALID); 40b2822597SOverMighty 416aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 0U), FE_INVALID); 426aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 0U), FE_INVALID); 43b2822597SOverMighty 446aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 0U), FE_INVALID); 45b2822597SOverMighty } 46b2822597SOverMighty } 47b2822597SOverMighty testRoundedNumbersWithinRange(UfromfpxFunc func)48b2822597SOverMighty void testRoundedNumbersWithinRange(UfromfpxFunc func) { 49b2822597SOverMighty for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 50b2822597SOverMighty EXPECT_FP_EQ(T(1.0), func(T(1.0), rnd, 1U)); 51b2822597SOverMighty EXPECT_FP_EQ(T(10.0), func(T(10.0), rnd, 4U)); 52b2822597SOverMighty EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 11U)); 536aee1f9dSOverMighty EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 64U)); 54b2822597SOverMighty } 55b2822597SOverMighty } 56b2822597SOverMighty testRoundedNumbersOutsideRange(UfromfpxFunc func)57b2822597SOverMighty void testRoundedNumbersOutsideRange(UfromfpxFunc func) { 58b2822597SOverMighty for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 596aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.0), rnd, 32U), FE_INVALID); 606aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.0), rnd, 3U), FE_INVALID); 616aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.0), rnd, 32U), FE_INVALID); 626aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.0), rnd, 10U), FE_INVALID); 636aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.0), rnd, 32U), FE_INVALID); 64b2822597SOverMighty } 65b2822597SOverMighty } 66b2822597SOverMighty testFractionsUpwardWithinRange(UfromfpxFunc func)67b2822597SOverMighty void testFractionsUpwardWithinRange(UfromfpxFunc func) { 68b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.5), FP_INT_UPWARD, 1U), 69b2822597SOverMighty FE_INEXACT); 70b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U), 71b2822597SOverMighty FE_INEXACT); 72b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.115), FP_INT_UPWARD, 1U), 73b2822597SOverMighty FE_INEXACT); 74b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U), 75b2822597SOverMighty FE_INEXACT); 76b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_UPWARD, 1U), 77b2822597SOverMighty FE_INEXACT); 78b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U), 79b2822597SOverMighty FE_INEXACT); 80b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.3), FP_INT_UPWARD, 2U), 81b2822597SOverMighty FE_INEXACT); 82b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_UPWARD, 2U), 83b2822597SOverMighty FE_INEXACT); 84b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_UPWARD, 2U), 85b2822597SOverMighty FE_INEXACT); 86b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.32), FP_INT_UPWARD, 4U), 87b2822597SOverMighty FE_INEXACT); 88b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U), 89b2822597SOverMighty FE_INEXACT); 90*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U), 91b2822597SOverMighty FE_INEXACT); 92*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U), 93b2822597SOverMighty FE_INEXACT); 94b2822597SOverMighty } 95b2822597SOverMighty testFractionsUpwardOutsideRange(UfromfpxFunc func)96b2822597SOverMighty void testFractionsUpwardOutsideRange(UfromfpxFunc func) { 976aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 1U), 986aee1f9dSOverMighty FE_INVALID); 996aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_UPWARD, 32U), 1006aee1f9dSOverMighty FE_INVALID); 1016aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 1U), 1026aee1f9dSOverMighty FE_INVALID); 1036aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_UPWARD, 32U), 1046aee1f9dSOverMighty FE_INVALID); 1056aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 1U), 1066aee1f9dSOverMighty FE_INVALID); 1076aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_UPWARD, 32U), 1086aee1f9dSOverMighty FE_INVALID); 1096aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 3U), 1106aee1f9dSOverMighty FE_INVALID); 1116aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 32U), 1126aee1f9dSOverMighty FE_INVALID); 1136aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 3U), 1146aee1f9dSOverMighty FE_INVALID); 1156aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 3U), 1166aee1f9dSOverMighty FE_INVALID); 117*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 6U), 1186aee1f9dSOverMighty FE_INVALID); 119*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 32U), 1206aee1f9dSOverMighty FE_INVALID); 121*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 6U), 1226aee1f9dSOverMighty FE_INVALID); 123*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 32U), 1246aee1f9dSOverMighty FE_INVALID); 125b2822597SOverMighty } 126b2822597SOverMighty testFractionsDownwardWithinRange(UfromfpxFunc func)127b2822597SOverMighty void testFractionsDownwardWithinRange(UfromfpxFunc func) { 128b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U), 129b2822597SOverMighty FE_INEXACT); 130b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U), 131b2822597SOverMighty FE_INEXACT); 132b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U), 133b2822597SOverMighty FE_INEXACT); 134b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 1U), 135b2822597SOverMighty FE_INEXACT); 136b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 1U), 137b2822597SOverMighty FE_INEXACT); 138b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 1U), 139b2822597SOverMighty FE_INEXACT); 140b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 4U), 141b2822597SOverMighty FE_INEXACT); 142b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U), 143b2822597SOverMighty FE_INEXACT); 144*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U), 145*6b5ae148SOverMighty FE_INEXACT); 146*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U), 147*6b5ae148SOverMighty FE_INEXACT); 148b2822597SOverMighty } 149b2822597SOverMighty testFractionsDownwardOutsideRange(UfromfpxFunc func)150b2822597SOverMighty void testFractionsDownwardOutsideRange(UfromfpxFunc func) { 1516aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.5), FP_INT_DOWNWARD, 32U), 1526aee1f9dSOverMighty FE_INVALID); 1536aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.115), FP_INT_DOWNWARD, 32U), 1546aee1f9dSOverMighty FE_INVALID); 1556aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.715), FP_INT_DOWNWARD, 32U), 1566aee1f9dSOverMighty FE_INVALID); 1576aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 32U), 1586aee1f9dSOverMighty FE_INVALID); 1596aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 32U), 1606aee1f9dSOverMighty FE_INVALID); 1616aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 32U), 1626aee1f9dSOverMighty FE_INVALID); 1636aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 3U), 1646aee1f9dSOverMighty FE_INVALID); 1656aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 32U), 1666aee1f9dSOverMighty FE_INVALID); 1676aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 3U), 1686aee1f9dSOverMighty FE_INVALID); 1696aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 32U), 1706aee1f9dSOverMighty FE_INVALID); 171*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 6U), 1726aee1f9dSOverMighty FE_INVALID); 173*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 32U), 1746aee1f9dSOverMighty FE_INVALID); 175*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 6U), 1766aee1f9dSOverMighty FE_INVALID); 177*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 32U), 1786aee1f9dSOverMighty FE_INVALID); 179b2822597SOverMighty } 180b2822597SOverMighty testFractionsTowardZeroWithinRange(UfromfpxFunc func)181b2822597SOverMighty void testFractionsTowardZeroWithinRange(UfromfpxFunc func) { 182b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U), 183b2822597SOverMighty FE_INEXACT); 184b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U), 185b2822597SOverMighty FE_INEXACT); 186b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U), 187b2822597SOverMighty FE_INEXACT); 188b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U), 189b2822597SOverMighty FE_INEXACT); 190b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U), 191b2822597SOverMighty FE_INEXACT); 192b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U), 193b2822597SOverMighty FE_INEXACT); 194b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 1U), 195b2822597SOverMighty FE_INEXACT); 196b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 1U), 197b2822597SOverMighty FE_INEXACT); 198b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 1U), 199b2822597SOverMighty FE_INEXACT); 200b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 4U), 201b2822597SOverMighty FE_INEXACT); 202b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U), 203b2822597SOverMighty FE_INEXACT); 204b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 205*6b5ae148SOverMighty T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U), FE_INEXACT); 206b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 207*6b5ae148SOverMighty T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U), FE_INEXACT); 208b2822597SOverMighty } 209b2822597SOverMighty testFractionsTowardZeroOutsideRange(UfromfpxFunc func)210b2822597SOverMighty void testFractionsTowardZeroOutsideRange(UfromfpxFunc func) { 2116aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_TOWARDZERO, 32U), 2126aee1f9dSOverMighty FE_INVALID); 2136aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TOWARDZERO, 32U), 2146aee1f9dSOverMighty FE_INVALID); 2156aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TOWARDZERO, 32U), 2166aee1f9dSOverMighty FE_INVALID); 2176aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 3U), 2186aee1f9dSOverMighty FE_INVALID); 2196aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 32U), 2206aee1f9dSOverMighty FE_INVALID); 2216aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 3U), 2226aee1f9dSOverMighty FE_INVALID); 2236aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 32U), 2246aee1f9dSOverMighty FE_INVALID); 225*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 6U), 2266aee1f9dSOverMighty FE_INVALID); 227*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 32U), 2286aee1f9dSOverMighty FE_INVALID); 229*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 6U), 2306aee1f9dSOverMighty FE_INVALID); 231*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 32U), 2326aee1f9dSOverMighty FE_INVALID); 233b2822597SOverMighty } 234b2822597SOverMighty testFractionsToNearestFromZeroWithinRange(UfromfpxFunc func)235b2822597SOverMighty void testFractionsToNearestFromZeroWithinRange(UfromfpxFunc func) { 236b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 237b2822597SOverMighty T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 238b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 239b2822597SOverMighty T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 240b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 241b2822597SOverMighty T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 242b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 243b2822597SOverMighty T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 244b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 245b2822597SOverMighty T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 246b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 247b2822597SOverMighty T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 248b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 249b2822597SOverMighty T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 250b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 251b2822597SOverMighty T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INEXACT); 252b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 253b2822597SOverMighty T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INEXACT); 254b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 255*6b5ae148SOverMighty T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT); 256b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 257*6b5ae148SOverMighty T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT); 258b2822597SOverMighty } 259b2822597SOverMighty testFractionsToNearestFromZeroOutsideRange(UfromfpxFunc func)260b2822597SOverMighty void testFractionsToNearestFromZeroOutsideRange(UfromfpxFunc func) { 2616aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2626aee1f9dSOverMighty aNaN, func(T(-0.5), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2636aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2646aee1f9dSOverMighty aNaN, func(T(-0.715), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2656aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2666aee1f9dSOverMighty aNaN, func(T(-1.3), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2676aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2686aee1f9dSOverMighty aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 2696aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2706aee1f9dSOverMighty aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2716aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2726aee1f9dSOverMighty aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 2736aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2746aee1f9dSOverMighty aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2756aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2766aee1f9dSOverMighty aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 3U), FE_INVALID); 2776aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2786aee1f9dSOverMighty aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2796aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2806aee1f9dSOverMighty aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 3U), FE_INVALID); 2816aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 2826aee1f9dSOverMighty aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2836aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 284*6b5ae148SOverMighty aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); 2856aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 286*6b5ae148SOverMighty aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 2876aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 288*6b5ae148SOverMighty aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); 2896aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 290*6b5ae148SOverMighty aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 291b2822597SOverMighty } 292b2822597SOverMighty testFractionsToNearestWithinRange(UfromfpxFunc func)293b2822597SOverMighty void testFractionsToNearestWithinRange(UfromfpxFunc func) { 294b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U), 295b2822597SOverMighty FE_INEXACT); 296b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U), 297b2822597SOverMighty FE_INEXACT); 298b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U), 299b2822597SOverMighty FE_INEXACT); 300b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U), 301b2822597SOverMighty FE_INEXACT); 302b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_TONEAREST, 1U), 303b2822597SOverMighty FE_INEXACT); 304b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TONEAREST, 1U), 305b2822597SOverMighty FE_INEXACT); 306b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_TONEAREST, 2U), 307b2822597SOverMighty FE_INEXACT); 308b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_TONEAREST, 2U), 309b2822597SOverMighty FE_INEXACT); 310b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TONEAREST, 4U), 311b2822597SOverMighty FE_INEXACT); 312b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U), 313b2822597SOverMighty FE_INEXACT); 314*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U), 315*6b5ae148SOverMighty FE_INEXACT); 316*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U), 317*6b5ae148SOverMighty FE_INEXACT); 318b2822597SOverMighty 319b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U), 320b2822597SOverMighty FE_INEXACT); 321b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.5), FP_INT_TONEAREST, 2U), 322b2822597SOverMighty FE_INEXACT); 323b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(3.0), func(T(2.75), FP_INT_TONEAREST, 2U), 324b2822597SOverMighty FE_INEXACT); 325b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(5.0), func(T(5.3), FP_INT_TONEAREST, 3U), 326b2822597SOverMighty FE_INEXACT); 327b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.5), FP_INT_TONEAREST, 3U), 328b2822597SOverMighty FE_INEXACT); 329b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.75), FP_INT_TONEAREST, 3U), 330b2822597SOverMighty FE_INEXACT); 331b2822597SOverMighty } 332b2822597SOverMighty testFractionsToNearestOutsideRange(UfromfpxFunc func)333b2822597SOverMighty void testFractionsToNearestOutsideRange(UfromfpxFunc func) { 3346aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.715), FP_INT_TONEAREST, 32U), 3356aee1f9dSOverMighty FE_INVALID); 3366aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_TONEAREST, 32U), 3376aee1f9dSOverMighty FE_INVALID); 3386aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 1U), 3396aee1f9dSOverMighty FE_INVALID); 3406aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 32U), 3416aee1f9dSOverMighty FE_INVALID); 3426aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 1U), 3436aee1f9dSOverMighty FE_INVALID); 3446aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 32U), 3456aee1f9dSOverMighty FE_INVALID); 3466aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 3U), 3476aee1f9dSOverMighty FE_INVALID); 3486aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 32U), 3496aee1f9dSOverMighty FE_INVALID); 3506aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 3U), 3516aee1f9dSOverMighty FE_INVALID); 3526aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 32U), 3536aee1f9dSOverMighty FE_INVALID); 354*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 6U), 3556aee1f9dSOverMighty FE_INVALID); 356*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 32U), 3576aee1f9dSOverMighty FE_INVALID); 358*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 6U), 3596aee1f9dSOverMighty FE_INVALID); 360*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 32U), 3616aee1f9dSOverMighty FE_INVALID); 362b2822597SOverMighty 3636aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 1U), 3646aee1f9dSOverMighty FE_INVALID); 3656aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 32U), 3666aee1f9dSOverMighty FE_INVALID); 3676aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 1U), 3686aee1f9dSOverMighty FE_INVALID); 3696aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 32U), 3706aee1f9dSOverMighty FE_INVALID); 3716aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 1U), 3726aee1f9dSOverMighty FE_INVALID); 3736aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 32U), 3746aee1f9dSOverMighty FE_INVALID); 3756aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 2U), 3766aee1f9dSOverMighty FE_INVALID); 3776aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 32U), 3786aee1f9dSOverMighty FE_INVALID); 3796aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 2U), 3806aee1f9dSOverMighty FE_INVALID); 3816aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 32U), 3826aee1f9dSOverMighty FE_INVALID); 3836aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 2U), 3846aee1f9dSOverMighty FE_INVALID); 3856aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 32U), 3866aee1f9dSOverMighty FE_INVALID); 387b2822597SOverMighty } 388b2822597SOverMighty testFractionsToNearestFallbackWithinRange(UfromfpxFunc func)389b2822597SOverMighty void testFractionsToNearestFallbackWithinRange(UfromfpxFunc func) { 390b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 391b2822597SOverMighty T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT); 392b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 393b2822597SOverMighty T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 394b2822597SOverMighty FE_INEXACT); 395b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 396b2822597SOverMighty T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 397b2822597SOverMighty FE_INEXACT); 398b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 399b2822597SOverMighty T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 400b2822597SOverMighty FE_INEXACT); 401b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 402b2822597SOverMighty T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 403b2822597SOverMighty FE_INEXACT); 404b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 405b2822597SOverMighty T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT); 406b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 407b2822597SOverMighty T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT); 408b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 409b2822597SOverMighty T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT); 410b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 411b2822597SOverMighty T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), 412b2822597SOverMighty FE_INEXACT); 413b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 414b2822597SOverMighty T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), 415b2822597SOverMighty FE_INEXACT); 416b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 417*6b5ae148SOverMighty T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), 418b2822597SOverMighty FE_INEXACT); 419b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 420*6b5ae148SOverMighty T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), 421b2822597SOverMighty FE_INEXACT); 422b2822597SOverMighty 423b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 424b2822597SOverMighty T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT); 425b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 426b2822597SOverMighty T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT); 427b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 428b2822597SOverMighty T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT); 429b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 430b2822597SOverMighty T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 431b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 432b2822597SOverMighty T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 433b2822597SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 434b2822597SOverMighty T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 435b2822597SOverMighty } 436b2822597SOverMighty testFractionsToNearestFallbackOutsideRange(UfromfpxFunc func)437b2822597SOverMighty void testFractionsToNearestFallbackOutsideRange(UfromfpxFunc func) { 4386aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4396aee1f9dSOverMighty aNaN, func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 4406aee1f9dSOverMighty FE_INVALID); 4416aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4426aee1f9dSOverMighty aNaN, func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4436aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4446aee1f9dSOverMighty aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 4456aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4466aee1f9dSOverMighty aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4476aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4486aee1f9dSOverMighty aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 4496aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4506aee1f9dSOverMighty aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4516aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4526aee1f9dSOverMighty aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 4536aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4546aee1f9dSOverMighty aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 4556aee1f9dSOverMighty FE_INVALID); 4566aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4576aee1f9dSOverMighty aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 4586aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4596aee1f9dSOverMighty aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 4606aee1f9dSOverMighty FE_INVALID); 4616aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 462*6b5ae148SOverMighty aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); 463*6b5ae148SOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 464*6b5ae148SOverMighty aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 4656aee1f9dSOverMighty FE_INVALID); 4666aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 467*6b5ae148SOverMighty aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); 4686aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 469*6b5ae148SOverMighty aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 4706aee1f9dSOverMighty FE_INVALID); 471b2822597SOverMighty 4726aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4736aee1f9dSOverMighty aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 4746aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4756aee1f9dSOverMighty aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4766aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4776aee1f9dSOverMighty aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 4786aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4796aee1f9dSOverMighty aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4806aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4816aee1f9dSOverMighty aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 4826aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4836aee1f9dSOverMighty aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4846aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4856aee1f9dSOverMighty aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 4866aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4876aee1f9dSOverMighty aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4886aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4896aee1f9dSOverMighty aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 4906aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4916aee1f9dSOverMighty aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 4926aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4936aee1f9dSOverMighty aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 4946aee1f9dSOverMighty EXPECT_FP_EQ_WITH_EXCEPTION( 4956aee1f9dSOverMighty aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 496b2822597SOverMighty } 497b2822597SOverMighty }; 498b2822597SOverMighty 499b2822597SOverMighty #define LIST_UFROMFPX_TESTS(T, func) \ 500b2822597SOverMighty using LlvmLibcUfromfpxTest = UfromfpxTestTemplate<T>; \ 501b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, SpecialNumbersNonzeroWidth) { \ 502b2822597SOverMighty testSpecialNumbersNonzeroWidth(&func); \ 503b2822597SOverMighty } \ 504b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, SpecialNumbersZeroWidth) { \ 505b2822597SOverMighty testSpecialNumbersZeroWidth(&func); \ 506b2822597SOverMighty } \ 507b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, RoundedNumbersWithinRange) { \ 508b2822597SOverMighty testRoundedNumbersWithinRange(&func); \ 509b2822597SOverMighty } \ 510b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, RoundedNumbersOutsideRange) { \ 511b2822597SOverMighty testRoundedNumbersOutsideRange(&func); \ 512b2822597SOverMighty } \ 513b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsUpwardWithinRange) { \ 514b2822597SOverMighty testFractionsUpwardWithinRange(&func); \ 515b2822597SOverMighty } \ 516b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsUpwardOutsideRange) { \ 517b2822597SOverMighty testFractionsUpwardOutsideRange(&func); \ 518b2822597SOverMighty } \ 519b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsDownwardWithinRange) { \ 520b2822597SOverMighty testFractionsDownwardWithinRange(&func); \ 521b2822597SOverMighty } \ 522b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsDownwardOutsideRange) { \ 523b2822597SOverMighty testFractionsDownwardOutsideRange(&func); \ 524b2822597SOverMighty } \ 525b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsTowardZeroWithinRange) { \ 526b2822597SOverMighty testFractionsTowardZeroWithinRange(&func); \ 527b2822597SOverMighty } \ 528b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsTowardZeroOutsideRange) { \ 529b2822597SOverMighty testFractionsTowardZeroOutsideRange(&func); \ 530b2822597SOverMighty } \ 531b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFromZeroWithinRange) { \ 532b2822597SOverMighty testFractionsToNearestFromZeroWithinRange(&func); \ 533b2822597SOverMighty } \ 534b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFromZeroOutsideRange) { \ 535b2822597SOverMighty testFractionsToNearestFromZeroOutsideRange(&func); \ 536b2822597SOverMighty } \ 537b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestWithinRange) { \ 538b2822597SOverMighty testFractionsToNearestWithinRange(&func); \ 539b2822597SOverMighty } \ 540b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestOutsideRange) { \ 541b2822597SOverMighty testFractionsToNearestOutsideRange(&func); \ 542b2822597SOverMighty } \ 543b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFallbackWithinRange) { \ 544b2822597SOverMighty testFractionsToNearestFallbackWithinRange(&func); \ 545b2822597SOverMighty } \ 546b2822597SOverMighty TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFallbackOutsideRange) { \ 547b2822597SOverMighty testFractionsToNearestFallbackOutsideRange(&func); \ 548b2822597SOverMighty } 549b2822597SOverMighty 550b2822597SOverMighty #endif // LIBC_TEST_SRC_MATH_SMOKE_UFROMFPXTEST_H 551