37 changes: 37 additions & 0 deletions libc/test/src/math/smoke/atan2_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,40 @@ TEST_F(LlvmLibcAtan2Test, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(0.0, LIBC_NAMESPACE::atan2(1.0, inf));
EXPECT_FP_EQ_ALL_ROUNDING(-0.0, LIBC_NAMESPACE::atan2(-1.0, inf));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcAtan2Test, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0x1.921fb54442d18p-1,
LIBC_NAMESPACE::atan2(min_denormal, min_denormal));
EXPECT_FP_EQ(0x1.0000000000001p-52,
LIBC_NAMESPACE::atan2(min_denormal, max_denormal));
EXPECT_FP_EQ(0x1.921fb54442d17p0,
LIBC_NAMESPACE::atan2(max_denormal, min_denormal));
EXPECT_FP_EQ(0x1.921fb54442d18p-1,
LIBC_NAMESPACE::atan2(max_denormal, max_denormal));
}

TEST_F(LlvmLibcAtan2Test, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, max_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, max_denormal));
}

TEST_F(LlvmLibcAtan2Test, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, max_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, max_denormal));
}

#endif
24 changes: 24 additions & 0 deletions libc/test/src/math/smoke/atanf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,27 @@ TEST_F(LlvmLibcAtanfTest, SpecialNumbers) {
// EXPECT_FP_EXCEPTION(0);
EXPECT_MATH_ERRNO(0);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcAtanfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::atanf(min_denormal));
}

TEST_F(LlvmLibcAtanfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::atanf(min_denormal));
}

TEST_F(LlvmLibcAtanfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::atanf(min_denormal));
}

#endif
24 changes: 24 additions & 0 deletions libc/test/src/math/smoke/atanhf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,27 @@ TEST_F(LlvmLibcAtanhfTest, SpecialNumbers) {
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::atanhf(neg_inf), FE_INVALID);
EXPECT_MATH_ERRNO(EDOM);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcAtanhfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::atanhf(min_denormal));
}

TEST_F(LlvmLibcAtanhfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::atanhf(min_denormal));
}

TEST_F(LlvmLibcAtanhfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::atanhf(min_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/cbrt_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,30 @@ TEST_F(LlvmLibcCbrtTest, SpecialNumbers) {
EXPECT_FP_EQ(-0x1.0p-340, LIBC_NAMESPACE::cbrt(-0x1.fffffffffffffp-1021));
EXPECT_FP_EQ(2.0, LIBC_NAMESPACE::cbrt(0x1.fffffffffffffp2));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcCbrtTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0x1.0p-358, LIBC_NAMESPACE::cbrt(min_denormal));
EXPECT_FP_EQ(0x1.428a2f98d728ap-341, LIBC_NAMESPACE::cbrt(max_denormal));
}

TEST_F(LlvmLibcCbrtTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(max_denormal));
}

TEST_F(LlvmLibcCbrtTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/cbrtf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,30 @@ TEST_F(LlvmLibcCbrtfTest, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(0x1.0p42f, LIBC_NAMESPACE::cbrtf(0x1.0p126f));
EXPECT_FP_EQ_ALL_ROUNDING(-0x1.0p42f, LIBC_NAMESPACE::cbrtf(-0x1.0p126f));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcCbrtfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0x1.428a3p-50f, LIBC_NAMESPACE::cbrtf(min_denormal));
EXPECT_FP_EQ(0x1.fffffep-43f, LIBC_NAMESPACE::cbrtf(max_denormal));
}

TEST_F(LlvmLibcCbrtfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::cbrtf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::cbrtf(max_denormal));
}

TEST_F(LlvmLibcCbrtfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::cbrtf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::cbrtf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/cos_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,30 @@ TEST_F(LlvmLibcCosTest, SpecialNumbers) {
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(min_normal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(min_denormal));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcCosTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(max_denormal));
}

TEST_F(LlvmLibcCosTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(max_denormal));
}

