1 //===-- Unittests for log1p -----------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "hdr/math_macros.h" 10 #include "src/__support/FPUtil/FPBits.h" 11 #include "src/errno/libc_errno.h" 12 #include "src/math/log1p.h" 13 #include "test/UnitTest/FPMatcher.h" 14 #include "test/UnitTest/Test.h" 15 16 using LlvmLibcLog1pTest = LIBC_NAMESPACE::testing::FPTest<double>; 17 18 TEST_F(LlvmLibcLog1pTest, SpecialNumbers) { 19 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::log1p(aNaN)); 20 EXPECT_FP_EQ(inf, LIBC_NAMESPACE::log1p(inf)); 21 EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::log1p(neg_inf), FE_INVALID); 22 EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::log1p(-2.0), FE_INVALID); 23 EXPECT_FP_EQ(zero, LIBC_NAMESPACE::log1p(0.0)); 24 EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::log1p(-0.0)); 25 EXPECT_FP_EQ_WITH_EXCEPTION(neg_inf, LIBC_NAMESPACE::log1p(-1.0), 26 FE_DIVBYZERO); 27 28 EXPECT_FP_EQ(0x1.62c829bf8fd9dp9, 29 LIBC_NAMESPACE::log1p(0x1.9b536cac3a09dp1023)); 30 } 31 32 #ifdef LIBC_TEST_FTZ_DAZ 33 34 using namespace LIBC_NAMESPACE::testing; 35 36 TEST_F(LlvmLibcLog1pTest, FTZMode) { 37 ModifyMXCSR mxcsr(FTZ); 38 39 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::log1p(min_denormal)); 40 EXPECT_FP_EQ(0x1.62c829bf8fd9dp9, 41 LIBC_NAMESPACE::log1p(0x1.9b536cac3a09dp1023)); 42 } 43 44 TEST_F(LlvmLibcLog1pTest, DAZMode) { 45 ModifyMXCSR mxcsr(DAZ); 46 47 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::log1p(min_denormal)); 48 EXPECT_FP_EQ(0x1.62c829bf8fd9dp9, 49 LIBC_NAMESPACE::log1p(0x1.9b536cac3a09dp1023)); 50 } 51 52 TEST_F(LlvmLibcLog1pTest, FTZDAZMode) { 53 ModifyMXCSR mxcsr(FTZ | DAZ); 54 55 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::log1p(min_denormal)); 56 EXPECT_FP_EQ(0x1.62c829bf8fd9dp9, 57 LIBC_NAMESPACE::log1p(0x1.9b536cac3a09dp1023)); 58 } 59 60 #endif 61