74 lines · cpp
1//===-- Unittests for asinpif16 -------------------------------------------===//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 "src/math/asinpif16.h"11#include "test/UnitTest/FPMatcher.h"12 13using LlvmLibcAsinpif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;14 15TEST_F(LlvmLibcAsinpif16Test, SpecialNumbers) {16 // zero17 EXPECT_FP_EQ(zero, LIBC_NAMESPACE::asinpif16(zero));18 19 // +/-120 EXPECT_FP_EQ(0.5f16, LIBC_NAMESPACE::asinpif16(1.0));21 EXPECT_FP_EQ(-0.5f16, LIBC_NAMESPACE::asinpif16(-1.0));22 23 // NaN inputs24 EXPECT_FP_IS_NAN(LIBC_NAMESPACE::asinpif16(aNaN));25 26 EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(sNaN), FE_INVALID);27 EXPECT_MATH_ERRNO(0);28 29 // infinity inputs -> should return NaN30 EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(inf), FE_INVALID);31 EXPECT_MATH_ERRNO(EDOM);32 33 EXPECT_FP_IS_NAN_WITH_EXCEPTION(LIBC_NAMESPACE::asinpif16(neg_inf),34 FE_INVALID);35 EXPECT_MATH_ERRNO(EDOM);36}37 38TEST_F(LlvmLibcAsinpif16Test, OutOfRange) {39 // Test values > 140 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(1.5f16));41 EXPECT_MATH_ERRNO(EDOM);42 43 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(2.0f16));44 EXPECT_MATH_ERRNO(EDOM);45 46 // Test values < -147 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(-1.5f16));48 EXPECT_MATH_ERRNO(EDOM);49 50 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(-2.0f16));51 EXPECT_MATH_ERRNO(EDOM);52 53 // Test maximum normal value (should be > 1 for float16)54 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::asinpif16(FPBits::max_normal().get_val()));55 EXPECT_MATH_ERRNO(EDOM);56}57 58TEST_F(LlvmLibcAsinpif16Test, SymmetryProperty) {59 // Test that asinpi(-x) = -asinpi(x)60 constexpr float16 TEST_VALS[] = {0.1f16, 0.25f16, 0.5f16, 0.75f16,61 0.9f16, 0.99f16, 1.0f16};62 63 for (float16 x : TEST_VALS) {64 FPBits neg_x_bits(x);65 neg_x_bits.set_sign(Sign::NEG);66 float16 neg_x = neg_x_bits.get_val();67 68 float16 pos_result = LIBC_NAMESPACE::asinpif16(x);69 float16 neg_result = LIBC_NAMESPACE::asinpif16(neg_x);70 71 EXPECT_FP_EQ(pos_result, FPBits(neg_result).abs().get_val());72 }73}74