brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · a79845f Raw
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