72 lines · cpp
1//===-- Unittests for atan2 -----------------------------------------------===//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/atan2.h"10#include "test/UnitTest/FPMatcher.h"11#include "test/UnitTest/Test.h"12 13using LlvmLibcAtan2Test = LIBC_NAMESPACE::testing::FPTest<double>;14 15TEST_F(LlvmLibcAtan2Test, SpecialNumbers) {16 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::atan2(sNaN, sNaN),17 FE_INVALID);18 EXPECT_MATH_ERRNO(0);19 20 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::atan2(sNaN, 1.0),21 FE_INVALID);22 EXPECT_MATH_ERRNO(0);23 24 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::atan2(1.0, sNaN),25 FE_INVALID);26 EXPECT_MATH_ERRNO(0);27 28 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::atan2(aNaN, zero));29 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::atan2(1.0, aNaN));30 EXPECT_FP_EQ_ALL_ROUNDING(0.0, LIBC_NAMESPACE::atan2(zero, zero));31 EXPECT_FP_EQ_ALL_ROUNDING(-0.0, LIBC_NAMESPACE::atan2(-0.0, zero));32 EXPECT_FP_EQ_ALL_ROUNDING(0.0, LIBC_NAMESPACE::atan2(1.0, inf));33 EXPECT_FP_EQ_ALL_ROUNDING(-0.0, LIBC_NAMESPACE::atan2(-1.0, inf));34}35 36#ifdef LIBC_TEST_FTZ_DAZ37 38using namespace LIBC_NAMESPACE::testing;39 40TEST_F(LlvmLibcAtan2Test, FTZMode) {41 ModifyMXCSR mxcsr(FTZ);42 43 EXPECT_FP_EQ(0x1.921fb54442d18p-1,44 LIBC_NAMESPACE::atan2(min_denormal, min_denormal));45 EXPECT_FP_EQ(0x1.0000000000001p-52,46 LIBC_NAMESPACE::atan2(min_denormal, max_denormal));47 EXPECT_FP_EQ(0x1.921fb54442d17p0,48 LIBC_NAMESPACE::atan2(max_denormal, min_denormal));49 EXPECT_FP_EQ(0x1.921fb54442d18p-1,50 LIBC_NAMESPACE::atan2(max_denormal, max_denormal));51}52 53TEST_F(LlvmLibcAtan2Test, DAZMode) {54 ModifyMXCSR mxcsr(DAZ);55 56 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, min_denormal));57 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, max_denormal));58 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, min_denormal));59 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, max_denormal));60}61 62TEST_F(LlvmLibcAtan2Test, FTZDAZMode) {63 ModifyMXCSR mxcsr(FTZ | DAZ);64 65 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, min_denormal));66 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(min_denormal, max_denormal));67 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, min_denormal));68 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::atan2(max_denormal, max_denormal));69}70 71#endif72