1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test different flavors of ufromfp ------*- C++ -*-===// 2*71db0c75SAndroid Build Coastguard Worker // 3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*71db0c75SAndroid Build Coastguard Worker // 7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*71db0c75SAndroid Build Coastguard Worker 9*71db0c75SAndroid Build Coastguard Worker #ifndef LIBC_TEST_SRC_MATH_SMOKE_UFROMFPTEST_H 10*71db0c75SAndroid Build Coastguard Worker #define LIBC_TEST_SRC_MATH_SMOKE_UFROMFPTEST_H 11*71db0c75SAndroid Build Coastguard Worker 12*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FEnvSafeTest.h" 13*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FPMatcher.h" 14*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h" 15*71db0c75SAndroid Build Coastguard Worker 16*71db0c75SAndroid Build Coastguard Worker template <typename T> 17*71db0c75SAndroid Build Coastguard Worker class UfromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { 18*71db0c75SAndroid Build Coastguard Worker 19*71db0c75SAndroid Build Coastguard Worker DECLARE_SPECIAL_CONSTANTS(T) 20*71db0c75SAndroid Build Coastguard Worker 21*71db0c75SAndroid Build Coastguard Worker public: 22*71db0c75SAndroid Build Coastguard Worker typedef T (*UfromfpFunc)(T, int, unsigned int); 23*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersNonzeroWidth(UfromfpFunc func)24*71db0c75SAndroid Build Coastguard Worker void testSpecialNumbersNonzeroWidth(UfromfpFunc func) { 25*71db0c75SAndroid Build Coastguard Worker for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 26*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(zero, func(zero, rnd, 32U)); 27*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(neg_zero, func(neg_zero, rnd, 32U)); 28*71db0c75SAndroid Build Coastguard Worker 29*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 32U), FE_INVALID); 30*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 32U), FE_INVALID); 31*71db0c75SAndroid Build Coastguard Worker 32*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 32U), FE_INVALID); 33*71db0c75SAndroid Build Coastguard Worker } 34*71db0c75SAndroid Build Coastguard Worker } 35*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersZeroWidth(UfromfpFunc func)36*71db0c75SAndroid Build Coastguard Worker void testSpecialNumbersZeroWidth(UfromfpFunc func) { 37*71db0c75SAndroid Build Coastguard Worker for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 38*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(zero, rnd, 0U), FE_INVALID); 39*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_zero, rnd, 0U), FE_INVALID); 40*71db0c75SAndroid Build Coastguard Worker 41*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 0U), FE_INVALID); 42*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 0U), FE_INVALID); 43*71db0c75SAndroid Build Coastguard Worker 44*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 0U), FE_INVALID); 45*71db0c75SAndroid Build Coastguard Worker } 46*71db0c75SAndroid Build Coastguard Worker } 47*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersWithinRange(UfromfpFunc func)48*71db0c75SAndroid Build Coastguard Worker void testRoundedNumbersWithinRange(UfromfpFunc func) { 49*71db0c75SAndroid Build Coastguard Worker for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 50*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.0), rnd, 1U)); 51*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.0), rnd, 4U)); 52*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 11U)); 53*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 64U)); 54*71db0c75SAndroid Build Coastguard Worker } 55*71db0c75SAndroid Build Coastguard Worker } 56*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersOutsideRange(UfromfpFunc func)57*71db0c75SAndroid Build Coastguard Worker void testRoundedNumbersOutsideRange(UfromfpFunc func) { 58*71db0c75SAndroid Build Coastguard Worker for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 59*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.0), rnd, 32U), FE_INVALID); 60*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.0), rnd, 3U), FE_INVALID); 61*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.0), rnd, 32U), FE_INVALID); 62*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.0), rnd, 10U), FE_INVALID); 63*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.0), rnd, 32U), FE_INVALID); 64*71db0c75SAndroid Build Coastguard Worker } 65*71db0c75SAndroid Build Coastguard Worker } 66*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardWithinRange(UfromfpFunc func)67*71db0c75SAndroid Build Coastguard Worker void testFractionsUpwardWithinRange(UfromfpFunc func) { 68*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.5), FP_INT_UPWARD, 1U)); 69*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U)); 70*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.115), FP_INT_UPWARD, 1U)); 71*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U)); 72*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.715), FP_INT_UPWARD, 1U)); 73*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U)); 74*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.3), FP_INT_UPWARD, 2U)); 75*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.5), FP_INT_UPWARD, 2U)); 76*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_UPWARD, 2U)); 77*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(11.0), func(T(10.32), FP_INT_UPWARD, 4U)); 78*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U)); 79*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U)); 80*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U)); 81*71db0c75SAndroid Build Coastguard Worker } 82*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardOutsideRange(UfromfpFunc func)83*71db0c75SAndroid Build Coastguard Worker void testFractionsUpwardOutsideRange(UfromfpFunc func) { 84*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 1U), 85*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 86*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_UPWARD, 32U), 87*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 88*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 1U), 89*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 90*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_UPWARD, 32U), 91*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 92*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 1U), 93*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 94*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_UPWARD, 32U), 95*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 96*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 3U), 97*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 98*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 32U), 99*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 100*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 3U), 101*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 102*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 3U), 103*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 104*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 6U), 105*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 106*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 32U), 107*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 108*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 6U), 109*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 110*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 32U), 111*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 112*71db0c75SAndroid Build Coastguard Worker } 113*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardWithinRange(UfromfpFunc func)114*71db0c75SAndroid Build Coastguard Worker void testFractionsDownwardWithinRange(UfromfpFunc func) { 115*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U)); 116*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U)); 117*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U)); 118*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 1U)); 119*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 1U)); 120*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 1U)); 121*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 4U)); 122*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U)); 123*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U)); 124*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U)); 125*71db0c75SAndroid Build Coastguard Worker } 126*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardOutsideRange(UfromfpFunc func)127*71db0c75SAndroid Build Coastguard Worker void testFractionsDownwardOutsideRange(UfromfpFunc func) { 128*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.5), FP_INT_DOWNWARD, 32U), 129*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 130*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.115), FP_INT_DOWNWARD, 32U), 131*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 132*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.715), FP_INT_DOWNWARD, 32U), 133*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 134*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 32U), 135*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 136*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 32U), 137*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 138*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 32U), 139*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 140*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 3U), 141*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 142*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 32U), 143*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 144*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 3U), 145*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 146*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 32U), 147*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 148*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 6U), 149*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 150*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 32U), 151*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 152*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 6U), 153*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 154*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 32U), 155*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 156*71db0c75SAndroid Build Coastguard Worker } 157*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroWithinRange(UfromfpFunc func)158*71db0c75SAndroid Build Coastguard Worker void testFractionsTowardZeroWithinRange(UfromfpFunc func) { 159*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U)); 160*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U)); 161*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U)); 162*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U)); 163*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U)); 164*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U)); 165*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 1U)); 166*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 1U)); 167*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 1U)); 168*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 4U)); 169*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U)); 170*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U)); 171*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U)); 172*71db0c75SAndroid Build Coastguard Worker } 173*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroOutsideRange(UfromfpFunc func)174*71db0c75SAndroid Build Coastguard Worker void testFractionsTowardZeroOutsideRange(UfromfpFunc func) { 175*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_TOWARDZERO, 32U), 176*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 177*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TOWARDZERO, 32U), 178*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 179*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TOWARDZERO, 32U), 180*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 181*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 3U), 182*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 183*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 32U), 184*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 185*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 3U), 186*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 187*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 32U), 188*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 189*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 6U), 190*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 191*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 32U), 192*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 193*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 6U), 194*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 195*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 32U), 196*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 197*71db0c75SAndroid Build Coastguard Worker } 198*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroWithinRange(UfromfpFunc func)199*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFromZeroWithinRange(UfromfpFunc func) { 200*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U)); 201*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U)); 202*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U)); 203*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U)); 204*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U)); 205*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U)); 206*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U)); 207*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U)); 208*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U)); 209*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U)); 210*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U)); 211*71db0c75SAndroid Build Coastguard Worker } 212*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroOutsideRange(UfromfpFunc func)213*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFromZeroOutsideRange(UfromfpFunc func) { 214*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 215*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-0.5), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 216*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 217*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-0.715), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 218*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 219*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.3), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 220*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 221*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 222*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 223*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 224*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 225*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 226*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 227*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 228*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 229*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 3U), FE_INVALID); 230*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 231*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 232*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 233*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 3U), FE_INVALID); 234*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 235*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 236*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 237*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); 238*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 239*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 240*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 241*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID); 242*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 243*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID); 244*71db0c75SAndroid Build Coastguard Worker } 245*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestWithinRange(UfromfpFunc func)246*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestWithinRange(UfromfpFunc func) { 247*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U)); 248*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U)); 249*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U)); 250*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U)); 251*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.715), FP_INT_TONEAREST, 1U)); 252*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_TONEAREST, 1U)); 253*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.5), FP_INT_TONEAREST, 2U)); 254*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEAREST, 2U)); 255*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEAREST, 4U)); 256*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U)); 257*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U)); 258*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U)); 259*71db0c75SAndroid Build Coastguard Worker 260*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U)); 261*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(2.5), FP_INT_TONEAREST, 2U)); 262*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(3.0), func(T(2.75), FP_INT_TONEAREST, 2U)); 263*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(5.0), func(T(5.3), FP_INT_TONEAREST, 3U)); 264*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(6.0), func(T(5.5), FP_INT_TONEAREST, 3U)); 265*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(6.0), func(T(5.75), FP_INT_TONEAREST, 3U)); 266*71db0c75SAndroid Build Coastguard Worker } 267*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestOutsideRange(UfromfpFunc func)268*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestOutsideRange(UfromfpFunc func) { 269*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.715), FP_INT_TONEAREST, 32U), 270*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 271*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_TONEAREST, 32U), 272*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 273*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 1U), 274*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 275*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 32U), 276*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 277*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 1U), 278*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 279*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 32U), 280*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 281*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 3U), 282*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 283*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 32U), 284*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 285*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 3U), 286*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 287*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 32U), 288*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 289*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 6U), 290*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 291*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 32U), 292*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 293*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 6U), 294*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 295*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 32U), 296*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 297*71db0c75SAndroid Build Coastguard Worker 298*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 1U), 299*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 300*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 32U), 301*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 302*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 1U), 303*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 304*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 32U), 305*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 306*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 1U), 307*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 308*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 32U), 309*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 310*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 2U), 311*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 312*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 32U), 313*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 314*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 2U), 315*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 316*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 32U), 317*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 318*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 2U), 319*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 320*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 32U), 321*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 322*71db0c75SAndroid Build Coastguard Worker } 323*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackWithinRange(UfromfpFunc func)324*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFallbackWithinRange(UfromfpFunc func) { 325*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U)); 326*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U)); 327*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U)); 328*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U)); 329*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U)); 330*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U)); 331*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); 332*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); 333*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U)); 334*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U)); 335*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(123.0), 336*71db0c75SAndroid Build Coastguard Worker func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U)); 337*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(124.0), 338*71db0c75SAndroid Build Coastguard Worker func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U)); 339*71db0c75SAndroid Build Coastguard Worker 340*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); 341*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); 342*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U)); 343*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U)); 344*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U)); 345*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U)); 346*71db0c75SAndroid Build Coastguard Worker } 347*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackOutsideRange(UfromfpFunc func)348*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFallbackOutsideRange(UfromfpFunc func) { 349*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 350*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 351*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 352*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 353*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 354*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 355*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 356*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 357*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 358*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 359*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 360*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 361*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 362*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 363*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 364*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 365*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 366*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 367*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 368*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 369*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 370*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 371*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 372*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 373*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); 374*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 375*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 376*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 377*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 378*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID); 379*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 380*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), 381*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 382*71db0c75SAndroid Build Coastguard Worker 383*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 384*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 385*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 386*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 387*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 388*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 389*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 390*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 391*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 392*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 393*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 394*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 395*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 396*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 397*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 398*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 399*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 400*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 401*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 402*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 403*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 404*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 405*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 406*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID); 407*71db0c75SAndroid Build Coastguard Worker } 408*71db0c75SAndroid Build Coastguard Worker }; 409*71db0c75SAndroid Build Coastguard Worker 410*71db0c75SAndroid Build Coastguard Worker #define LIST_UFROMFP_TESTS(T, func) \ 411*71db0c75SAndroid Build Coastguard Worker using LlvmLibcUfromfpTest = UfromfpTestTemplate<T>; \ 412*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, SpecialNumbersNonzeroWidth) { \ 413*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersNonzeroWidth(&func); \ 414*71db0c75SAndroid Build Coastguard Worker } \ 415*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, SpecialNumbersZeroWidth) { \ 416*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersZeroWidth(&func); \ 417*71db0c75SAndroid Build Coastguard Worker } \ 418*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, RoundedNumbersWithinRange) { \ 419*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersWithinRange(&func); \ 420*71db0c75SAndroid Build Coastguard Worker } \ 421*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, RoundedNumbersOutsideRange) { \ 422*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersOutsideRange(&func); \ 423*71db0c75SAndroid Build Coastguard Worker } \ 424*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsUpwardWithinRange) { \ 425*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardWithinRange(&func); \ 426*71db0c75SAndroid Build Coastguard Worker } \ 427*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsUpwardOutsideRange) { \ 428*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardOutsideRange(&func); \ 429*71db0c75SAndroid Build Coastguard Worker } \ 430*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsDownwardWithinRange) { \ 431*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardWithinRange(&func); \ 432*71db0c75SAndroid Build Coastguard Worker } \ 433*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsDownwardOutsideRange) { \ 434*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardOutsideRange(&func); \ 435*71db0c75SAndroid Build Coastguard Worker } \ 436*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsTowardZeroWithinRange) { \ 437*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroWithinRange(&func); \ 438*71db0c75SAndroid Build Coastguard Worker } \ 439*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsTowardZeroOutsideRange) { \ 440*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroOutsideRange(&func); \ 441*71db0c75SAndroid Build Coastguard Worker } \ 442*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsToNearestFromZeroWithinRange) { \ 443*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroWithinRange(&func); \ 444*71db0c75SAndroid Build Coastguard Worker } \ 445*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsToNearestFromZeroOutsideRange) { \ 446*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroOutsideRange(&func); \ 447*71db0c75SAndroid Build Coastguard Worker } \ 448*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsToNearestWithinRange) { \ 449*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestWithinRange(&func); \ 450*71db0c75SAndroid Build Coastguard Worker } \ 451*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsToNearestOutsideRange) { \ 452*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestOutsideRange(&func); \ 453*71db0c75SAndroid Build Coastguard Worker } \ 454*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsToNearestFallbackWithinRange) { \ 455*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackWithinRange(&func); \ 456*71db0c75SAndroid Build Coastguard Worker } \ 457*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcUfromfpTest, FractionsToNearestFallbackOutsideRange) { \ 458*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackOutsideRange(&func); \ 459*71db0c75SAndroid Build Coastguard Worker } 460*71db0c75SAndroid Build Coastguard Worker 461*71db0c75SAndroid Build Coastguard Worker #endif // LIBC_TEST_SRC_MATH_SMOKE_UFROMFPTEST_H 462