TEST_F(LlvmLibcCosTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::cos(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/cosf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,30 @@ TEST_F(LlvmLibcCosfTest, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::cosf(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcCosfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cosf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cosf(max_denormal));
}

TEST_F(LlvmLibcCosfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cosf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cosf(max_denormal));
}

TEST_F(LlvmLibcCosfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cosf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cosf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/coshf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,30 @@ TEST_F(LlvmLibcCoshfTest, Overflow) {
inf, LIBC_NAMESPACE::coshf(FPBits(0x42d00008U).get_val()), FE_OVERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcCoshfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(max_denormal));
}

TEST_F(LlvmLibcCoshfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(max_denormal));
}

TEST_F(LlvmLibcCoshfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/cospif_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,30 @@ TEST_F(LlvmLibcCospifTest, SpecialNumbers) {
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::cospif(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcCospifTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cospif(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cospif(max_denormal));
}

TEST_F(LlvmLibcCospifTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cospif(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cospif(max_denormal));
}

TEST_F(LlvmLibcCospifTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cospif(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::cospif(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/erff_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,30 @@ TEST_F(LlvmLibcErffTest, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::erff(zero));
EXPECT_FP_EQ_ALL_ROUNDING(neg_zero, LIBC_NAMESPACE::erff(neg_zero));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcErffTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(min_denormal));
EXPECT_FP_EQ(0x1.20dd72p-126f, LIBC_NAMESPACE::erff(max_denormal));
}

TEST_F(LlvmLibcErffTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(max_denormal));
}

TEST_F(LlvmLibcErffTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/exp10_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,30 @@ TEST_F(LlvmLibcExp10Test, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(100.0, LIBC_NAMESPACE::exp10(2.0));
EXPECT_FP_EQ_ALL_ROUNDING(1000.0, LIBC_NAMESPACE::exp10(3.0));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExp10Test, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp10(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp10(max_denormal));
}

TEST_F(LlvmLibcExp10Test, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp10(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp10(max_denormal));
}

TEST_F(LlvmLibcExp10Test, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp10(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp10(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/exp10f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,30 @@ TEST_F(LlvmLibcExp10fTest, Overflow) {
inf, LIBC_NAMESPACE::exp10f(FPBits(0x43000001U).get_val()), FE_OVERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExp10fTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp10f(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp10f(max_denormal));
}

TEST_F(LlvmLibcExp10fTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp10f(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp10f(max_denormal));
}

TEST_F(LlvmLibcExp10fTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp10f(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp10f(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/exp2_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,30 @@ TEST_F(LlvmLibcExp2Test, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(4.0, LIBC_NAMESPACE::exp2(2.0));
EXPECT_FP_EQ_ALL_ROUNDING(0.25, LIBC_NAMESPACE::exp2(-2.0));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExp2Test, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp2(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp2(max_denormal));
}

TEST_F(LlvmLibcExp2Test, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp2(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp2(max_denormal));
}

TEST_F(LlvmLibcExp2Test, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp2(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp2(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/exp2f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,30 @@ TEST_F(LlvmLibcExp2fTest, Overflow) {
inf, LIBC_NAMESPACE::exp2f(FPBits(0x43000001U).get_val()), FE_OVERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExp2fTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp2f(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp2f(max_denormal));
}

TEST_F(LlvmLibcExp2fTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp2f(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp2f(max_denormal));
}

TEST_F(LlvmLibcExp2fTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp2f(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::exp2f(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/exp2m1f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,30 @@ TEST_F(LlvmLibcExp2m1fTest, Underflow) {
FE_UNDERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExp2m1fTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::exp2m1f(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::exp2m1f(max_denormal));
}

TEST_F(LlvmLibcExp2m1fTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::exp2m1f(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::exp2m1f(max_denormal));
}

TEST_F(LlvmLibcExp2m1fTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::exp2m1f(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::exp2m1f(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/exp_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,30 @@ TEST_F(LlvmLibcExpTest, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(1.0, LIBC_NAMESPACE::exp(0.0));
EXPECT_FP_EQ_ALL_ROUNDING(1.0, LIBC_NAMESPACE::exp(-0.0));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExpTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp(max_denormal));
}

TEST_F(LlvmLibcExpTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp(max_denormal));
}

TEST_F(LlvmLibcExpTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp(min_denormal));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::exp(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/expf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,30 @@ TEST_F(LlvmLibcExpfTest, Overflow) {
inf, LIBC_NAMESPACE::expf(FPBits(0x42d00008U).get_val()), FE_OVERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExpfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::expf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::expf(max_denormal));
}

TEST_F(LlvmLibcExpfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::expf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::expf(max_denormal));
}

TEST_F(LlvmLibcExpfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::expf(min_denormal));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::expf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/expm1_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,30 @@ TEST_F(LlvmLibcExpm1Test, SpecialNumbers) {
// log(2^-54)
EXPECT_FP_EQ(-1.0, LIBC_NAMESPACE::expm1(-0x1.2b708872320e2p5));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExpm1Test, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::expm1(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::expm1(max_denormal));
}

TEST_F(LlvmLibcExpm1Test, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::expm1(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::expm1(max_denormal));
}

TEST_F(LlvmLibcExpm1Test, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::expm1(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::expm1(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/expm1f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,30 @@ TEST_F(LlvmLibcExpm1fTest, Overflow) {
inf, LIBC_NAMESPACE::expm1f(FPBits(0x42d00008U).get_val()), FE_OVERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcExpm1fTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::expm1f(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::expm1f(max_denormal));
}

TEST_F(LlvmLibcExpm1fTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::expm1f(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::expm1f(max_denormal));
}

TEST_F(LlvmLibcExpm1fTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::expm1f(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::expm1f(max_denormal));
}

#endif
34 changes: 34 additions & 0 deletions libc/test/src/math/smoke/hypotf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,37 @@ using LlvmLibcHypotfTest = HypotTestTemplate<float>;
TEST_F(LlvmLibcHypotfTest, SpecialNumbers) {
test_special_numbers(&LIBC_NAMESPACE::hypotf);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcHypotfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, max_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, min_denormal));
EXPECT_FP_EQ(0x1.6a09e4p-126f,
LIBC_NAMESPACE::hypotf(max_denormal, max_denormal));
}

TEST_F(LlvmLibcHypotfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, max_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, max_denormal));
}

TEST_F(LlvmLibcHypotfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, max_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, max_denormal));
}

#endif
26 changes: 26 additions & 0 deletions libc/test/src/math/smoke/log10_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,29 @@ TEST_F(LlvmLibcLog10Test, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(static_cast<double>(i), LIBC_NAMESPACE::log10(x));
}
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLog10Test, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(-0x1.434e6420f4374p8, LIBC_NAMESPACE::log10(min_denormal));
}

TEST_F(LlvmLibcLog10Test, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log10(min_denormal));
}

TEST_F(LlvmLibcLog10Test, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log10(min_denormal));
}

#endif
26 changes: 26 additions & 0 deletions libc/test/src/math/smoke/log10f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,29 @@ TEST_F(LlvmLibcLog10fTest, SpecialNumbers) {
EXPECT_FP_EQ_ALL_ROUNDING(static_cast<float>(i), LIBC_NAMESPACE::log10f(x));
}
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLog10fTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(-0x1.66d3e7bd9a403p5f, LIBC_NAMESPACE::log10f(min_denormal));
}

TEST_F(LlvmLibcLog10fTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log10f(min_denormal));
}

TEST_F(LlvmLibcLog10fTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log10f(min_denormal));
}

#endif
24 changes: 24 additions & 0 deletions libc/test/src/math/smoke/log1p_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,27 @@ TEST_F(LlvmLibcLog1pTest, SpecialNumbers) {
EXPECT_FP_EQ_WITH_EXCEPTION(neg_inf, LIBC_NAMESPACE::log1p(-1.0),
FE_DIVBYZERO);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLog1pTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::log1p(min_denormal));
}

TEST_F(LlvmLibcLog1pTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::log1p(min_denormal));
}

TEST_F(LlvmLibcLog1pTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::log1p(min_denormal));
}

#endif
24 changes: 24 additions & 0 deletions libc/test/src/math/smoke/log1pf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,27 @@ TEST_F(LlvmLibcLog1pfTest, SpecialNumbers) {
EXPECT_FP_EQ_WITH_EXCEPTION(neg_inf, LIBC_NAMESPACE::log1pf(-1.0f),
FE_DIVBYZERO);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLog1pfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::log1pf(min_denormal));
}

TEST_F(LlvmLibcLog1pfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::log1pf(min_denormal));
}

TEST_F(LlvmLibcLog1pfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::log1pf(min_denormal));
}

