57 lines · cpp
1//===-- Unittests for asin ------------------------------------------------===//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/fenv_macros.h"10#include "src/math/asin.h"11#include "test/UnitTest/FPMatcher.h"12#include "test/UnitTest/Test.h"13 14using LlvmLibcAsinTest = LIBC_NAMESPACE::testing::FPTest<double>;15 16TEST_F(LlvmLibcAsinTest, SpecialNumbers) {17 EXPECT_FP_EQ_WITH_EXCEPTION_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::asin(sNaN),18 FE_INVALID);19 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::asin(aNaN));20 EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::asin(zero));21 EXPECT_FP_EQ_ALL_ROUNDING(neg_zero, LIBC_NAMESPACE::asin(neg_zero));22 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::asin(inf));23 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::asin(neg_inf));24 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::asin(2.0));25 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::asin(-2.0));26 EXPECT_FP_EQ(0x1.921fb54442d18p0, LIBC_NAMESPACE::asin(1.0));27 EXPECT_FP_EQ(-0x1.921fb54442d18p0, LIBC_NAMESPACE::asin(-1.0));28}29 30#ifdef LIBC_TEST_FTZ_DAZ31 32using namespace LIBC_NAMESPACE::testing;33 34// With FTZ/DAZ flags are set, when the inputs are denormal, the output bit35// pattern might not be exactly 0, but they should all be equal to 0 as floating36// points.37 38TEST_F(LlvmLibcAsinTest, FTZMode) {39 ModifyMXCSR mxcsr(FTZ);40 41 EXPECT_TRUE(zero == LIBC_NAMESPACE::asin(min_denormal));42}43 44TEST_F(LlvmLibcAsinTest, DAZMode) {45 ModifyMXCSR mxcsr(DAZ);46 47 EXPECT_TRUE(zero == LIBC_NAMESPACE::asin(min_denormal));48}49 50TEST_F(LlvmLibcAsinTest, FTZDAZMode) {51 ModifyMXCSR mxcsr(FTZ | DAZ);52 53 EXPECT_TRUE(zero == LIBC_NAMESPACE::asin(min_denormal));54}55 56#endif57