1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test fmod special numbers ------------------------===// 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_FMODTEST_H 10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_TEST_SRC_MATH_FMODTEST_H 11*71db0c75SAndroid Build Coastguard Worker 12*71db0c75SAndroid Build Coastguard Worker #include "src/__support/FPUtil/BasicOperations.h" 13*71db0c75SAndroid Build Coastguard Worker #include "src/__support/FPUtil/NearestIntegerOperations.h" 14*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FEnvSafeTest.h" 15*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FPMatcher.h" 16*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h" 17*71db0c75SAndroid Build Coastguard Worker 18*71db0c75SAndroid Build Coastguard Worker #include "hdr/math_macros.h" 19*71db0c75SAndroid Build Coastguard Worker 20*71db0c75SAndroid Build Coastguard Worker #define TEST_SPECIAL(x, y, expected, dom_err, expected_exception) \ 21*71db0c75SAndroid Build Coastguard Worker LIBC_NAMESPACE::fputil::clear_except(FE_ALL_EXCEPT); \ 22*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EQ(expected, f(x, y)); \ 23*71db0c75SAndroid Build Coastguard Worker EXPECT_MATH_ERRNO((dom_err) ? EDOM : 0); \ 24*71db0c75SAndroid Build Coastguard Worker EXPECT_FP_EXCEPTION(expected_exception) 25*71db0c75SAndroid Build Coastguard Worker 26*71db0c75SAndroid Build Coastguard Worker #define TEST_REGULAR(x, y, expected) TEST_SPECIAL(x, y, expected, false, 0) 27*71db0c75SAndroid Build Coastguard Worker 28*71db0c75SAndroid Build Coastguard Worker template <typename T> 29*71db0c75SAndroid Build Coastguard Worker class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest { 30*71db0c75SAndroid Build Coastguard Worker 31*71db0c75SAndroid Build Coastguard Worker DECLARE_SPECIAL_CONSTANTS(T) 32*71db0c75SAndroid Build Coastguard Worker 33*71db0c75SAndroid Build Coastguard Worker public: 34*71db0c75SAndroid Build Coastguard Worker typedef T (*FModFunc)(T, T); 35*71db0c75SAndroid Build Coastguard Worker testSpecialNumbers(FModFunc f)36*71db0c75SAndroid Build Coastguard Worker void testSpecialNumbers(FModFunc f) { 37*71db0c75SAndroid Build Coastguard Worker // fmod (+0, y) == +0 for y != 0. 38*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, 3.0, 0.0, false, 0); 39*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, min_denormal, 0.0, false, 0); 40*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, -min_denormal, 0.0, false, 0); 41*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, min_normal, 0.0, false, 0); 42*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, -min_normal, 0.0, false, 0); 43*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, max_normal, 0.0, false, 0); 44*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, -max_normal, 0.0, false, 0); 45*71db0c75SAndroid Build Coastguard Worker 46*71db0c75SAndroid Build Coastguard Worker // fmod (-0, y) == -0 for y != 0. 47*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, 3.0, neg_zero, false, 0); 48*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, min_denormal, neg_zero, false, 0); 49*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, -min_denormal, neg_zero, false, 0); 50*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, min_normal, neg_zero, false, 0); 51*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, -min_normal, neg_zero, false, 0); 52*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, max_normal, neg_zero, false, 0); 53*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, -max_normal, neg_zero, false, 0); 54*71db0c75SAndroid Build Coastguard Worker 55*71db0c75SAndroid Build Coastguard Worker // fmod (+inf, y) == aNaN plus invalid exception. 56*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, 3.0, aNaN, true, FE_INVALID); 57*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, -1.1L, aNaN, true, FE_INVALID); 58*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, 0.0, aNaN, true, FE_INVALID); 59*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, neg_zero, aNaN, true, FE_INVALID); 60*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, min_denormal, aNaN, true, FE_INVALID); 61*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, min_normal, aNaN, true, FE_INVALID); 62*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, max_normal, aNaN, true, FE_INVALID); 63*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, inf, aNaN, true, FE_INVALID); 64*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, neg_inf, aNaN, true, FE_INVALID); 65*71db0c75SAndroid Build Coastguard Worker 66*71db0c75SAndroid Build Coastguard Worker // fmod (-inf, y) == aNaN plus invalid exception. 67*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, 3.0, aNaN, true, FE_INVALID); 68*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, -1.1L, aNaN, true, FE_INVALID); 69*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, 0.0, aNaN, true, FE_INVALID); 70*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, neg_zero, aNaN, true, FE_INVALID); 71*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, min_denormal, aNaN, true, FE_INVALID); 72*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, min_normal, aNaN, true, FE_INVALID); 73*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, max_normal, aNaN, true, FE_INVALID); 74*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, inf, aNaN, true, FE_INVALID); 75*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, neg_inf, aNaN, true, FE_INVALID); 76*71db0c75SAndroid Build Coastguard Worker 77*71db0c75SAndroid Build Coastguard Worker // fmod (x, +0) == aNaN plus invalid exception. 78*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(3.0, 0.0, aNaN, true, FE_INVALID); 79*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-1.1L, 0.0, aNaN, true, FE_INVALID); 80*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, 0.0, aNaN, true, FE_INVALID); 81*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, 0.0, aNaN, true, FE_INVALID); 82*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, 0.0, aNaN, true, FE_INVALID); 83*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, 0.0, aNaN, true, FE_INVALID); 84*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, 0.0, aNaN, true, FE_INVALID); 85*71db0c75SAndroid Build Coastguard Worker 86*71db0c75SAndroid Build Coastguard Worker // fmod (x, -0) == aNaN plus invalid exception. 87*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(3.0, neg_zero, aNaN, true, FE_INVALID); 88*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-1.1L, neg_zero, aNaN, true, FE_INVALID); 89*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, neg_zero, aNaN, true, FE_INVALID); 90*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, neg_zero, aNaN, true, FE_INVALID); 91*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, neg_zero, aNaN, true, FE_INVALID); 92*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, neg_zero, aNaN, true, FE_INVALID); 93*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, neg_zero, aNaN, true, FE_INVALID); 94*71db0c75SAndroid Build Coastguard Worker 95*71db0c75SAndroid Build Coastguard Worker // fmod (x, +inf) == x for x not infinite. 96*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, inf, 0.0, false, 0); 97*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, inf, neg_zero, false, 0); 98*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, inf, min_denormal, false, 0); 99*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, inf, min_normal, false, 0); 100*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, inf, max_normal, false, 0); 101*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(3.0, inf, 3.0, false, 0); 102*71db0c75SAndroid Build Coastguard Worker // fmod (x, -inf) == x for x not infinite. 103*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, neg_inf, 0.0, false, 0); 104*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, neg_inf, neg_zero, false, 0); 105*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, neg_inf, min_denormal, false, 0); 106*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, neg_inf, min_normal, false, 0); 107*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, neg_inf, max_normal, false, 0); 108*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(3.0, neg_inf, 3.0, false, 0); 109*71db0c75SAndroid Build Coastguard Worker 110*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, aNaN, aNaN, false, 0); 111*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, -aNaN, aNaN, false, 0); 112*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, aNaN, aNaN, false, 0); 113*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, -aNaN, aNaN, false, 0); 114*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(1.0, aNaN, aNaN, false, 0); 115*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(1.0, -aNaN, aNaN, false, 0); 116*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, aNaN, aNaN, false, 0); 117*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, -aNaN, aNaN, false, 0); 118*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, aNaN, aNaN, false, 0); 119*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, -aNaN, aNaN, false, 0); 120*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, sNaN, aNaN, false, FE_INVALID); 121*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(0.0, -sNaN, aNaN, false, FE_INVALID); 122*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, sNaN, aNaN, false, FE_INVALID); 123*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_zero, -sNaN, aNaN, false, FE_INVALID); 124*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(1.0, sNaN, aNaN, false, FE_INVALID); 125*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(1.0, -sNaN, aNaN, false, FE_INVALID); 126*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, sNaN, aNaN, false, FE_INVALID); 127*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(inf, -sNaN, aNaN, false, FE_INVALID); 128*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, sNaN, aNaN, false, FE_INVALID); 129*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(neg_inf, -sNaN, aNaN, false, FE_INVALID); 130*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, 0.0, aNaN, false, 0); 131*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, 0.0, aNaN, false, 0); 132*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, neg_zero, aNaN, false, 0); 133*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, neg_zero, aNaN, false, 0); 134*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, 1.0, aNaN, false, 0); 135*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, 1.0, aNaN, false, 0); 136*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, inf, aNaN, false, 0); 137*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, inf, aNaN, false, 0); 138*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, neg_inf, aNaN, false, 0); 139*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, neg_inf, aNaN, false, 0); 140*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, 0.0, aNaN, false, FE_INVALID); 141*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, 0.0, aNaN, false, FE_INVALID); 142*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, neg_zero, aNaN, false, FE_INVALID); 143*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, neg_zero, aNaN, false, FE_INVALID); 144*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, 1.0, aNaN, false, FE_INVALID); 145*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, 1.0, aNaN, false, FE_INVALID); 146*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, inf, aNaN, false, FE_INVALID); 147*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, inf, aNaN, false, FE_INVALID); 148*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, neg_inf, aNaN, false, FE_INVALID); 149*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, neg_inf, aNaN, false, FE_INVALID); 150*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, aNaN, aNaN, false, 0); 151*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, -aNaN, aNaN, false, 0); 152*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, aNaN, aNaN, false, 0); 153*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, -aNaN, aNaN, false, 0); 154*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, sNaN, aNaN, false, FE_INVALID); 155*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(aNaN, -sNaN, aNaN, false, FE_INVALID); 156*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, sNaN, aNaN, false, FE_INVALID); 157*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-aNaN, -sNaN, aNaN, false, FE_INVALID); 158*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, aNaN, aNaN, false, FE_INVALID); 159*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, -aNaN, aNaN, false, FE_INVALID); 160*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, aNaN, aNaN, false, FE_INVALID); 161*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, -aNaN, aNaN, false, FE_INVALID); 162*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, sNaN, aNaN, false, FE_INVALID); 163*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(sNaN, -sNaN, aNaN, false, FE_INVALID); 164*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, sNaN, aNaN, false, FE_INVALID); 165*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-sNaN, -sNaN, aNaN, false, FE_INVALID); 166*71db0c75SAndroid Build Coastguard Worker 167*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(6.5, 2.25L, 2.0L, false, 0); 168*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-6.5, 2.25L, -2.0L, false, 0); 169*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(6.5, -2.25L, 2.0L, false, 0); 170*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-6.5, -2.25L, -2.0L, false, 0); 171*71db0c75SAndroid Build Coastguard Worker 172*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, max_normal, 0.0, false, 0); 173*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, -max_normal, 0.0, false, 0); 174*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, min_normal, 0.0, false, 0); 175*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, -min_normal, 0.0, false, 0); 176*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, min_denormal, 0.0, false, 0); 177*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(max_normal, -min_denormal, 0.0, false, 0); 178*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-max_normal, max_normal, neg_zero, false, 0); 179*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-max_normal, -max_normal, neg_zero, false, 0); 180*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-max_normal, min_normal, neg_zero, false, 0); 181*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-max_normal, -min_normal, neg_zero, false, 0); 182*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-max_normal, min_denormal, neg_zero, false, 0); 183*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-max_normal, -min_denormal, neg_zero, false, 0); 184*71db0c75SAndroid Build Coastguard Worker 185*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, max_normal, min_normal, false, 0); 186*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, -max_normal, min_normal, false, 0); 187*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, min_normal, 0.0, false, 0); 188*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, -min_normal, 0.0, false, 0); 189*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, min_denormal, 0.0, false, 0); 190*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_normal, -min_denormal, 0.0, false, 0); 191*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_normal, max_normal, -min_normal, false, 0); 192*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_normal, -max_normal, -min_normal, false, 0); 193*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_normal, min_normal, neg_zero, false, 0); 194*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_normal, -min_normal, neg_zero, false, 0); 195*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_normal, min_denormal, neg_zero, false, 0); 196*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_normal, -min_denormal, neg_zero, false, 0); 197*71db0c75SAndroid Build Coastguard Worker 198*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, max_normal, min_denormal, false, 0); 199*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, -max_normal, min_denormal, false, 0); 200*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, min_normal, min_denormal, false, 0); 201*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, -min_normal, min_denormal, false, 0); 202*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, min_denormal, 0.0, false, 0); 203*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(min_denormal, -min_denormal, 0.0, false, 0); 204*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_denormal, max_normal, -min_denormal, false, 0); 205*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_denormal, -max_normal, -min_denormal, false, 0); 206*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_denormal, min_normal, -min_denormal, false, 0); 207*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_denormal, -min_normal, -min_denormal, false, 0); 208*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_denormal, min_denormal, neg_zero, false, 0); 209*71db0c75SAndroid Build Coastguard Worker TEST_SPECIAL(-min_denormal, -min_denormal, neg_zero, false, 0); 210*71db0c75SAndroid Build Coastguard Worker } 211*71db0c75SAndroid Build Coastguard Worker testRegularExtreme(FModFunc f)212*71db0c75SAndroid Build Coastguard Worker void testRegularExtreme(FModFunc f) { 213*71db0c75SAndroid Build Coastguard Worker 214*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p127L, 0x3p-149L, 0x1p-149L); 215*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p127L, -0x3p-149L, 0x1p-149L); 216*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p127L, 0x3p-148L, 0x1p-147L); 217*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p127L, -0x3p-148L, 0x1p-147L); 218*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p127L, 0x3p-126L, 0x1p-125L); 219*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p127L, -0x3p-126L, 0x1p-125L); 220*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p127L, 0x3p-149L, -0x1p-149L); 221*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p127L, -0x3p-149L, -0x1p-149L); 222*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p127L, 0x3p-148L, -0x1p-147L); 223*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p127L, -0x3p-148L, -0x1p-147L); 224*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p127L, 0x3p-126L, -0x1p-125L); 225*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p127L, -0x3p-126L, -0x1p-125L); 226*71db0c75SAndroid Build Coastguard Worker 227*71db0c75SAndroid Build Coastguard Worker if constexpr (sizeof(T) >= sizeof(double)) { 228*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p1023L, 0x3p-1074L, 0x1p-1073L); 229*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p1023L, -0x3p-1074L, 0x1p-1073L); 230*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p1023L, 0x3p-1073L, 0x1p-1073L); 231*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p1023L, -0x3p-1073L, 0x1p-1073L); 232*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p1023L, 0x3p-1022L, 0x1p-1021L); 233*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(0x1p1023L, -0x3p-1022L, 0x1p-1021L); 234*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p1023L, 0x3p-1074L, -0x1p-1073L); 235*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p1023L, -0x3p-1074L, -0x1p-1073L); 236*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p1023L, 0x3p-1073L, -0x1p-1073L); 237*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p1023L, -0x3p-1073L, -0x1p-1073L); 238*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p1023L, 0x3p-1022L, -0x1p-1021L); 239*71db0c75SAndroid Build Coastguard Worker TEST_REGULAR(-0x1p1023L, -0x3p-1022L, -0x1p-1021L); 240*71db0c75SAndroid Build Coastguard Worker } 241*71db0c75SAndroid Build Coastguard Worker } 242*71db0c75SAndroid Build Coastguard Worker }; 243*71db0c75SAndroid Build Coastguard Worker 244*71db0c75SAndroid Build Coastguard Worker #define LIST_FMOD_TESTS(T, func) \ 245*71db0c75SAndroid Build Coastguard Worker using LlvmLibcFmodTest = FmodTest<T>; \ 246*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFmodTest, SpecialNumbers) { testSpecialNumbers(&func); } \ 247*71db0c75SAndroid Build Coastguard Worker TEST_F(LlvmLibcFmodTest, RegularExtreme) { testRegularExtreme(&func); } 248*71db0c75SAndroid Build Coastguard Worker 249*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_TEST_SRC_MATH_FMODTEST_H 250