xref: /llvm-project/libc/test/src/math/smoke/erff_test.cpp (revision 0f4b3c409fbd756d826c89d5539d9ea22bcc56aa)
184c899b2STue Ly //===-- Unittests for erff ------------------------------------------------===//
284c899b2STue Ly //
384c899b2STue Ly // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
484c899b2STue Ly // See https://llvm.org/LICENSE.txt for license information.
584c899b2STue Ly // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
684c899b2STue Ly //
784c899b2STue Ly //===----------------------------------------------------------------------===//
884c899b2STue Ly 
95748ad84Slntue #include "hdr/math_macros.h"
1084c899b2STue Ly #include "src/__support/FPUtil/FPBits.h"
1184c899b2STue Ly #include "src/math/erff.h"
1284c899b2STue Ly #include "test/UnitTest/FPMatcher.h"
1384c899b2STue Ly #include "test/UnitTest/Test.h"
1484c899b2STue Ly 
1584c899b2STue Ly #include <stdint.h>
1684c899b2STue Ly 
173fd5113cSlntue using LlvmLibcErffTest = LIBC_NAMESPACE::testing::FPTest<float>;
1884c899b2STue Ly 
193fd5113cSlntue TEST_F(LlvmLibcErffTest, SpecialNumbers) {
20b6bc9d72SGuillaume Chatelet   EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::erff(aNaN));
21b6bc9d72SGuillaume Chatelet   EXPECT_FP_EQ_ALL_ROUNDING(1.0f, LIBC_NAMESPACE::erff(inf));
22b6bc9d72SGuillaume Chatelet   EXPECT_FP_EQ_ALL_ROUNDING(-1.0f, LIBC_NAMESPACE::erff(neg_inf));
23b6bc9d72SGuillaume Chatelet   EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::erff(zero));
24b6bc9d72SGuillaume Chatelet   EXPECT_FP_EQ_ALL_ROUNDING(neg_zero, LIBC_NAMESPACE::erff(neg_zero));
2584c899b2STue Ly }
26*0f4b3c40Slntue 
27*0f4b3c40Slntue #ifdef LIBC_TEST_FTZ_DAZ
28*0f4b3c40Slntue 
29*0f4b3c40Slntue using namespace LIBC_NAMESPACE::testing;
30*0f4b3c40Slntue 
31*0f4b3c40Slntue TEST_F(LlvmLibcErffTest, FTZMode) {
32*0f4b3c40Slntue   ModifyMXCSR mxcsr(FTZ);
33*0f4b3c40Slntue 
34*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(min_denormal));
35*0f4b3c40Slntue   EXPECT_FP_EQ(0x1.20dd72p-126f, LIBC_NAMESPACE::erff(max_denormal));
36*0f4b3c40Slntue }
37*0f4b3c40Slntue 
38*0f4b3c40Slntue TEST_F(LlvmLibcErffTest, DAZMode) {
39*0f4b3c40Slntue   ModifyMXCSR mxcsr(DAZ);
40*0f4b3c40Slntue 
41*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(min_denormal));
42*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(max_denormal));
43*0f4b3c40Slntue }
44*0f4b3c40Slntue 
45*0f4b3c40Slntue TEST_F(LlvmLibcErffTest, FTZDAZMode) {
46*0f4b3c40Slntue   ModifyMXCSR mxcsr(FTZ | DAZ);
47*0f4b3c40Slntue 
48*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(min_denormal));
49*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::erff(max_denormal));
50*0f4b3c40Slntue }
51*0f4b3c40Slntue 
52*0f4b3c40Slntue #endif
53