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