1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test different flavors of fromfpx ------*- 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_FROMFPXTEST_H 10*71db0c75SAndroid Build Coastguard Worker #define LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_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 FromfpxTestTemplate : 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 (*FromfpxFunc)(T, int, unsigned int); 23*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersNonzeroWidth(FromfpxFunc func)24*71db0c75SAndroid Build Coastguard Worker void testSpecialNumbersNonzeroWidth(FromfpxFunc 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(FromfpxFunc func)36*71db0c75SAndroid Build Coastguard Worker void testSpecialNumbersZeroWidth(FromfpxFunc 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(FromfpxFunc func)48*71db0c75SAndroid Build Coastguard Worker void testRoundedNumbersWithinRange(FromfpxFunc 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, 2U)); 51*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-1.0), func(T(-1.0), rnd, 1U)); 52*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(10.0), func(T(10.0), rnd, 5U)); 53*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-10.0), func(T(-10.0), rnd, 5U)); 54*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 12U)); 55*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-1234.0), func(T(-1234.0), rnd, 12U)); 56*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 65U)); 57*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(T(-1234.0), func(T(-1234.0), rnd, 65U)); 58*71db0c75SAndroid Build Coastguard Worker } 59*71db0c75SAndroid Build Coastguard Worker } 60*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersOutsideRange(FromfpxFunc func)61*71db0c75SAndroid Build Coastguard Worker void testRoundedNumbersOutsideRange(FromfpxFunc func) { 62*71db0c75SAndroid Build Coastguard Worker for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) { 63*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.0), rnd, 1U), FE_INVALID); 64*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.0), rnd, 4U), FE_INVALID); 65*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.0), rnd, 4U), FE_INVALID); 66*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.0), rnd, 11U), FE_INVALID); 67*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.0), rnd, 11U), FE_INVALID); 68*71db0c75SAndroid Build Coastguard Worker } 69*71db0c75SAndroid Build Coastguard Worker } 70*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardWithinRange(FromfpxFunc func)71*71db0c75SAndroid Build Coastguard Worker void testFractionsUpwardWithinRange(FromfpxFunc func) { 72*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.5), FP_INT_UPWARD, 2U), 73*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 74*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U), 75*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 76*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.115), FP_INT_UPWARD, 2U), 77*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 78*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U), 79*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 80*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_UPWARD, 2U), 81*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 82*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U), 83*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 84*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.3), FP_INT_UPWARD, 3U), 85*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 86*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_UPWARD, 1U), 87*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 88*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_UPWARD, 3U), 89*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 90*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.5), FP_INT_UPWARD, 1U), 91*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 92*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_UPWARD, 3U), 93*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 94*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.75), FP_INT_UPWARD, 1U), 95*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 96*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.32), FP_INT_UPWARD, 5U), 97*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 98*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.32), FP_INT_UPWARD, 5U), 99*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 100*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 5U), 101*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 102*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U), 103*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 104*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U), 105*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 106*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U), 107*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 108*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U), 109*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 110*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U), 111*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 112*71db0c75SAndroid Build Coastguard Worker } 113*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardOutsideRange(FromfpxFunc func)114*71db0c75SAndroid Build Coastguard Worker void testFractionsUpwardOutsideRange(FromfpxFunc func) { 115*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.5), FP_INT_UPWARD, 1U), 116*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 117*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.115), FP_INT_UPWARD, 1U), 118*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 119*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_UPWARD, 1U), 120*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 121*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 2U), 122*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 123*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 2U), 124*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 125*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 2U), 126*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 127*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 4U), 128*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 129*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 4U), 130*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 131*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 4U), 132*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 133*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U), 134*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 135*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U), 136*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 137*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U), 138*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 139*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U), 140*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 141*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U), 142*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 143*71db0c75SAndroid Build Coastguard Worker } 144*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardWithinRange(FromfpxFunc func)145*71db0c75SAndroid Build Coastguard Worker void testFractionsDownwardWithinRange(FromfpxFunc func) { 146*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U), 147*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 148*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.5), FP_INT_DOWNWARD, 1U), 149*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 150*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U), 151*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 152*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.115), FP_INT_DOWNWARD, 1U), 153*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 154*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U), 155*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 156*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.715), FP_INT_DOWNWARD, 1U), 157*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 158*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 2U), 159*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 160*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.3), FP_INT_DOWNWARD, 2U), 161*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 162*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 2U), 163*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 164*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.5), FP_INT_DOWNWARD, 2U), 165*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 166*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 2U), 167*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 168*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.75), FP_INT_DOWNWARD, 2U), 169*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 170*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 5U), 171*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 172*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.32), FP_INT_DOWNWARD, 5U), 173*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 174*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 5U), 175*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 176*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U), 177*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 178*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U), 179*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 180*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 181*71db0c75SAndroid Build Coastguard Worker T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U), FE_INEXACT); 182*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U), 183*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 184*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 185*71db0c75SAndroid Build Coastguard Worker T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U), FE_INEXACT); 186*71db0c75SAndroid Build Coastguard Worker } 187*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardOutsideRange(FromfpxFunc func)188*71db0c75SAndroid Build Coastguard Worker void testFractionsDownwardOutsideRange(FromfpxFunc func) { 189*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_DOWNWARD, 1U), 190*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 191*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 1U), 192*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 193*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_DOWNWARD, 1U), 194*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 195*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 1U), 196*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 197*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_DOWNWARD, 1U), 198*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 199*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 1U), 200*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 201*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 4U), 202*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 203*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 4U), 204*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 205*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 4U), 206*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 207*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U), 208*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 209*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U), 210*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 211*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U), 212*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 213*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U), 214*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 215*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U), 216*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 217*71db0c75SAndroid Build Coastguard Worker } 218*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroWithinRange(FromfpxFunc func)219*71db0c75SAndroid Build Coastguard Worker void testFractionsTowardZeroWithinRange(FromfpxFunc func) { 220*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U), 221*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 222*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U), 223*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 224*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U), 225*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 226*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U), 227*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 228*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U), 229*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 230*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U), 231*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 232*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 2U), 233*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 234*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_TOWARDZERO, 1U), 235*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 236*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 2U), 237*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 238*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.5), FP_INT_TOWARDZERO, 1U), 239*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 240*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 2U), 241*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 242*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.75), FP_INT_TOWARDZERO, 1U), 243*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 244*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 5U), 245*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 246*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 247*71db0c75SAndroid Build Coastguard Worker T(-10.0), func(T(-10.32), FP_INT_TOWARDZERO, 5U), FE_INEXACT); 248*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 5U), 249*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 250*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 251*71db0c75SAndroid Build Coastguard Worker T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U), FE_INEXACT); 252*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 253*71db0c75SAndroid Build Coastguard Worker T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT); 254*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 255*71db0c75SAndroid Build Coastguard Worker T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT); 256*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 257*71db0c75SAndroid Build Coastguard Worker T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT); 258*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 259*71db0c75SAndroid Build Coastguard Worker T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT); 260*71db0c75SAndroid Build Coastguard Worker } 261*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroOutsideRange(FromfpxFunc func)262*71db0c75SAndroid Build Coastguard Worker void testFractionsTowardZeroOutsideRange(FromfpxFunc func) { 263*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TOWARDZERO, 1U), 264*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 265*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TOWARDZERO, 1U), 266*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 267*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TOWARDZERO, 1U), 268*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 269*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 4U), 270*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 271*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 4U), 272*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 273*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 4U), 274*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 275*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U), 276*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 277*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U), 278*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 279*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U), 280*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 281*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U), 282*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 283*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U), 284*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 285*71db0c75SAndroid Build Coastguard Worker } 286*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroWithinRange(FromfpxFunc func)287*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFromZeroWithinRange(FromfpxFunc func) { 288*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 289*71db0c75SAndroid Build Coastguard Worker T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 290*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 291*71db0c75SAndroid Build Coastguard Worker T(-1.0), func(T(-0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 292*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 293*71db0c75SAndroid Build Coastguard Worker T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 294*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 295*71db0c75SAndroid Build Coastguard Worker T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 296*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 297*71db0c75SAndroid Build Coastguard Worker T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 298*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 299*71db0c75SAndroid Build Coastguard Worker T(-1.0), func(T(-0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 300*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 301*71db0c75SAndroid Build Coastguard Worker T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 302*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 303*71db0c75SAndroid Build Coastguard Worker T(-1.0), func(T(-1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT); 304*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 305*71db0c75SAndroid Build Coastguard Worker T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 3U), FE_INEXACT); 306*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 307*71db0c75SAndroid Build Coastguard Worker T(-2.0), func(T(-1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 308*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 309*71db0c75SAndroid Build Coastguard Worker T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 3U), FE_INEXACT); 310*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 311*71db0c75SAndroid Build Coastguard Worker T(-2.0), func(T(-1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT); 312*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 313*71db0c75SAndroid Build Coastguard Worker T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT); 314*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 315*71db0c75SAndroid Build Coastguard Worker T(-10.0), func(T(-10.32), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT); 316*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 317*71db0c75SAndroid Build Coastguard Worker T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT); 318*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 319*71db0c75SAndroid Build Coastguard Worker T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT); 320*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 321*71db0c75SAndroid Build Coastguard Worker T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); 322*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 323*71db0c75SAndroid Build Coastguard Worker T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); 324*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 325*71db0c75SAndroid Build Coastguard Worker T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); 326*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 327*71db0c75SAndroid Build Coastguard Worker T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT); 328*71db0c75SAndroid Build Coastguard Worker } 329*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func)330*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func) { 331*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 332*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 333*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 334*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 335*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 336*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 337*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 338*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID); 339*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 340*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 341*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 342*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID); 343*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 344*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID); 345*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 346*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID); 347*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 348*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID); 349*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 350*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID); 351*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 352*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID); 353*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 354*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); 355*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 356*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); 357*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 358*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); 359*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 360*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID); 361*71db0c75SAndroid Build Coastguard Worker } 362*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestWithinRange(FromfpxFunc func)363*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestWithinRange(FromfpxFunc func) { 364*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U), 365*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 366*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U), 367*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 368*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U), 369*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 370*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U), 371*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 372*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_TONEAREST, 2U), 373*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 374*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.715), FP_INT_TONEAREST, 1U), 375*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 376*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TONEAREST, 2U), 377*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 378*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_TONEAREST, 1U), 379*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 380*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_TONEAREST, 3U), 381*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 382*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.5), FP_INT_TONEAREST, 2U), 383*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 384*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_TONEAREST, 3U), 385*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 386*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.75), FP_INT_TONEAREST, 2U), 387*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 388*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TONEAREST, 5U), 389*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 390*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.32), FP_INT_TONEAREST, 5U), 391*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 392*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 5U), 393*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 394*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U), 395*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 396*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U), 397*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 398*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 399*71db0c75SAndroid Build Coastguard Worker T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U), FE_INEXACT); 400*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U), 401*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 402*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 403*71db0c75SAndroid Build Coastguard Worker T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U), FE_INEXACT); 404*71db0c75SAndroid Build Coastguard Worker 405*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U), 406*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 407*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-2.3), FP_INT_TONEAREST, 2U), 408*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 409*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.5), FP_INT_TONEAREST, 3U), 410*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 411*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-2.5), FP_INT_TONEAREST, 2U), 412*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 413*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(3.0), func(T(2.75), FP_INT_TONEAREST, 3U), 414*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 415*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-3.0), func(T(-2.75), FP_INT_TONEAREST, 3U), 416*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 417*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(5.0), func(T(5.3), FP_INT_TONEAREST, 4U), 418*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 419*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-5.0), func(T(-5.3), FP_INT_TONEAREST, 4U), 420*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 421*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.5), FP_INT_TONEAREST, 4U), 422*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 423*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-6.0), func(T(-5.5), FP_INT_TONEAREST, 4U), 424*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 425*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.75), FP_INT_TONEAREST, 4U), 426*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 427*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(T(-6.0), func(T(-5.75), FP_INT_TONEAREST, 4U), 428*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 429*71db0c75SAndroid Build Coastguard Worker } 430*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestOutsideRange(FromfpxFunc func)431*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestOutsideRange(FromfpxFunc func) { 432*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_TONEAREST, 1U), 433*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 434*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TONEAREST, 1U), 435*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 436*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 2U), 437*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 438*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 1U), 439*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 440*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 2U), 441*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 442*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 1U), 443*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 444*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 4U), 445*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 446*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 4U), 447*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 448*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 4U), 449*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 450*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U), 451*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 452*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U), 453*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 454*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U), 455*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 456*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U), 457*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 458*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U), 459*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 460*71db0c75SAndroid Build Coastguard Worker 461*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U), 462*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 463*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 1U), 464*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 465*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 2U), 466*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 467*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 1U), 468*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 469*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 2U), 470*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 471*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 2U), 472*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 473*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 3U), 474*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 475*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 3U), 476*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 477*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 3U), 478*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 479*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 3U), 480*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 481*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 3U), 482*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 483*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 3U), 484*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 485*71db0c75SAndroid Build Coastguard Worker } 486*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackWithinRange(FromfpxFunc func)487*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFallbackWithinRange(FromfpxFunc func) { 488*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 489*71db0c75SAndroid Build Coastguard Worker T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT); 490*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 491*71db0c75SAndroid Build Coastguard Worker T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 492*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 493*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 494*71db0c75SAndroid Build Coastguard Worker T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 495*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 496*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 497*71db0c75SAndroid Build Coastguard Worker T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 498*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 499*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 500*71db0c75SAndroid Build Coastguard Worker T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), 501*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 502*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 503*71db0c75SAndroid Build Coastguard Worker T(-1.0), func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 504*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 505*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 506*71db0c75SAndroid Build Coastguard Worker T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT); 507*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 508*71db0c75SAndroid Build Coastguard Worker T(-1.0), func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), 509*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 510*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 511*71db0c75SAndroid Build Coastguard Worker T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 512*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 513*71db0c75SAndroid Build Coastguard Worker T(-2.0), func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), 514*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 515*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 516*71db0c75SAndroid Build Coastguard Worker T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 517*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 518*71db0c75SAndroid Build Coastguard Worker T(-2.0), func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), 519*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 520*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 521*71db0c75SAndroid Build Coastguard Worker T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U), 522*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 523*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 524*71db0c75SAndroid Build Coastguard Worker T(-10.0), func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U), 525*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 526*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 527*71db0c75SAndroid Build Coastguard Worker T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U), 528*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 529*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 530*71db0c75SAndroid Build Coastguard Worker T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U), 531*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 532*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 533*71db0c75SAndroid Build Coastguard Worker T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), 534*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 535*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 536*71db0c75SAndroid Build Coastguard Worker T(-123.0), func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), 537*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 538*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 539*71db0c75SAndroid Build Coastguard Worker T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), 540*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 541*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 542*71db0c75SAndroid Build Coastguard Worker T(-124.0), func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U), 543*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 544*71db0c75SAndroid Build Coastguard Worker 545*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 546*71db0c75SAndroid Build Coastguard Worker T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 547*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 548*71db0c75SAndroid Build Coastguard Worker T(-2.0), func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), 549*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 550*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 551*71db0c75SAndroid Build Coastguard Worker T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 552*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 553*71db0c75SAndroid Build Coastguard Worker T(-2.0), func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), 554*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 555*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 556*71db0c75SAndroid Build Coastguard Worker T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT); 557*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 558*71db0c75SAndroid Build Coastguard Worker T(-3.0), func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), 559*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 560*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 561*71db0c75SAndroid Build Coastguard Worker T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT); 562*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 563*71db0c75SAndroid Build Coastguard Worker T(-5.0), func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), 564*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 565*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 566*71db0c75SAndroid Build Coastguard Worker T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT); 567*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 568*71db0c75SAndroid Build Coastguard Worker T(-6.0), func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), 569*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 570*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 571*71db0c75SAndroid Build Coastguard Worker T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT); 572*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 573*71db0c75SAndroid Build Coastguard Worker T(-6.0), func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), 574*71db0c75SAndroid Build Coastguard Worker FE_INEXACT); 575*71db0c75SAndroid Build Coastguard Worker } 576*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackOutsideRange(FromfpxFunc func)577*71db0c75SAndroid Build Coastguard Worker void testFractionsToNearestFallbackOutsideRange(FromfpxFunc func) { 578*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 579*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 580*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 581*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 582*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 583*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 584*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 585*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 586*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 587*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 588*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 589*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 590*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 591*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID); 592*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 593*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID); 594*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 595*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID); 596*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 597*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID); 598*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 599*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); 600*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 601*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), 602*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 603*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 604*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID); 605*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 606*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), 607*71db0c75SAndroid Build Coastguard Worker FE_INVALID); 608*71db0c75SAndroid Build Coastguard Worker 609*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 610*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 611*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 612*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 613*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 614*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 615*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 616*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID); 617*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 618*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 619*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 620*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID); 621*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 622*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 623*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 624*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 625*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 626*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 627*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 628*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 629*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 630*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 631*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ_WITH_EXCEPTION( 632*71db0c75SAndroid Build Coastguard Worker aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID); 633*71db0c75SAndroid Build Coastguard Worker } 634*71db0c75SAndroid Build Coastguard Worker }; 635*71db0c75SAndroid Build Coastguard Worker 636*71db0c75SAndroid Build Coastguard Worker #define LIST_FROMFPX_TESTS(T, func) \ 637*71db0c75SAndroid Build Coastguard Worker using LlvmLibcFromfpxTest = FromfpxTestTemplate<T>; \ 638*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, SpecialNumbersNonzeroWidth) { \ 639*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersNonzeroWidth(&func); \ 640*71db0c75SAndroid Build Coastguard Worker } \ 641*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, SpecialNumbersZeroWidth) { \ 642*71db0c75SAndroid Build Coastguard Worker testSpecialNumbersZeroWidth(&func); \ 643*71db0c75SAndroid Build Coastguard Worker } \ 644*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, RoundedNumbersWithinRange) { \ 645*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersWithinRange(&func); \ 646*71db0c75SAndroid Build Coastguard Worker } \ 647*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, RoundedNumbersOutsideRange) { \ 648*71db0c75SAndroid Build Coastguard Worker testRoundedNumbersOutsideRange(&func); \ 649*71db0c75SAndroid Build Coastguard Worker } \ 650*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsUpwardWithinRange) { \ 651*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardWithinRange(&func); \ 652*71db0c75SAndroid Build Coastguard Worker } \ 653*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsUpwardOutsideRange) { \ 654*71db0c75SAndroid Build Coastguard Worker testFractionsUpwardOutsideRange(&func); \ 655*71db0c75SAndroid Build Coastguard Worker } \ 656*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsDownwardWithinRange) { \ 657*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardWithinRange(&func); \ 658*71db0c75SAndroid Build Coastguard Worker } \ 659*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsDownwardOutsideRange) { \ 660*71db0c75SAndroid Build Coastguard Worker testFractionsDownwardOutsideRange(&func); \ 661*71db0c75SAndroid Build Coastguard Worker } \ 662*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsTowardZeroWithinRange) { \ 663*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroWithinRange(&func); \ 664*71db0c75SAndroid Build Coastguard Worker } \ 665*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsTowardZeroOutsideRange) { \ 666*71db0c75SAndroid Build Coastguard Worker testFractionsTowardZeroOutsideRange(&func); \ 667*71db0c75SAndroid Build Coastguard Worker } \ 668*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFromZeroWithinRange) { \ 669*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroWithinRange(&func); \ 670*71db0c75SAndroid Build Coastguard Worker } \ 671*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFromZeroOutsideRange) { \ 672*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFromZeroOutsideRange(&func); \ 673*71db0c75SAndroid Build Coastguard Worker } \ 674*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsToNearestWithinRange) { \ 675*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestWithinRange(&func); \ 676*71db0c75SAndroid Build Coastguard Worker } \ 677*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsToNearestOutsideRange) { \ 678*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestOutsideRange(&func); \ 679*71db0c75SAndroid Build Coastguard Worker } \ 680*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFallbackWithinRange) { \ 681*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackWithinRange(&func); \ 682*71db0c75SAndroid Build Coastguard Worker } \ 683*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFallbackOutsideRange) { \ 684*71db0c75SAndroid Build Coastguard Worker testFractionsToNearestFallbackOutsideRange(&func); \ 685*71db0c75SAndroid Build Coastguard Worker } 686*71db0c75SAndroid Build Coastguard Worker 687*71db0c75SAndroid Build Coastguard Worker #endif // LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_H 688