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