#endif
26 changes: 26 additions & 0 deletions libc/test/src/math/smoke/log2_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,29 @@ TEST_F(LlvmLibcLog2Test, SpecialNumbers) {
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::log2(-1.0), FE_INVALID);
EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::log2(1.0));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLog2Test, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(-1074.0, LIBC_NAMESPACE::log2(min_denormal));
}

TEST_F(LlvmLibcLog2Test, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log2(min_denormal));
}

TEST_F(LlvmLibcLog2Test, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log2(min_denormal));
}

#endif
25 changes: 25 additions & 0 deletions libc/test/src/math/smoke/log2f_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,28 @@ TEST_F(LlvmLibcLog2fTest, SpecialNumbers) {
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::log2f(-1.0f), FE_INVALID);
EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::log2f(1.0f));
}
#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLog2fTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(-149.0f, LIBC_NAMESPACE::log2f(min_denormal));
}

TEST_F(LlvmLibcLog2fTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log2f(min_denormal));
}

TEST_F(LlvmLibcLog2fTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log2f(min_denormal));
}

#endif
26 changes: 26 additions & 0 deletions libc/test/src/math/smoke/log_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,29 @@ TEST_F(LlvmLibcLogTest, SpecialNumbers) {
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::log(-1.0), FE_INVALID);
EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::log(1.0));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLogTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(-0x1.74385446d71c3p9, LIBC_NAMESPACE::log(min_denormal));
}

