brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 5b40978 Raw
110 lines · cpp
1//===-- Unittests for shared math functions -------------------------------===//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 "shared/math.h"10#include "test/UnitTest/FPMatcher.h"11#include "test/UnitTest/Test.h"12 13#ifdef LIBC_TYPES_HAS_FLOAT1614 15TEST(LlvmLibcSharedMathTest, AllFloat16) {16  int exponent;17 18  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::acoshf16(1.0f16));19  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::acospif16(1.0f16));20  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::rsqrtf16(1.0f16));21 22  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::asinf16(0.0f16));23  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::asinhf16(0.0f16));24  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::atanf16(0.0f16));25  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::atanhf16(0.0f16));26  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::cosf16(0.0f16));27  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::coshf16(0.0f16));28  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::cospif16(0.0f16));29  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::exp10f16(0.0f16));30  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::exp10m1f16(0.0f16));31  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::exp2f16(0.0f16));32  EXPECT_FP_EQ(0x0p+0f16, LIBC_NAMESPACE::shared::exp2m1f16(0.0f16));33  EXPECT_FP_EQ(0x1p+0f16, LIBC_NAMESPACE::shared::expf16(0.0f16));34 35  ASSERT_FP_EQ(float16(8 << 5), LIBC_NAMESPACE::shared::ldexpf16(8.0f16, 5));36  ASSERT_FP_EQ(float16(-1 * (8 << 5)),37               LIBC_NAMESPACE::shared::ldexpf16(-8.0f16, 5));38 39  EXPECT_FP_EQ_ALL_ROUNDING(40      0.75f16, LIBC_NAMESPACE::shared::frexpf16(24.0f16, &exponent));41  EXPECT_EQ(exponent, 5);42 43  EXPECT_FP_EQ(0x1.921fb6p+0f16, LIBC_NAMESPACE::shared::acosf16(0.0f16));44}45 46#endif // LIBC_TYPES_HAS_FLOAT1647 48TEST(LlvmLibcSharedMathTest, AllFloat) {49  int exponent;50 51  EXPECT_FP_EQ(0x1.921fb6p+0, LIBC_NAMESPACE::shared::acosf(0.0f));52  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::acoshf(1.0f));53  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::asinf(0.0f));54  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::asinhf(0.0f));55  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::atan2f(0.0f, 0.0f));56  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::atanf(0.0f));57  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::atanhf(0.0f));58  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::cbrtf(0.0f));59  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::cosf(0.0f));60  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::coshf(0.0f));61  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::cospif(0.0f));62  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::exp10m1f(0.0f));63  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::erff(0.0f));64  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::exp10f(0.0f));65  EXPECT_FP_EQ(0x0p+0f, LIBC_NAMESPACE::shared::exp2m1f(0.0f));66  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::expf(0.0f));67  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::exp2f(0.0f));68 69  EXPECT_FP_EQ_ALL_ROUNDING(0.75f,70                            LIBC_NAMESPACE::shared::frexpf(24.0f, &exponent));71  EXPECT_EQ(exponent, 5);72 73  ASSERT_FP_EQ(float(8 << 5), LIBC_NAMESPACE::shared::ldexpf(8.0f, 5));74  ASSERT_FP_EQ(float(-1 * (8 << 5)), LIBC_NAMESPACE::shared::ldexpf(-8.0f, 5));75 76  EXPECT_FP_EQ(0x1p+0f, LIBC_NAMESPACE::shared::rsqrtf(1.0f));77}78 79TEST(LlvmLibcSharedMathTest, AllDouble) {80  EXPECT_FP_EQ(0x1.921fb54442d18p+0, LIBC_NAMESPACE::shared::acos(0.0));81  EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::asin(0.0));82  EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::atan(0.0));83  EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::atan2(0.0, 0.0));84  EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::cbrt(0.0));85  EXPECT_FP_EQ(0x1p+0, LIBC_NAMESPACE::shared::cos(0.0));86  EXPECT_FP_EQ(0x0p+0, LIBC_NAMESPACE::shared::dsqrtl(0.0));87  EXPECT_FP_EQ(0x1p+0, LIBC_NAMESPACE::shared::exp(0.0));88  EXPECT_FP_EQ(0x1p+0, LIBC_NAMESPACE::shared::exp2(0.0));89  EXPECT_FP_EQ(0x1p+0, LIBC_NAMESPACE::shared::exp10(0.0));90}91 92#ifdef LIBC_TYPES_HAS_FLOAT12893 94TEST(LlvmLibcSharedMathTest, AllFloat128) {95  int exponent;96 97  EXPECT_FP_EQ(float128(0x0p+0),98               LIBC_NAMESPACE::shared::atan2f128(float128(0.0), float128(0.0)));99  EXPECT_FP_EQ_ALL_ROUNDING(float128(0.75), LIBC_NAMESPACE::shared::frexpf128(100                                                float128(24), &exponent));101  EXPECT_EQ(exponent, 5);102 103  ASSERT_FP_EQ(float128(8 << 5),104               LIBC_NAMESPACE::shared::ldexpf128(float128(8), 5));105  ASSERT_FP_EQ(float128(-1 * (8 << 5)),106               LIBC_NAMESPACE::shared::ldexpf128(float128(-8), 5));107}108 109#endif // LIBC_TYPES_HAS_FLOAT128110