Expand Up
@@ -35,16 +35,16 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
void testSpecialNumbers (FModFunc f) {
// fmod (+0, y) == +0 for y != 0.
TEST_SPECIAL (0.0 , 3.0 , 0.0 , false , 0 );
TEST_SPECIAL (0.0 , min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (0.0 , -min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (0.0 , min_normal, 0.0 , false , 0 );
TEST_SPECIAL (0.0 , -min_normal, 0.0 , false , 0 );
TEST_SPECIAL (0.0 , max_normal, 0.0 , false , 0 );
TEST_SPECIAL (0.0 , -max_normal, 0.0 , false , 0 );
TEST_SPECIAL (zero, T ( 3.0 ), zero , false , 0 );
TEST_SPECIAL (zero , min_denormal, zero , false , 0 );
TEST_SPECIAL (zero , -min_denormal, zero , false , 0 );
TEST_SPECIAL (zero , min_normal, zero , false , 0 );
TEST_SPECIAL (zero , -min_normal, zero , false , 0 );
TEST_SPECIAL (zero , max_normal, zero , false , 0 );
TEST_SPECIAL (zero , -max_normal, zero , false , 0 );
// fmod (-0, y) == -0 for y != 0.
TEST_SPECIAL (neg_zero, 3.0 , neg_zero, false , 0 );
TEST_SPECIAL (neg_zero, T ( 3.0 ) , neg_zero, false , 0 );
TEST_SPECIAL (neg_zero, min_denormal, neg_zero, false , 0 );
TEST_SPECIAL (neg_zero, -min_denormal, neg_zero, false , 0 );
TEST_SPECIAL (neg_zero, min_normal, neg_zero, false , 0 );
Expand All
@@ -53,9 +53,9 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
TEST_SPECIAL (neg_zero, -max_normal, neg_zero, false , 0 );
// fmod (+inf, y) == aNaN plus invalid exception.
TEST_SPECIAL (inf, 3.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, -1 .1L , aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, T ( 3.0 ) , aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, T ( -1.1 ) , aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, min_denormal, aNaN, true , FE_INVALID);
TEST_SPECIAL (inf, min_normal, aNaN, true , FE_INVALID);
Expand All
@@ -64,9 +64,9 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
TEST_SPECIAL (inf, neg_inf, aNaN, true , FE_INVALID);
// fmod (-inf, y) == aNaN plus invalid exception.
TEST_SPECIAL (neg_inf, 3.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, -1 .1L , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, T ( 3.0 ) , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, T ( -1.1 ) , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, min_denormal, aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_inf, min_normal, aNaN, true , FE_INVALID);
Expand All
@@ -75,74 +75,74 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
TEST_SPECIAL (neg_inf, neg_inf, aNaN, true , FE_INVALID);
// fmod (x, +0) == aNaN plus invalid exception.
TEST_SPECIAL (3.0 , 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (-1 .1L , 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (0.0 , 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_zero, 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (min_denormal, 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (min_normal, 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (max_normal, 0.0 , aNaN, true , FE_INVALID);
TEST_SPECIAL (T ( 3.0 ), zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (T ( -1.1 ), zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (zero, zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_zero, zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (min_denormal, zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (min_normal, zero , aNaN, true , FE_INVALID);
TEST_SPECIAL (max_normal, zero , aNaN, true , FE_INVALID);
// fmod (x, -0) == aNaN plus invalid exception.
TEST_SPECIAL (3.0 , neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (-1 .1L , neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (0.0 , neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (T ( 3.0 ) , neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (T ( -1.1 ) , neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (zero , neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (neg_zero, neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (min_denormal, neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (min_normal, neg_zero, aNaN, true , FE_INVALID);
TEST_SPECIAL (max_normal, neg_zero, aNaN, true , FE_INVALID);
// fmod (x, +inf) == x for x not infinite.
TEST_SPECIAL (0.0 , inf, 0.0 , false , 0 );
TEST_SPECIAL (zero , inf, zero , false , 0 );
TEST_SPECIAL (neg_zero, inf, neg_zero, false , 0 );
TEST_SPECIAL (min_denormal, inf, min_denormal, false , 0 );
TEST_SPECIAL (min_normal, inf, min_normal, false , 0 );
TEST_SPECIAL (max_normal, inf, max_normal, false , 0 );
TEST_SPECIAL (3.0 , inf, 3.0 , false , 0 );
TEST_SPECIAL (T ( 3.0 ) , inf, T ( 3.0 ) , false , 0 );
// fmod (x, -inf) == x for x not infinite.
TEST_SPECIAL (0.0 , neg_inf, 0.0 , false , 0 );
TEST_SPECIAL (zero , neg_inf, zero , false , 0 );
TEST_SPECIAL (neg_zero, neg_inf, neg_zero, false , 0 );
TEST_SPECIAL (min_denormal, neg_inf, min_denormal, false , 0 );
TEST_SPECIAL (min_normal, neg_inf, min_normal, false , 0 );
TEST_SPECIAL (max_normal, neg_inf, max_normal, false , 0 );
TEST_SPECIAL (3.0 , neg_inf, 3.0 , false , 0 );
TEST_SPECIAL (T ( 3.0 ) , neg_inf, T ( 3.0 ) , false , 0 );
TEST_SPECIAL (0.0 , aNaN, aNaN, false , 0 );
TEST_SPECIAL (0.0 , -aNaN, aNaN, false , 0 );
TEST_SPECIAL (zero , aNaN, aNaN, false , 0 );
TEST_SPECIAL (zero , -aNaN, aNaN, false , 0 );
TEST_SPECIAL (neg_zero, aNaN, aNaN, false , 0 );
TEST_SPECIAL (neg_zero, -aNaN, aNaN, false , 0 );
TEST_SPECIAL (1.0 , aNaN, aNaN, false , 0 );
TEST_SPECIAL (1.0 , -aNaN, aNaN, false , 0 );
TEST_SPECIAL (T ( 1.0 ) , aNaN, aNaN, false , 0 );
TEST_SPECIAL (T ( 1.0 ) , -aNaN, aNaN, false , 0 );
TEST_SPECIAL (inf, aNaN, aNaN, false , 0 );
TEST_SPECIAL (inf, -aNaN, aNaN, false , 0 );
TEST_SPECIAL (neg_inf, aNaN, aNaN, false , 0 );
TEST_SPECIAL (neg_inf, -aNaN, aNaN, false , 0 );
TEST_SPECIAL (0.0 , sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (0.0 , -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (zero , sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (zero , -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (neg_zero, sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (neg_zero, -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (1.0 , sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (1.0 , -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (T ( 1.0 ) , sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (T ( 1.0 ) , -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (inf, sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (inf, -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (neg_inf, sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (neg_inf, -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (aNaN, 0.0 , aNaN, false , 0 );
TEST_SPECIAL (-aNaN, 0.0 , aNaN, false , 0 );
TEST_SPECIAL (aNaN, zero , aNaN, false , 0 );
TEST_SPECIAL (-aNaN, zero , aNaN, false , 0 );
TEST_SPECIAL (aNaN, neg_zero, aNaN, false , 0 );
TEST_SPECIAL (-aNaN, neg_zero, aNaN, false , 0 );
TEST_SPECIAL (aNaN, 1.0 , aNaN, false , 0 );
TEST_SPECIAL (-aNaN, 1.0 , aNaN, false , 0 );
TEST_SPECIAL (aNaN, T ( 1.0 ) , aNaN, false , 0 );
TEST_SPECIAL (-aNaN, T ( 1.0 ) , aNaN, false , 0 );
TEST_SPECIAL (aNaN, inf, aNaN, false , 0 );
TEST_SPECIAL (-aNaN, inf, aNaN, false , 0 );
TEST_SPECIAL (aNaN, neg_inf, aNaN, false , 0 );
TEST_SPECIAL (-aNaN, neg_inf, aNaN, false , 0 );
TEST_SPECIAL (sNaN , 0.0 , aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , 0.0 , aNaN, false , FE_INVALID);
TEST_SPECIAL (sNaN , zero , aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , zero , aNaN, false , FE_INVALID);
TEST_SPECIAL (sNaN , neg_zero, aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , neg_zero, aNaN, false , FE_INVALID);
TEST_SPECIAL (sNaN , 1.0 , aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , 1.0 , aNaN, false , FE_INVALID);
TEST_SPECIAL (sNaN , T ( 1.0 ) , aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , T ( 1.0 ) , aNaN, false , FE_INVALID);
TEST_SPECIAL (sNaN , inf, aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , inf, aNaN, false , FE_INVALID);
TEST_SPECIAL (sNaN , neg_inf, aNaN, false , FE_INVALID);
Expand All
@@ -164,17 +164,17 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
TEST_SPECIAL (-sNaN , sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (-sNaN , -sNaN , aNaN, false , FE_INVALID);
TEST_SPECIAL (6.5 , 2 . 25L , 2 . 0L , false , 0 );
TEST_SPECIAL (-6.5 , 2 . 25L , -2 .0L , false , 0 );
TEST_SPECIAL (6.5 , -2 .25L , 2 . 0L , false , 0 );
TEST_SPECIAL (-6.5 , -2 .25L , -2 .0L , false , 0 );
TEST_SPECIAL (max_normal, max_normal, 0.0 , false , 0 );
TEST_SPECIAL (max_normal, -max_normal, 0.0 , false , 0 );
TEST_SPECIAL (max_normal, min_normal, 0.0 , false , 0 );
TEST_SPECIAL (max_normal, -min_normal, 0.0 , false , 0 );
TEST_SPECIAL (max_normal, min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (max_normal, -min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (T ( 6.5 ), T ( 2.25 ), T ( 2.0 ) , false , 0 );
TEST_SPECIAL (T ( -6.5 ), T ( 2.25 ), T ( -2.0 ) , false , 0 );
TEST_SPECIAL (T ( 6.5 ), T ( -2.25 ), T ( 2.0 ) , false , 0 );
TEST_SPECIAL (T ( -6.5 ), T ( -2.25 ), T ( -2.0 ) , false , 0 );
TEST_SPECIAL (max_normal, max_normal, zero , false , 0 );
TEST_SPECIAL (max_normal, -max_normal, zero , false , 0 );
TEST_SPECIAL (max_normal, min_normal, zero , false , 0 );
TEST_SPECIAL (max_normal, -min_normal, zero , false , 0 );
TEST_SPECIAL (max_normal, min_denormal, zero , false , 0 );
TEST_SPECIAL (max_normal, -min_denormal, zero , false , 0 );
TEST_SPECIAL (-max_normal, max_normal, neg_zero, false , 0 );
TEST_SPECIAL (-max_normal, -max_normal, neg_zero, false , 0 );
TEST_SPECIAL (-max_normal, min_normal, neg_zero, false , 0 );
Expand All
@@ -184,10 +184,10 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
TEST_SPECIAL (min_normal, max_normal, min_normal, false , 0 );
TEST_SPECIAL (min_normal, -max_normal, min_normal, false , 0 );
TEST_SPECIAL (min_normal, min_normal, 0.0 , false , 0 );
TEST_SPECIAL (min_normal, -min_normal, 0.0 , false , 0 );
TEST_SPECIAL (min_normal, min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (min_normal, -min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (min_normal, min_normal, zero , false , 0 );
TEST_SPECIAL (min_normal, -min_normal, zero , false , 0 );
TEST_SPECIAL (min_normal, min_denormal, zero , false , 0 );
TEST_SPECIAL (min_normal, -min_denormal, zero , false , 0 );
TEST_SPECIAL (-min_normal, max_normal, -min_normal, false , 0 );
TEST_SPECIAL (-min_normal, -max_normal, -min_normal, false , 0 );
TEST_SPECIAL (-min_normal, min_normal, neg_zero, false , 0 );
Expand All
@@ -199,8 +199,8 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
TEST_SPECIAL (min_denormal, -max_normal, min_denormal, false , 0 );
TEST_SPECIAL (min_denormal, min_normal, min_denormal, false , 0 );
TEST_SPECIAL (min_denormal, -min_normal, min_denormal, false , 0 );
TEST_SPECIAL (min_denormal, min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (min_denormal, -min_denormal, 0.0 , false , 0 );
TEST_SPECIAL (min_denormal, min_denormal, zero , false , 0 );
TEST_SPECIAL (min_denormal, -min_denormal, zero , false , 0 );
TEST_SPECIAL (-min_denormal, max_normal, -min_denormal, false , 0 );
TEST_SPECIAL (-min_denormal, -max_normal, -min_denormal, false , 0 );
TEST_SPECIAL (-min_denormal, min_normal, -min_denormal, false , 0 );
Expand All
@@ -212,33 +212,33 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
void testRegularExtreme (FModFunc f) {
if constexpr (sizeof (T) < sizeof (float ))
return ;
TEST_REGULAR (0x1p127L, 0x3p-149L , 0x1p-149L );
TEST_REGULAR (0x1p127L, -0x3p-149L , 0x1p-149L );
TEST_REGULAR (0x1p127L, 0x3p-148L , 0x1p-147L );
TEST_REGULAR (0x1p127L, -0x3p-148L , 0x1p-147L );
TEST_REGULAR (0x1p127L, 0x3p-126L , 0x1p-125L );
TEST_REGULAR (0x1p127L, -0x3p-126L , 0x1p-125L );
TEST_REGULAR (-0x1p127L, 0x3p-149L , -0x1p-149L );
TEST_REGULAR (-0x1p127L, -0x3p-149L , -0x1p-149L );
TEST_REGULAR (-0x1p127L, 0x3p-148L , -0x1p-147L );
TEST_REGULAR (-0x1p127L, -0x3p-148L , -0x1p-147L );
TEST_REGULAR (-0x1p127L, 0x3p-126L , -0x1p-125L );
TEST_REGULAR (-0x1p127L, -0x3p-126L , -0x1p-125L );
TEST_REGULAR (T (0x1p127), T ( 0x3p-149 ), T ( 0x1p-149 ) );
TEST_REGULAR (T (0x1p127), T ( -0x3p-149 ), T ( 0x1p-149 ) );
TEST_REGULAR (T (0x1p127), T ( 0x3p-148 ), T ( 0x1p-147 ) );
TEST_REGULAR (T (0x1p127), T ( -0x3p-148 ), T ( 0x1p-147 ) );
TEST_REGULAR (T (0x1p127), T ( 0x3p-126 ), T ( 0x1p-125 ) );
TEST_REGULAR (T (0x1p127), T ( -0x3p-126 ), T ( 0x1p-125 ) );
TEST_REGULAR (T (-0x1p127), T ( 0x3p-149 ), T ( -0x1p-149 ) );
TEST_REGULAR (T (-0x1p127), T ( -0x3p-149 ), T ( -0x1p-149 ) );
TEST_REGULAR (T (-0x1p127), T ( 0x3p-148 ), T ( -0x1p-147 ) );
TEST_REGULAR (T (-0x1p127), T ( -0x3p-148 ), T ( -0x1p-147 ) );
TEST_REGULAR (T (-0x1p127), T ( 0x3p-126 ), T ( -0x1p-125 ) );
TEST_REGULAR (T (-0x1p127), T ( -0x3p-126 ), T ( -0x1p-125 ) );
if constexpr (sizeof (T) < sizeof (double ))
return ;
TEST_REGULAR (0x1p1023L, 0x3p-1074L , 0x1p-1073L );
TEST_REGULAR (0x1p1023L, -0x3p-1074L , 0x1p-1073L );
TEST_REGULAR (0x1p1023L, 0x3p-1073L , 0x1p-1073L );
TEST_REGULAR (0x1p1023L, -0x3p-1073L , 0x1p-1073L );
TEST_REGULAR (0x1p1023L, 0x3p-1022L , 0x1p-1021L );
TEST_REGULAR (0x1p1023L, -0x3p-1022L , 0x1p-1021L );
TEST_REGULAR (-0x1p1023L, 0x3p-1074L , -0x1p-1073L );
TEST_REGULAR (-0x1p1023L, -0x3p-1074L , -0x1p-1073L );
TEST_REGULAR (-0x1p1023L, 0x3p-1073L , -0x1p-1073L );
TEST_REGULAR (-0x1p1023L, -0x3p-1073L , -0x1p-1073L );
TEST_REGULAR (-0x1p1023L, 0x3p-1022L , -0x1p-1021L );
TEST_REGULAR (-0x1p1023L, -0x3p-1022L , -0x1p-1021L );
TEST_REGULAR (T (0x1p1023), T ( 0x3p-1074 ), T ( 0x1p-1073 ) );
TEST_REGULAR (T (0x1p1023), T ( -0x3p-1074 ), T ( 0x1p-1073 ) );
TEST_REGULAR (T (0x1p1023), T ( 0x3p-1073 ), T ( 0x1p-1073 ) );
TEST_REGULAR (T (0x1p1023), T ( -0x3p-1073 ), T ( 0x1p-1073 ) );
TEST_REGULAR (T (0x1p1023), T ( 0x3p-1022 ), T ( 0x1p-1021 ) );
TEST_REGULAR (T (0x1p1023), T ( -0x3p-1022 ), T ( 0x1p-1021 ) );
TEST_REGULAR (T (-0x1p1023), T ( 0x3p-1074 ), T ( -0x1p-1073 ) );
TEST_REGULAR (T (-0x1p1023), T ( -0x3p-1074 ), T ( -0x1p-1073 ) );
TEST_REGULAR (T (-0x1p1023), T ( 0x3p-1073 ), T ( -0x1p-1073 ) );
TEST_REGULAR (T (-0x1p1023), T ( -0x3p-1073 ), T ( -0x1p-1073 ) );
TEST_REGULAR (T (-0x1p1023), T ( 0x3p-1022 ), T ( -0x1p-1021 ) );
TEST_REGULAR (T (-0x1p1023), T ( -0x3p-1022 ), T ( -0x1p-1021 ) );
}
};
Expand Down