17d68d9d2Slntue //===-- Unittests for tan -------------------------------------------------===// 27d68d9d2Slntue // 37d68d9d2Slntue // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47d68d9d2Slntue // See https://llvm.org/LICENSE.txt for license information. 57d68d9d2Slntue // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67d68d9d2Slntue // 77d68d9d2Slntue //===----------------------------------------------------------------------===// 87d68d9d2Slntue 97d68d9d2Slntue #include "src/math/tan.h" 107d68d9d2Slntue #include "test/UnitTest/FPMatcher.h" 117d68d9d2Slntue #include "test/UnitTest/Test.h" 127d68d9d2Slntue 137d68d9d2Slntue using LlvmLibcTanTest = LIBC_NAMESPACE::testing::FPTest<double>; 147d68d9d2Slntue 157d68d9d2Slntue using LIBC_NAMESPACE::testing::tlog; 167d68d9d2Slntue 177d68d9d2Slntue TEST_F(LlvmLibcTanTest, SpecialNumbers) { 187d68d9d2Slntue EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::tan(aNaN)); 197d68d9d2Slntue EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::tan(inf)); 207d68d9d2Slntue EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::tan(neg_inf)); 217d68d9d2Slntue EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::tan(zero)); 227d68d9d2Slntue EXPECT_FP_EQ_ALL_ROUNDING(neg_zero, LIBC_NAMESPACE::tan(neg_zero)); 237d68d9d2Slntue EXPECT_FP_EQ(0x1.0p-50, LIBC_NAMESPACE::tan(0x1.0p-50)); 247d68d9d2Slntue EXPECT_FP_EQ(min_normal, LIBC_NAMESPACE::tan(min_normal)); 257d68d9d2Slntue EXPECT_FP_EQ(min_denormal, LIBC_NAMESPACE::tan(min_denormal)); 267d68d9d2Slntue } 27*0f4b3c40Slntue 28*0f4b3c40Slntue #ifdef LIBC_TEST_FTZ_DAZ 29*0f4b3c40Slntue 30*0f4b3c40Slntue using namespace LIBC_NAMESPACE::testing; 31*0f4b3c40Slntue 32*0f4b3c40Slntue TEST_F(LlvmLibcTanTest, FTZMode) { 33*0f4b3c40Slntue ModifyMXCSR mxcsr(FTZ); 34*0f4b3c40Slntue 35*0f4b3c40Slntue EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(min_denormal)); 36*0f4b3c40Slntue EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(max_denormal)); 37*0f4b3c40Slntue } 38*0f4b3c40Slntue 39*0f4b3c40Slntue TEST_F(LlvmLibcTanTest, DAZMode) { 40*0f4b3c40Slntue ModifyMXCSR mxcsr(DAZ); 41*0f4b3c40Slntue 42*0f4b3c40Slntue EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(min_denormal)); 43*0f4b3c40Slntue EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(max_denormal)); 44*0f4b3c40Slntue } 45*0f4b3c40Slntue 46*0f4b3c40Slntue TEST_F(LlvmLibcTanTest, FTZDAZMode) { 47*0f4b3c40Slntue ModifyMXCSR mxcsr(FTZ | DAZ); 48*0f4b3c40Slntue 49*0f4b3c40Slntue EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(min_denormal)); 50*0f4b3c40Slntue EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::tan(max_denormal)); 51*0f4b3c40Slntue } 52*0f4b3c40Slntue 53*0f4b3c40Slntue #endif 54