68 lines · cpp
1//===-- Unittests for cbrt ------------------------------------------------===//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/cbrt.h"10#include "test/UnitTest/FPMatcher.h"11#include "test/UnitTest/Test.h"12 13using LlvmLibcCbrtTest = LIBC_NAMESPACE::testing::FPTest<double>;14 15using LIBC_NAMESPACE::testing::tlog;16 17TEST_F(LlvmLibcCbrtTest, SpecialNumbers) {18 EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::cbrt(sNaN), FE_INVALID);19 EXPECT_MATH_ERRNO(0);20 21 EXPECT_FP_EQ_ALL_ROUNDING(aNaN, LIBC_NAMESPACE::cbrt(aNaN));22 EXPECT_FP_EQ_ALL_ROUNDING(inf, LIBC_NAMESPACE::cbrt(inf));23 EXPECT_FP_EQ_ALL_ROUNDING(neg_inf, LIBC_NAMESPACE::cbrt(neg_inf));24 EXPECT_FP_EQ_ALL_ROUNDING(zero, LIBC_NAMESPACE::cbrt(zero));25 EXPECT_FP_EQ_ALL_ROUNDING(neg_zero, LIBC_NAMESPACE::cbrt(neg_zero));26 EXPECT_FP_EQ_ALL_ROUNDING(1.0, LIBC_NAMESPACE::cbrt(1.0));27 EXPECT_FP_EQ_ALL_ROUNDING(-1.0, LIBC_NAMESPACE::cbrt(-1.0));28 EXPECT_FP_EQ_ALL_ROUNDING(2.0, LIBC_NAMESPACE::cbrt(8.0));29 EXPECT_FP_EQ_ALL_ROUNDING(-2.0, LIBC_NAMESPACE::cbrt(-8.0));30 EXPECT_FP_EQ_ALL_ROUNDING(3.0, LIBC_NAMESPACE::cbrt(27.0));31 EXPECT_FP_EQ_ALL_ROUNDING(-3.0, LIBC_NAMESPACE::cbrt(-27.0));32 EXPECT_FP_EQ_ALL_ROUNDING(5.0, LIBC_NAMESPACE::cbrt(125.0));33 EXPECT_FP_EQ_ALL_ROUNDING(-5.0, LIBC_NAMESPACE::cbrt(-125.0));34 EXPECT_FP_EQ_ALL_ROUNDING(0x1.0p42, LIBC_NAMESPACE::cbrt(0x1.0p126));35 EXPECT_FP_EQ_ALL_ROUNDING(-0x1.0p42, LIBC_NAMESPACE::cbrt(-0x1.0p126));36 EXPECT_FP_EQ_ALL_ROUNDING(0x1.0p341, LIBC_NAMESPACE::cbrt(0x1.0p1023));37 EXPECT_FP_EQ_ALL_ROUNDING(-0x1.0p341, LIBC_NAMESPACE::cbrt(-0x1.0p1023));38 EXPECT_FP_EQ(-0x1.0p-340, LIBC_NAMESPACE::cbrt(-0x1.fffffffffffffp-1021));39 EXPECT_FP_EQ(2.0, LIBC_NAMESPACE::cbrt(0x1.fffffffffffffp2));40}41 42#ifdef LIBC_TEST_FTZ_DAZ43 44using namespace LIBC_NAMESPACE::testing;45 46TEST_F(LlvmLibcCbrtTest, FTZMode) {47 ModifyMXCSR mxcsr(FTZ);48 49 EXPECT_FP_EQ(0x1.0p-358, LIBC_NAMESPACE::cbrt(min_denormal));50 EXPECT_FP_EQ(0x1.428a2f98d728ap-341, LIBC_NAMESPACE::cbrt(max_denormal));51}52 53TEST_F(LlvmLibcCbrtTest, DAZMode) {54 ModifyMXCSR mxcsr(DAZ);55 56 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(min_denormal));57 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(max_denormal));58}59 60TEST_F(LlvmLibcCbrtTest, FTZDAZMode) {61 ModifyMXCSR mxcsr(FTZ | DAZ);62 63 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(min_denormal));64 EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::cbrt(max_denormal));65}66 67#endif68