1 //===-- Unittests for coshf -----------------------------------------------===// 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/CPP/array.h" 11 #include "src/__support/FPUtil/FPBits.h" 12 #include "src/errno/libc_errno.h" 13 #include "src/math/coshf.h" 14 #include "test/UnitTest/FPMatcher.h" 15 #include "test/UnitTest/Test.h" 16 17 #include <stdint.h> 18 19 using LlvmLibcCoshfTest = LIBC_NAMESPACE::testing::FPTest<float>; 20 21 TEST_F(LlvmLibcCoshfTest, SpecialNumbers) { 22 LIBC_NAMESPACE::libc_errno = 0; 23 24 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::coshf(aNaN)); 25 EXPECT_MATH_ERRNO(0); 26 27 EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::coshf(inf)); 28 EXPECT_MATH_ERRNO(0); 29 30 EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::coshf(neg_inf)); 31 EXPECT_MATH_ERRNO(0); 32 33 EXPECT_FP_EQ_ALL_ROUNDING(1.0f, LIBC_NAMESPACE::coshf(0.0f)); 34 EXPECT_MATH_ERRNO(0); 35 36 EXPECT_FP_EQ_ALL_ROUNDING(1.0f, LIBC_NAMESPACE::coshf(-0.0f)); 37 EXPECT_MATH_ERRNO(0); 38 } 39 40 TEST_F(LlvmLibcCoshfTest, Overflow) { 41 LIBC_NAMESPACE::libc_errno = 0; 42 EXPECT_FP_EQ_WITH_EXCEPTION( 43 inf, LIBC_NAMESPACE::coshf(FPBits(0x7f7fffffU).get_val()), FE_OVERFLOW); 44 EXPECT_MATH_ERRNO(ERANGE); 45 46 EXPECT_FP_EQ_WITH_EXCEPTION( 47 inf, LIBC_NAMESPACE::coshf(FPBits(0x42cffff8U).get_val()), FE_OVERFLOW); 48 EXPECT_MATH_ERRNO(ERANGE); 49 50 EXPECT_FP_EQ_WITH_EXCEPTION( 51 inf, LIBC_NAMESPACE::coshf(FPBits(0x42d00008U).get_val()), FE_OVERFLOW); 52 EXPECT_MATH_ERRNO(ERANGE); 53 } 54 55 #ifdef LIBC_TEST_FTZ_DAZ 56 57 using namespace LIBC_NAMESPACE::testing; 58 59 TEST_F(LlvmLibcCoshfTest, FTZMode) { 60 ModifyMXCSR mxcsr(FTZ); 61 62 EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(min_denormal)); 63 EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(max_denormal)); 64 } 65 66 TEST_F(LlvmLibcCoshfTest, DAZMode) { 67 ModifyMXCSR mxcsr(DAZ); 68 69 EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(min_denormal)); 70 EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(max_denormal)); 71 } 72 73 TEST_F(LlvmLibcCoshfTest, FTZDAZMode) { 74 ModifyMXCSR mxcsr(FTZ | DAZ); 75 76 EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(min_denormal)); 77 EXPECT_FP_EQ(1.0f, LIBC_NAMESPACE::coshf(max_denormal)); 78 } 79 80 #endif 81