TEST_F(LlvmLibcLogTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log(min_denormal));
}

TEST_F(LlvmLibcLogTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::log(min_denormal));
}

#endif
25 changes: 25 additions & 0 deletions libc/test/src/math/smoke/logf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,28 @@ TEST_F(LlvmLibcLogfTest, SpecialNumbers) {
EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::logf(-1.0f), FE_INVALID);
EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::logf(1.0f));
}
#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcLogfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(-0x1.9d1d9fccf477p6f, LIBC_NAMESPACE::logf(min_denormal));
}

TEST_F(LlvmLibcLogfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::logf(min_denormal));
}

TEST_F(LlvmLibcLogfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(FPBits::inf(Sign::NEG).get_val(),
LIBC_NAMESPACE::logf(min_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/pow_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,30 @@ TEST_F(LlvmLibcPowTest, SpecialNumbers) {
}
}
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcPowTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_IS_NAN(LIBC_NAMESPACE::pow(-min_denormal, 0.5));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::pow(2.0, min_denormal));
}

TEST_F(LlvmLibcPowTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::pow(-min_denormal, 0.5));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::pow(2.0, min_denormal));
}

TEST_F(LlvmLibcPowTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::pow(-min_denormal, 0.5));
EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::pow(2.0, min_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/powf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,30 @@ TEST_F(LlvmLibcPowfTest, SpecialNumbers) {
EXPECT_FP_EQ(-0.0f, LIBC_NAMESPACE::powf(-0.015625f, 25.0f));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::powf(-0.015625f, 26.0f));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcPowfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf(-min_denormal, 0.5f));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::powf(2.0f, min_denormal));
}

