1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test canonicalize[f|l] -----------------*- 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 LLVM_LIBC_TEST_SRC_MATH_SMOKE_CANONICALIZETEST_H 10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_TEST_SRC_MATH_SMOKE_CANONICALIZETEST_H 11*71db0c75SAndroid Build Coastguard Worker 12*71db0c75SAndroid Build Coastguard Worker #include "src/__support/FPUtil/FEnvImpl.h" 13*71db0c75SAndroid Build Coastguard Worker #include "src/__support/FPUtil/FPBits.h" 14*71db0c75SAndroid Build Coastguard Worker #include "src/__support/integer_literals.h" 15*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FEnvSafeTest.h" 16*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FPMatcher.h" 17*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h" 18*71db0c75SAndroid Build Coastguard Worker 19*71db0c75SAndroid Build Coastguard Worker #include "hdr/math_macros.h" 20*71db0c75SAndroid Build Coastguard Worker 21*71db0c75SAndroid Build Coastguard Worker #define TEST_SPECIAL(x, y, expected, expected_exception) \ 22*71db0c75SAndroid Build Coastguard Worker EXPECT_EQ(expected, f(&x, &y)); \ 23*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EXCEPTION(expected_exception); \ 24*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::fputil::clear_except(FE_ALL_EXCEPT) 25*71db0c75SAndroid Build Coastguard Worker 26*71db0c75SAndroid Build Coastguard Worker #define TEST_REGULAR(x, y, expected) TEST_SPECIAL(x, y, expected, 0) 27*71db0c75SAndroid Build Coastguard Worker 28*71db0c75SAndroid Build Coastguard Worker using LIBC_NAMESPACE::operator""_u96; 29*71db0c75SAndroid Build Coastguard Worker using LIBC_NAMESPACE::operator""_u128; 30*71db0c75SAndroid Build Coastguard Worker 31*71db0c75SAndroid Build Coastguard Worker template <typename T> 32*71db0c75SAndroid Build Coastguard Worker class CanonicalizeTest : public LIBC_NAMESPACE::testing::FEnvSafeTest { 33*71db0c75SAndroid Build Coastguard Worker 34*71db0c75SAndroid Build Coastguard Worker DECLARE_SPECIAL_CONSTANTS(T) 35*71db0c75SAndroid Build Coastguard Worker 36*71db0c75SAndroid Build Coastguard Worker public: 37*71db0c75SAndroid Build Coastguard Worker typedef int (*CanonicalizeFunc)(T *, const T *); 38*71db0c75SAndroid Build Coastguard Worker testSpecialNumbers(CanonicalizeFunc f)39*71db0c75SAndroid Build Coastguard Worker void testSpecialNumbers(CanonicalizeFunc f) { 40*71db0c75SAndroid Build Coastguard Worker T cx; 41*71db0c75SAndroid Build Coastguard Worker 42*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, zero, 0, 0); 43*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, zero); 44*71db0c75SAndroid Build Coastguard Worker 45*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, neg_zero, 0, 0); 46*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, neg_zero); 47*71db0c75SAndroid Build Coastguard Worker 48*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, inf, 0, 0); 49*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, inf); 50*71db0c75SAndroid Build Coastguard Worker 51*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, neg_inf, 0, 0); 52*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, neg_inf); 53*71db0c75SAndroid Build Coastguard Worker 54*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, sNaN, 1, FE_INVALID); 55*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 56*71db0c75SAndroid Build Coastguard Worker } 57*71db0c75SAndroid Build Coastguard Worker testX64_80SpecialNumbers(CanonicalizeFunc f)58*71db0c75SAndroid Build Coastguard Worker void testX64_80SpecialNumbers(CanonicalizeFunc f) { 59*71db0c75SAndroid Build Coastguard Worker if constexpr (LIBC_NAMESPACE::fputil::get_fp_type<T>() == 60*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::fputil::FPType::X86_Binary80) { 61*71db0c75SAndroid Build Coastguard Worker T cx; 62*71db0c75SAndroid Build Coastguard Worker // Exponent | Significand | Meaning 63*71db0c75SAndroid Build Coastguard Worker // | Bits 63-62 | Bits 61-0 | 64*71db0c75SAndroid Build Coastguard Worker // All Ones | 00 | Zero | Pseudo Infinity, Value = SNaN 65*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 66*71db0c75SAndroid Build Coastguard Worker FPBits test1(0x00007FFF'00000000'00000000_u96); 67*71db0c75SAndroid Build Coastguard Worker #else 68*71db0c75SAndroid Build Coastguard Worker FPBits test1(0x00000000'00007FFF'00000000'00000000_u128); 69*71db0c75SAndroid Build Coastguard Worker #endif 70*71db0c75SAndroid Build Coastguard Worker const T test1_val = test1.get_val(); 71*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test1_val, 1, FE_INVALID); 72*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 73*71db0c75SAndroid Build Coastguard Worker 74*71db0c75SAndroid Build Coastguard Worker // Exponent | Significand | Meaning 75*71db0c75SAndroid Build Coastguard Worker // | Bits 63-62 | Bits 61-0 | 76*71db0c75SAndroid Build Coastguard Worker // All Ones | 00 | Non-Zero | Pseudo NaN, Value = SNaN 77*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 78*71db0c75SAndroid Build Coastguard Worker FPBits test2_1(0x00007FFF'00000000'00000001_u96); 79*71db0c75SAndroid Build Coastguard Worker #else 80*71db0c75SAndroid Build Coastguard Worker FPBits test2_1(0x00000000'00007FFF'00000000'00000001_u128); 81*71db0c75SAndroid Build Coastguard Worker #endif 82*71db0c75SAndroid Build Coastguard Worker const T test2_1_val = test2_1.get_val(); 83*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test2_1_val, 1, FE_INVALID); 84*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 85*71db0c75SAndroid Build Coastguard Worker 86*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 87*71db0c75SAndroid Build Coastguard Worker FPBits test2_2(0x00007FFF'00000042'70000001_u96); 88*71db0c75SAndroid Build Coastguard Worker #else 89*71db0c75SAndroid Build Coastguard Worker FPBits test2_2(0x00000000'00007FFF'00000042'70000001_u128); 90*71db0c75SAndroid Build Coastguard Worker #endif 91*71db0c75SAndroid Build Coastguard Worker const T test2_2_val = test2_2.get_val(); 92*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test2_2_val, 1, FE_INVALID); 93*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 94*71db0c75SAndroid Build Coastguard Worker 95*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 96*71db0c75SAndroid Build Coastguard Worker FPBits test2_3(0x00007FFF'00000000'08261001_u96); 97*71db0c75SAndroid Build Coastguard Worker #else 98*71db0c75SAndroid Build Coastguard Worker FPBits test2_3(0x00000000'00007FFF'00000000'08261001_u128); 99*71db0c75SAndroid Build Coastguard Worker #endif 100*71db0c75SAndroid Build Coastguard Worker const T test2_3_val = test2_3.get_val(); 101*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test2_3_val, 1, FE_INVALID); 102*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 103*71db0c75SAndroid Build Coastguard Worker 104*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 105*71db0c75SAndroid Build Coastguard Worker FPBits test2_4(0x00007FFF'00007800'08261001_u96); 106*71db0c75SAndroid Build Coastguard Worker #else 107*71db0c75SAndroid Build Coastguard Worker FPBits test2_4(0x00000000'00007FFF'00007800'08261001_u128); 108*71db0c75SAndroid Build Coastguard Worker #endif 109*71db0c75SAndroid Build Coastguard Worker const T test2_4_val = test2_4.get_val(); 110*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test2_4_val, 1, FE_INVALID); 111*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 112*71db0c75SAndroid Build Coastguard Worker 113*71db0c75SAndroid Build Coastguard Worker // Exponent | Significand | Meaning 114*71db0c75SAndroid Build Coastguard Worker // | Bits 63-62 | Bits 61-0 | 115*71db0c75SAndroid Build Coastguard Worker // All Ones | 01 | Anything | Pseudo NaN, Value = SNaN 116*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 117*71db0c75SAndroid Build Coastguard Worker FPBits test3_1(0x00007FFF'40000000'00000000_u96); 118*71db0c75SAndroid Build Coastguard Worker #else 119*71db0c75SAndroid Build Coastguard Worker FPBits test3_1(0x00000000'00007FFF'40000000'00000000_u128); 120*71db0c75SAndroid Build Coastguard Worker #endif 121*71db0c75SAndroid Build Coastguard Worker const T test3_1_val = test3_1.get_val(); 122*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test3_1_val, 1, FE_INVALID); 123*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 124*71db0c75SAndroid Build Coastguard Worker 125*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 126*71db0c75SAndroid Build Coastguard Worker FPBits test3_2(0x00007FFF'40000042'70000001_u96); 127*71db0c75SAndroid Build Coastguard Worker #else 128*71db0c75SAndroid Build Coastguard Worker FPBits test3_2(0x00000000'00007FFF'40000042'70000001_u128); 129*71db0c75SAndroid Build Coastguard Worker #endif 130*71db0c75SAndroid Build Coastguard Worker const T test3_2_val = test3_2.get_val(); 131*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test3_2_val, 1, FE_INVALID); 132*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 133*71db0c75SAndroid Build Coastguard Worker 134*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 135*71db0c75SAndroid Build Coastguard Worker FPBits test3_3(0x00007FFF'40000000'08261001_u96); 136*71db0c75SAndroid Build Coastguard Worker #else 137*71db0c75SAndroid Build Coastguard Worker FPBits test3_3(0x00000000'00007FFF'40000000'08261001_u128); 138*71db0c75SAndroid Build Coastguard Worker #endif 139*71db0c75SAndroid Build Coastguard Worker const T test3_3_val = test3_3.get_val(); 140*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test3_3_val, 1, FE_INVALID); 141*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 142*71db0c75SAndroid Build Coastguard Worker 143*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 144*71db0c75SAndroid Build Coastguard Worker FPBits test3_4(0x00007FFF'40007800'08261001_u96); 145*71db0c75SAndroid Build Coastguard Worker #else 146*71db0c75SAndroid Build Coastguard Worker FPBits test3_4(0x00000000'00007FFF'40007800'08261001_u128); 147*71db0c75SAndroid Build Coastguard Worker #endif 148*71db0c75SAndroid Build Coastguard Worker const T test3_4_val = test3_4.get_val(); 149*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test3_4_val, 1, FE_INVALID); 150*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 151*71db0c75SAndroid Build Coastguard Worker 152*71db0c75SAndroid Build Coastguard Worker // Exponent | Significand | Meaning 153*71db0c75SAndroid Build Coastguard Worker // | Bit 63 | Bits 62-0 | 154*71db0c75SAndroid Build Coastguard Worker // All zeroes | One | Anything | Pseudo Denormal, Value = 155*71db0c75SAndroid Build Coastguard Worker // | | | (−1)**s × m × 2**−16382 156*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 157*71db0c75SAndroid Build Coastguard Worker FPBits test4_1(0x00000000'80000000'00000000_u96); 158*71db0c75SAndroid Build Coastguard Worker #else 159*71db0c75SAndroid Build Coastguard Worker FPBits test4_1(0x00000000'00000000'80000000'00000000_u128); 160*71db0c75SAndroid Build Coastguard Worker #endif 161*71db0c75SAndroid Build Coastguard Worker const T test4_1_val = test4_1.get_val(); 162*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test4_1_val, 0, 0); 163*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ( 164*71db0c75SAndroid Build Coastguard Worker cx, FPBits::make_value(test4_1.get_explicit_mantissa(), 0).get_val()); 165*71db0c75SAndroid Build Coastguard Worker 166*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 167*71db0c75SAndroid Build Coastguard Worker FPBits test4_2(0x00000000'80000042'70000001_u96); 168*71db0c75SAndroid Build Coastguard Worker #else 169*71db0c75SAndroid Build Coastguard Worker FPBits test4_2(0x00000000'00000000'80000042'70000001_u128); 170*71db0c75SAndroid Build Coastguard Worker #endif 171*71db0c75SAndroid Build Coastguard Worker const T test4_2_val = test4_2.get_val(); 172*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test4_2_val, 0, 0); 173*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ( 174*71db0c75SAndroid Build Coastguard Worker cx, FPBits::make_value(test4_2.get_explicit_mantissa(), 0).get_val()); 175*71db0c75SAndroid Build Coastguard Worker 176*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 177*71db0c75SAndroid Build Coastguard Worker FPBits test4_3(0x00000000'80000000'08261001_u96); 178*71db0c75SAndroid Build Coastguard Worker #else 179*71db0c75SAndroid Build Coastguard Worker FPBits test4_3(0x00000000'00000000'80000000'08261001_u128); 180*71db0c75SAndroid Build Coastguard Worker #endif 181*71db0c75SAndroid Build Coastguard Worker const T test4_3_val = test4_3.get_val(); 182*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test4_3_val, 0, 0); 183*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ( 184*71db0c75SAndroid Build Coastguard Worker cx, FPBits::make_value(test4_3.get_explicit_mantissa(), 0).get_val()); 185*71db0c75SAndroid Build Coastguard Worker 186*71db0c75SAndroid Build Coastguard Worker // Exponent | Significand | Meaning 187*71db0c75SAndroid Build Coastguard Worker // | Bit 63 | Bits 62-0 | 188*71db0c75SAndroid Build Coastguard Worker // All Other | Zero | Anything | Unnormal, Value = SNaN 189*71db0c75SAndroid Build Coastguard Worker // Values | | | 190*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 191*71db0c75SAndroid Build Coastguard Worker FPBits test5_1(0x00000040'00000000'00000001_u96); 192*71db0c75SAndroid Build Coastguard Worker #else 193*71db0c75SAndroid Build Coastguard Worker FPBits test5_1(0x00000000'00000040'00000000'00000001_u128); 194*71db0c75SAndroid Build Coastguard Worker #endif 195*71db0c75SAndroid Build Coastguard Worker const T test5_1_val = test5_1.get_val(); 196*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test5_1_val, 1, FE_INVALID); 197*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 198*71db0c75SAndroid Build Coastguard Worker 199*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 200*71db0c75SAndroid Build Coastguard Worker FPBits test5_2(0x00000230'00000042'70000001_u96); 201*71db0c75SAndroid Build Coastguard Worker #else 202*71db0c75SAndroid Build Coastguard Worker FPBits test5_2(0x00000000'00000230'00000042'70000001_u128); 203*71db0c75SAndroid Build Coastguard Worker #endif 204*71db0c75SAndroid Build Coastguard Worker const T test5_2_val = test5_2.get_val(); 205*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test5_2_val, 1, FE_INVALID); 206*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 207*71db0c75SAndroid Build Coastguard Worker 208*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 209*71db0c75SAndroid Build Coastguard Worker FPBits test5_3(0x00000560'00000000'08261001_u96); 210*71db0c75SAndroid Build Coastguard Worker #else 211*71db0c75SAndroid Build Coastguard Worker FPBits test5_3(0x00000000'00000560'00000000'08261001_u128); 212*71db0c75SAndroid Build Coastguard Worker #endif 213*71db0c75SAndroid Build Coastguard Worker const T test5_3_val = test5_3.get_val(); 214*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test5_3_val, 1, FE_INVALID); 215*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 216*71db0c75SAndroid Build Coastguard Worker 217*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 218*71db0c75SAndroid Build Coastguard Worker FPBits test5_4(0x00000780'00000028'16000000_u96); 219*71db0c75SAndroid Build Coastguard Worker #else 220*71db0c75SAndroid Build Coastguard Worker FPBits test5_4(0x00000000'00000780'00000028'16000000_u128); 221*71db0c75SAndroid Build Coastguard Worker #endif 222*71db0c75SAndroid Build Coastguard Worker const T test5_4_val = test5_4.get_val(); 223*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test5_4_val, 1, FE_INVALID); 224*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 225*71db0c75SAndroid Build Coastguard Worker 226*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 227*71db0c75SAndroid Build Coastguard Worker FPBits test5_5(0x00000900'00000042'70000001_u96); 228*71db0c75SAndroid Build Coastguard Worker #else 229*71db0c75SAndroid Build Coastguard Worker FPBits test5_5(0x00000000'00000900'00000042'70000001_u128); 230*71db0c75SAndroid Build Coastguard Worker #endif 231*71db0c75SAndroid Build Coastguard Worker const T test5_5_val = test5_5.get_val(); 232*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test5_5_val, 1, FE_INVALID); 233*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 234*71db0c75SAndroid Build Coastguard Worker 235*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12 236*71db0c75SAndroid Build Coastguard Worker FPBits test5_6(0x00000AB0'00000000'08261001_u96); 237*71db0c75SAndroid Build Coastguard Worker #else 238*71db0c75SAndroid Build Coastguard Worker FPBits test5_6(0x00000000'00000AB0'00000000'08261001_u128); 239*71db0c75SAndroid Build Coastguard Worker #endif 240*71db0c75SAndroid Build Coastguard Worker const T test5_6_val = test5_6.get_val(); 241*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(cx, test5_6_val, 1, FE_INVALID); 242*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, aNaN); 243*71db0c75SAndroid Build Coastguard Worker } 244*71db0c75SAndroid Build Coastguard Worker } 245*71db0c75SAndroid Build Coastguard Worker testRegularNumbers(CanonicalizeFunc f)246*71db0c75SAndroid Build Coastguard Worker void testRegularNumbers(CanonicalizeFunc f) { 247*71db0c75SAndroid Build Coastguard Worker T cx; 248*71db0c75SAndroid Build Coastguard Worker const T test_var_1 = T(1.0); 249*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(cx, test_var_1, 0); 250*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, test_var_1); 251*71db0c75SAndroid Build Coastguard Worker const T test_var_2 = T(-1.0); 252*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(cx, test_var_2, 0); 253*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, test_var_2); 254*71db0c75SAndroid Build Coastguard Worker const T test_var_3 = T(10.0); 255*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(cx, test_var_3, 0); 256*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, test_var_3); 257*71db0c75SAndroid Build Coastguard Worker const T test_var_4 = T(-10.0); 258*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(cx, test_var_4, 0); 259*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, test_var_4); 260*71db0c75SAndroid Build Coastguard Worker const T test_var_5 = T(1234.0); 261*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(cx, test_var_5, 0); 262*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, test_var_5); 263*71db0c75SAndroid Build Coastguard Worker const T test_var_6 = T(-1234.0); 264*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(cx, test_var_6, 0); 265*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(cx, test_var_6); 266*71db0c75SAndroid Build Coastguard Worker } 267*71db0c75SAndroid Build Coastguard Worker }; 268*71db0c75SAndroid Build Coastguard Worker 269*71db0c75SAndroid Build Coastguard Worker #define LIST_CANONICALIZE_TESTS(T, func) \ 270*71db0c75SAndroid Build Coastguard Worker using LlvmLibcCanonicalizeTest = CanonicalizeTest<T>; \ 271*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcCanonicalizeTest, SpecialNumbers) { \ 272*71db0c75SAndroid Build Coastguard Worker testSpecialNumbers(&func); \ 273*71db0c75SAndroid Build Coastguard Worker } \ 274*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcCanonicalizeTest, RegularNubmers) { \ 275*71db0c75SAndroid Build Coastguard Worker testRegularNumbers(&func); \ 276*71db0c75SAndroid Build Coastguard Worker } 277*71db0c75SAndroid Build Coastguard Worker 278*71db0c75SAndroid Build Coastguard Worker #define X86_80_SPECIAL_CANONICALIZE_TEST(T, func) \ 279*71db0c75SAndroid Build Coastguard Worker using LlvmLibcCanonicalizeTest = CanonicalizeTest<T>; \ 280*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcCanonicalizeTest, X64_80SpecialNumbers) { \ 281*71db0c75SAndroid Build Coastguard Worker testX64_80SpecialNumbers(&func); \ 282*71db0c75SAndroid Build Coastguard Worker } 283*71db0c75SAndroid Build Coastguard Worker 284*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_TEST_SRC_MATH_SMOKE_CANONICALIZETEST_H 285