65 lines · cpp
1//===-- Unittests for acos ------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "hdr/errno_macros.h"10#include "hdr/fenv_macros.h"11#include "src/math/acos.h"12#include "test/UnitTest/FPMatcher.h"13#include "test/UnitTest/Test.h"14 15using LlvmLibcAcosTest = LIBC_NAMESPACE::testing::FPTest<double>;16 17TEST_F(LlvmLibcAcosTest, SpecialNumbers) {18 EXPECT_FP_EQ_WITH_EXCEPTION_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::acos(sNaN),19 FE_INVALID);20 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::acos(aNaN));21 EXPECT_MATH_ERRNO(0);22 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::acos(zero));23 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::acos(neg_zero));24 25 EXPECT_FP_EQ_WITH_EXCEPTION_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::acos(inf),26 FE_INVALID);27 EXPECT_MATH_ERRNO(EDOM);28 EXPECT_FP_EQ_WITH_EXCEPTION_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::acos(neg_inf),29 FE_INVALID);30 EXPECT_MATH_ERRNO(EDOM);31 EXPECT_FP_EQ_WITH_EXCEPTION_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::acos(2.0),32 FE_INVALID);33 EXPECT_MATH_ERRNO(EDOM);34 EXPECT_FP_EQ_WITH_EXCEPTION_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::acos(-2.0),35 FE_INVALID);36 EXPECT_MATH_ERRNO(EDOM);37 EXPECT_FP_EQ(zero, LIBC_NAMESPACE::acos(1.0));38 EXPECT_FP_EQ(0x1.921fb54442d18p1, LIBC_NAMESPACE::acos(-1.0));39 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::acos(0x1.0p-54));40}41 42#ifdef LIBC_TEST_FTZ_DAZ43 44using namespace LIBC_NAMESPACE::testing;45 46TEST_F(LlvmLibcAcosTest, FTZMode) {47 ModifyMXCSR mxcsr(FTZ);48 49 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::acos(min_denormal));50}51 52TEST_F(LlvmLibcAcosTest, DAZMode) {53 ModifyMXCSR mxcsr(DAZ);54 55 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::acos(min_denormal));56}57 58TEST_F(LlvmLibcAcosTest, FTZDAZMode) {59 ModifyMXCSR mxcsr(FTZ | DAZ);60 61 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::acos(min_denormal));62}63 64#endif65