64 lines · cpp
1//===-- Unittests for atanpif16 -------------------------------------------===//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 "src/math/atanpif16.h"10#include "test/UnitTest/FPMatcher.h"11 12using LIBC_NAMESPACE::cpp::array;13using LlvmLibcAtanpif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;14 15TEST_F(LlvmLibcAtanpif16Test, SpecialNumbers) {16 // zero17 EXPECT_FP_EQ(zero, LIBC_NAMESPACE::atanpif16(zero));18 EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::atanpif16(neg_zero));19 20 // NaN inputs21 EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),22 LIBC_NAMESPACE::atanpif16(FPBits::quiet_nan().get_val()));23 24 EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::atanpif16(aNaN));25 26 // infinity inputs -> should return +/-0.527 EXPECT_FP_EQ(0.5f16, LIBC_NAMESPACE::atanpif16(inf));28 EXPECT_FP_EQ(-0.5f16, LIBC_NAMESPACE::atanpif16(neg_inf));29}30 31TEST_F(LlvmLibcAtanpif16Test, SymmetryProperty) {32 // Test that atanpi(-x) = -atanpi(x)33 constexpr array<float16, 12> TEST_VALS = {34 0.1f16, 0.25f16, 0.5f16, 0.75f16, 1.0f16, 1.5f16,35 2.0f16, 5.0f16, 10.0f16, 50.0f16, 100.0f16, 1000.0f16};36 37 for (float16 x : TEST_VALS) {38 FPBits neg_x_bits(x);39 neg_x_bits.set_sign(Sign::NEG);40 float16 neg_x = neg_x_bits.get_val();41 42 float16 pos_result = LIBC_NAMESPACE::atanpif16(x);43 float16 neg_result = LIBC_NAMESPACE::atanpif16(neg_x);44 45 EXPECT_FP_EQ(pos_result, FPBits(neg_result).abs().get_val());46 }47}48 49TEST_F(LlvmLibcAtanpif16Test, MonotonicityProperty) {50 // Test that atanpi is monotonically increasing51 constexpr array<float16, 15> TEST_VALS = {52 -1000.0f16, -100.0f16, -10.0f16, -2.0f16, -1.0f16,53 -0.5f16, -0.1f16, 0.0f16, 0.1f16, 0.5f16,54 1.0f16, 2.0f16, 10.0f16, 100.0f16, 1000.0f16};55 for (size_t i = 0; i < TEST_VALS.size() - 1; ++i) {56 float16 x1 = TEST_VALS[i];57 float16 x2 = TEST_VALS[i + 1];58 float16 result1 = LIBC_NAMESPACE::atanpif16(x1);59 float16 result2 = LIBC_NAMESPACE::atanpif16(x2);60 61 EXPECT_TRUE(result1 < result2);62 }63}64