xref: /llvm-project/libc/test/src/math/smoke/hypotf_test.cpp (revision 0f4b3c409fbd756d826c89d5539d9ea22bcc56aa)
184c899b2STue Ly //===-- Unittests for hypotf ----------------------------------------------===//
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 
984c899b2STue Ly #include "HypotTest.h"
1084c899b2STue Ly 
1184c899b2STue Ly #include "src/math/hypotf.h"
1284c899b2STue Ly 
1384c899b2STue Ly using LlvmLibcHypotfTest = HypotTestTemplate<float>;
1484c899b2STue Ly 
1584c899b2STue Ly TEST_F(LlvmLibcHypotfTest, SpecialNumbers) {
16b6bc9d72SGuillaume Chatelet   test_special_numbers(&LIBC_NAMESPACE::hypotf);
1784c899b2STue Ly }
18*0f4b3c40Slntue 
19*0f4b3c40Slntue #ifdef LIBC_TEST_FTZ_DAZ
20*0f4b3c40Slntue 
21*0f4b3c40Slntue using namespace LIBC_NAMESPACE::testing;
22*0f4b3c40Slntue 
23*0f4b3c40Slntue TEST_F(LlvmLibcHypotfTest, FTZMode) {
24*0f4b3c40Slntue   ModifyMXCSR mxcsr(FTZ);
25*0f4b3c40Slntue 
26*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, min_denormal));
27*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, max_denormal));
28*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, min_denormal));
29*0f4b3c40Slntue   EXPECT_FP_EQ(0x1.6a09e4p-126f,
30*0f4b3c40Slntue                LIBC_NAMESPACE::hypotf(max_denormal, max_denormal));
31*0f4b3c40Slntue }
32*0f4b3c40Slntue 
33*0f4b3c40Slntue TEST_F(LlvmLibcHypotfTest, DAZMode) {
34*0f4b3c40Slntue   ModifyMXCSR mxcsr(DAZ);
35*0f4b3c40Slntue 
36*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, min_denormal));
37*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, max_denormal));
38*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, min_denormal));
39*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, max_denormal));
40*0f4b3c40Slntue }
41*0f4b3c40Slntue 
42*0f4b3c40Slntue TEST_F(LlvmLibcHypotfTest, FTZDAZMode) {
43*0f4b3c40Slntue   ModifyMXCSR mxcsr(FTZ | DAZ);
44*0f4b3c40Slntue 
45*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, min_denormal));
46*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(min_denormal, max_denormal));
47*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, min_denormal));
48*0f4b3c40Slntue   EXPECT_FP_EQ(0.0f, LIBC_NAMESPACE::hypotf(max_denormal, max_denormal));
49*0f4b3c40Slntue }
50*0f4b3c40Slntue 
51*0f4b3c40Slntue #endif
52