TEST_F(LlvmLibcPowfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::powf(-min_denormal, 0.5f));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::powf(2.0f, min_denormal));
}

TEST_F(LlvmLibcPowfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::powf(-min_denormal, 0.5f));
EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::powf(2.0f, min_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/sin_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,30 @@ TEST_F(LlvmLibcSinTest, SpecialNumbers) {
EXPECT_FP_EQ(min_normal, LIBC_NAMESPACE::sin(min_normal));
EXPECT_FP_EQ(min_denormal, LIBC_NAMESPACE::sin(min_denormal));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcSinTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sin(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sin(max_denormal));
}

TEST_F(LlvmLibcSinTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sin(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sin(max_denormal));
}

TEST_F(LlvmLibcSinTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sin(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sin(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/sinf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,30 @@ TEST_F(LlvmLibcSinfTest, SpecialNumbers) {
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::sinf(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcSinfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinf(max_denormal));
}

TEST_F(LlvmLibcSinfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinf(max_denormal));
}

TEST_F(LlvmLibcSinfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/sinhf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,30 @@ TEST_F(LlvmLibcSinhfTest, Overflow) {
inf, LIBC_NAMESPACE::sinhf(FPBits(0x42d00008U).get_val()), FE_OVERFLOW);
EXPECT_MATH_ERRNO(ERANGE);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcSinhfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinhf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinhf(max_denormal));
}

TEST_F(LlvmLibcSinhfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinhf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinhf(max_denormal));
}

TEST_F(LlvmLibcSinhfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinhf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinhf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/sinpif_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,30 @@ TEST_F(LlvmLibcSinpifTest, Integers) {
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sinpif(0x1.cp+106));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::sinpif(0x1.cp+21));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcSinpifTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinpif(min_denormal));
EXPECT_FP_EQ(0x1.921fb2p-125f, LIBC_NAMESPACE::sinpif(max_denormal));
}

TEST_F(LlvmLibcSinpifTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinpif(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinpif(max_denormal));
}

TEST_F(LlvmLibcSinpifTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinpif(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::sinpif(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/tan_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,30 @@ TEST_F(LlvmLibcTanTest, SpecialNumbers) {
EXPECT_FP_EQ(min_normal, LIBC_NAMESPACE::tan(min_normal));
EXPECT_FP_EQ(min_denormal, LIBC_NAMESPACE::tan(min_denormal));
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcTanTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(max_denormal));
}

TEST_F(LlvmLibcTanTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(max_denormal));
}

TEST_F(LlvmLibcTanTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(min_denormal));
EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/tanf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,30 @@ TEST_F(LlvmLibcTanfTest, SpecialNumbers) {
EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::tanf(neg_inf));
EXPECT_MATH_ERRNO(EDOM);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcTanfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanf(max_denormal));
}

TEST_F(LlvmLibcTanfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanf(max_denormal));
}

TEST_F(LlvmLibcTanfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanf(max_denormal));
}

#endif
27 changes: 27 additions & 0 deletions libc/test/src/math/smoke/tanhf_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,30 @@ TEST_F(LlvmLibcTanhfTest, SpecialNumbers) {
EXPECT_FP_EQ(-1.0f, LIBC_NAMESPACE::tanhf(neg_inf));
EXPECT_MATH_ERRNO(0);
}

#ifdef LIBC_TEST_FTZ_DAZ

using namespace LIBC_NAMESPACE::testing;

TEST_F(LlvmLibcTanhfTest, FTZMode) {
ModifyMXCSR mxcsr(FTZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanhf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanhf(max_denormal));
}

TEST_F(LlvmLibcTanhfTest, DAZMode) {
ModifyMXCSR mxcsr(DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanhf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanhf(max_denormal));
}

TEST_F(LlvmLibcTanhfTest, FTZDAZMode) {
ModifyMXCSR mxcsr(FTZ | DAZ);

EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanhf(min_denormal));
EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::tanhf(max_denormal));
}

#endif