Skip to content

Commit 6b9534f

Browse files
committed
move old test to smoke
1 parent bf172b1 commit 6b9534f

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

libc/test/src/math/smoke/CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3982,6 +3982,19 @@ add_fp_unittest(
39823982
libc.src.math.asinhf16
39833983
)
39843984

3985+
add_fp_unittest(
3986+
asinpif16_test
3987+
NEED_MPFR
3988+
SUITE
3989+
libc-math-unittests
3990+
SRCS
3991+
asinpif16_test.cpp
3992+
DEPENDS
3993+
libc.src.math.fabs
3994+
libc.src.math.asinpif16
3995+
libc.src.__support.FPUtil.fp_bits
3996+
)
3997+
39853998
add_fp_unittest(
39863999
acoshf_test
39874000
SUITE
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "src/math/asinpif16.h"
10+
#include "src/math/fabs.h"
11+
#include "test/UnitTest/FPMatcher.h"
12+
13+
using LlvmLibcAsinpif16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
14+
15+
TEST_F(LlvmLibcAsinpif16Test, SpecialNumbers) {
16+
using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
17+
18+
// zero
19+
EXPECT_FP_EQ(0.0f16, LIBC_NAMESPACE::asinpif16(0.0f16));
20+
21+
// +/-1
22+
EXPECT_FP_EQ(float16(0.5), LIBC_NAMESPACE::asinpif16(float16(1.0)));
23+
EXPECT_FP_EQ(float16(-0.5), LIBC_NAMESPACE::asinpif16(float16(-1.0)));
24+
25+
// NaN inputs
26+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
27+
LIBC_NAMESPACE::asinpif16(FPBits::quiet_nan().get_val()));
28+
29+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
30+
LIBC_NAMESPACE::asinpif16(FPBits::signaling_nan().get_val()));
31+
32+
// infinity inputs -> should return NaN
33+
errno = 0;
34+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(), LIBC_NAMESPACE::asinpif16(inf));
35+
EXPECT_MATH_ERRNO(EDOM);
36+
37+
errno = 0;
38+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
39+
LIBC_NAMESPACE::asinpif16(neg_inf));
40+
EXPECT_MATH_ERRNO(EDOM);
41+
}
42+
43+
TEST_F(LlvmLibcAsinpif16Test, OutOfRange) {
44+
using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
45+
46+
// Test values > 1
47+
errno = 0;
48+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
49+
LIBC_NAMESPACE::asinpif16(float16(1.5)));
50+
EXPECT_MATH_ERRNO(EDOM);
51+
52+
errno = 0;
53+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
54+
LIBC_NAMESPACE::asinpif16(float16(2.0)));
55+
EXPECT_MATH_ERRNO(EDOM);
56+
57+
// Test values < -1
58+
errno = 0;
59+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
60+
LIBC_NAMESPACE::asinpif16(float16(-1.5)));
61+
EXPECT_MATH_ERRNO(EDOM);
62+
63+
errno = 0;
64+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
65+
LIBC_NAMESPACE::asinpif16(float16(-2.0)));
66+
EXPECT_MATH_ERRNO(EDOM);
67+
68+
// Test maximum normal value (should be > 1 for float16)
69+
errno = 0;
70+
EXPECT_FP_EQ(FPBits::quiet_nan().get_val(),
71+
LIBC_NAMESPACE::asinpif16(FPBits::max_normal().get_val()));
72+
EXPECT_MATH_ERRNO(EDOM);
73+
}
74+
75+
TEST_F(LlvmLibcAsinpif16Test, SymmetryProperty) {
76+
// Test that asinpi(-x) = -asinpi(x)
77+
constexpr float16 test_vals[] = {0.1f16, 0.25f16, 0.5f16, 0.75f16,
78+
0.9f16, 0.99f16, 1.0f16};
79+
80+
for (float16 x : test_vals) {
81+
if (x <= 1.0) {
82+
float16 pos_result = LIBC_NAMESPACE::asinpif16(x);
83+
float16 neg_result = LIBC_NAMESPACE::asinpif16(-x);
84+
85+
EXPECT_FP_EQ(pos_result,
86+
static_cast<float16>(LIBC_NAMESPACE::fabs(neg_result)));
87+
}
88+
}
89+
}

0 commit comments

Comments
 (0)