6 changes: 4 additions & 2 deletions libc/test/src/math/explogxf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,16 @@
#include "utils/MPFRWrapper/MPFRUtils.h"

using LlvmLibcExplogfTest = LIBC_NAMESPACE::testing::FPTest<float>;
using FPBits = LIBC_NAMESPACE::fputil::FPBits<float>;

namespace mpfr = LIBC_NAMESPACE::testing::mpfr;

constexpr int def_count = 100003;
constexpr float def_prec = 0.500001f;

auto f_normal = [](float x) -> bool {
return !(isnan(x) || isinf(x) || LIBC_NAMESPACE::fabs(x) < 2E-38);
return !(FPBits(x).is_nan() || FPBits(x).is_inf() ||
LIBC_NAMESPACE::fabs(x) < 2E-38);
};

TEST_F(LlvmLibcExplogfTest, ExpInFloatRange) {
Expand All @@ -34,7 +36,7 @@ TEST_F(LlvmLibcExplogfTest, ExpInFloatRange) {
return static_cast<float>(result.mh * r);
};
auto f_check = [](float x) -> bool {
return !((isnan(x) || isinf(x) || x < -70 || x > 70 ||
return !((FPBits(x).is_nan() || FPBits(x).is_inf() || x < -70 || x > 70 ||
LIBC_NAMESPACE::fabsf(x) < 0x1.0p-10));
};
CHECK_DATA(0.0f, neg_inf, mpfr::Operation::Exp, fx, f_check, def_count,
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/expm1_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ TEST_F(LlvmLibcExpm1Test, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x) || x < 0.0)
if (FPBits(v).is_nan() || FPBits(v).is_inf() || x < 0.0)
continue;
LIBC_NAMESPACE::libc_errno = 0;
double result = LIBC_NAMESPACE::expm1(x);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
5 changes: 3 additions & 2 deletions libc/test/src/math/expm1f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ TEST_F(LlvmLibcExpm1fTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
LIBC_NAMESPACE::libc_errno = 0;
float result = LIBC_NAMESPACE::expm1f(x);
Expand All @@ -126,7 +126,8 @@ TEST_F(LlvmLibcExpm1fTest, InFloatRange) {
// in the single-precision floating point range, then ignore comparing with
// MPFR result as MPFR can still produce valid results because of its
// wider precision.
if (isnan(result) || isinf(result) || LIBC_NAMESPACE::libc_errno != 0)
if (FPBits(result).is_nan() || FPBits(result).is_inf() ||
LIBC_NAMESPACE::libc_errno != 0)
continue;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Expm1, x,
LIBC_NAMESPACE::expm1f(x), 0.5);
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/log10_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,12 @@ TEST_F(LlvmLibcLog10Test, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x) || x < 0.0)
if (FPBits(v).is_nan() || FPBits(v).is_inf() || x < 0.0)
continue;
LIBC_NAMESPACE::libc_errno = 0;
double result = LIBC_NAMESPACE::log10(x);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/log1p_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,12 @@ TEST_F(LlvmLibcLog1pTest, InDoubleRange) {

for (uint64_t i = 0, v = start; i <= COUNT; ++i, v += step) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x) || x < 0.0)
if (FPBits(v).is_nan() || FPBits(v).is_inf() || x < 0.0)
continue;
LIBC_NAMESPACE::libc_errno = 0;
double result = LIBC_NAMESPACE::log1p(x);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/log1pf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ TEST_F(LlvmLibcLog1pfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
LIBC_NAMESPACE::libc_errno = 0;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Log1p, x,
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/log2_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,12 @@ TEST_F(LlvmLibcLog2Test, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x) || x < 0.0)
if (FPBits(v).is_nan() || FPBits(v).is_inf() || x < 0.0)
continue;
LIBC_NAMESPACE::libc_errno = 0;
double result = LIBC_NAMESPACE::log2(x);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
5 changes: 3 additions & 2 deletions libc/test/src/math/log2f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,16 @@ TEST_F(LlvmLibcLog2fTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
LIBC_NAMESPACE::libc_errno = 0;
float result = LIBC_NAMESPACE::log2f(x);
// If the computation resulted in an error or did not produce valid result
// in the single-precision floating point range, then ignore comparing with
// MPFR result as MPFR can still produce valid results because of its
// wider precision.
if (isnan(result) || isinf(result) || LIBC_NAMESPACE::libc_errno != 0)
if (FPBits(result).is_nan() || FPBits(result).is_inf() ||
LIBC_NAMESPACE::libc_errno != 0)
continue;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Log2, x,
LIBC_NAMESPACE::log2f(x), 0.5);
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/log_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,12 @@ TEST_F(LlvmLibcLogTest, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x) || x < 0.0)
if (FPBits(v).is_nan() || FPBits(v).is_inf() || x < 0.0)
continue;
LIBC_NAMESPACE::libc_errno = 0;
double result = LIBC_NAMESPACE::log(x);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/logf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ TEST_F(LlvmLibcLogfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Log, x,
LIBC_NAMESPACE::logf(x), 0.5);
Expand Down
6 changes: 3 additions & 3 deletions libc/test/src/math/powf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,18 +71,18 @@ TEST_F(LlvmLibcPowfTest, InFloatRange) {

for (uint32_t i = 0, v = X_START; i <= X_COUNT; ++i, v += X_STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x) || x < 0.0)
if (FPBits(v).is_nan() || FPBits(v).is_inf() || x < 0.0)
continue;

for (uint32_t j = 0, w = Y_START; j <= Y_COUNT; ++j, w += Y_STEP) {
float y = FPBits(w).get_val();
if (isnan(y) || isinf(y))
if (FPBits(w).is_nan() || FPBits(w).is_inf())
continue;

LIBC_NAMESPACE::libc_errno = 0;
float result = LIBC_NAMESPACE::powf(x, y);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/sin_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,12 @@ TEST_F(LlvmLibcSinTest, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
LIBC_NAMESPACE::libc_errno = 0;
double result = LIBC_NAMESPACE::sin(x);
++cc;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++count;
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/sincos_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ TEST_F(LlvmLibcSincosTest, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;

ASSERT_SINCOS_MATCH_ALL_ROUNDING(x);
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/sincosf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ TEST_F(LlvmLibcSinCosfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;

EXPECT_SINCOS_MATCH_ALL_ROUNDING(x);
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/sinf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ TEST_F(LlvmLibcSinfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Sin, x,
LIBC_NAMESPACE::sinf(x), 0.5);
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/sinhf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ TEST_F(LlvmLibcSinhfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
ASSERT_MPFR_MATCH(mpfr::Operation::Sinh, x, LIBC_NAMESPACE::sinhf(x), 0.5);
}
Expand Down
4 changes: 2 additions & 2 deletions libc/test/src/math/tan_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,12 @@ TEST_F(LlvmLibcTanTest, InDoubleRange) {

for (uint64_t i = 0, v = START; i <= COUNT; ++i, v += STEP) {
double x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;

double result = LIBC_NAMESPACE::tan(x);
++total;
if (isnan(result) || isinf(result))
if (FPBits(result).is_nan() || FPBits(result).is_inf())
continue;

++tested;
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/tanf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ TEST_F(LlvmLibcTanfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Tan, x,
LIBC_NAMESPACE::tanf(x), 0.5);
Expand Down
2 changes: 1 addition & 1 deletion libc/test/src/math/tanhf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ TEST_F(LlvmLibcTanhfTest, InFloatRange) {
constexpr uint32_t STEP = UINT32_MAX / COUNT;
for (uint32_t i = 0, v = 0; i <= COUNT; ++i, v += STEP) {
float x = FPBits(v).get_val();
if (isnan(x) || isinf(x))
if (FPBits(v).is_nan() || FPBits(v).is_inf())
continue;
ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Tanh, x,
LIBC_NAMESPACE::tanhf(x), 0.5);
Expand Down