brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 9589901 Raw
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