xref: /llvm-project/libc/test/src/math/smoke/tan_test.cpp (revision 0f4b3c409fbd756d826c89d5539d9ea22bcc56aa)
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