mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 09:34:42 +01:00
[libc][NFC][Obvious] Convert the MPFR operations enum to an enum class.
This was suggested in https://reviews.llvm.org/D79149.
This commit is contained in:
@@ -80,7 +80,7 @@ TEST(CosfTest, InFloatRange) {
|
||||
float x = valueFromBits(v);
|
||||
if (isnan(x) || isinf(x))
|
||||
continue;
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Cos, x, __llvm_libc::cosf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Cos, x, __llvm_libc::cosf(x), tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,12 +88,12 @@ TEST(CosfTest, InFloatRange) {
|
||||
TEST(CosfTest, SmallValues) {
|
||||
float x = valueFromBits(0x17800000U);
|
||||
float result = __llvm_libc::cosf(x);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Cos, x, result, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Cos, x, result, tolerance);
|
||||
EXPECT_EQ(BitPatterns::one, valueAsBits(result));
|
||||
|
||||
x = valueFromBits(0x0040000U);
|
||||
result = __llvm_libc::cosf(x);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Cos, x, result, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Cos, x, result, tolerance);
|
||||
EXPECT_EQ(BitPatterns::one, valueAsBits(result));
|
||||
}
|
||||
|
||||
@@ -102,6 +102,6 @@ TEST(CosfTest, SmallValues) {
|
||||
TEST(CosfTest, SDCOMP_26094) {
|
||||
for (uint32_t v : sdcomp26094Values) {
|
||||
float x = valueFromBits(v);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Cos, x, __llvm_libc::cosf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Cos, x, __llvm_libc::cosf(x), tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,27 +92,27 @@ TEST(ExpfTest, Borderline) {
|
||||
|
||||
llvmlibc_errno = 0;
|
||||
x = valueFromBits(0x42fa0001U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0x42ffffffU);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0xc2fa0001U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0xc2fc0000U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0xc2fc0001U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0xc3150000U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
}
|
||||
|
||||
@@ -124,12 +124,12 @@ TEST(ExpfTest, Underflow) {
|
||||
|
||||
llvmlibc_errno = 0;
|
||||
float x = valueFromBits(0xc3158000U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, ERANGE);
|
||||
|
||||
llvmlibc_errno = 0;
|
||||
x = valueFromBits(0xc3165432U);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, ERANGE);
|
||||
}
|
||||
|
||||
@@ -149,6 +149,7 @@ TEST(exp2fTest, InFloatRange) {
|
||||
// wider precision.
|
||||
if (isnan(result) || isinf(result) || llvmlibc_errno != 0)
|
||||
continue;
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Exp2, x, __llvm_libc::exp2f(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Exp2, x, __llvm_libc::exp2f(x),
|
||||
tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,19 +109,19 @@ TEST(ExpfTest, Borderline) {
|
||||
|
||||
llvmlibc_errno = 0;
|
||||
x = valueFromBits(0x42affff8U);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0x42b00008U);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0xc2affff8U);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
|
||||
x = valueFromBits(0xc2b00008U);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
EXPECT_EQ(llvmlibc_errno, 0);
|
||||
}
|
||||
|
||||
@@ -141,6 +141,6 @@ TEST(ExpfTest, InFloatRange) {
|
||||
// wider precision.
|
||||
if (isnan(result) || isinf(result) || llvmlibc_errno != 0)
|
||||
continue;
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Exp, x, __llvm_libc::expf(x), tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,6 @@ TEST(FabsTest, InDoubleRange) {
|
||||
double x = valueFromBits(v);
|
||||
if (isnan(x) || isinf(x))
|
||||
continue;
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Abs, x, __llvm_libc::fabs(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Abs, x, __llvm_libc::fabs(x), tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ TEST(FabsfTest, InFloatRange) {
|
||||
double x = valueFromBits(v);
|
||||
if (isnan(x) || isinf(x))
|
||||
continue;
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Abs, x, __llvm_libc::fabsf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Abs, x, __llvm_libc::fabsf(x),
|
||||
tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,8 +95,8 @@ TEST(SinCosfTest, InFloatRange) {
|
||||
|
||||
float sin, cos;
|
||||
__llvm_libc::sincosf(x, &sin, &cos);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Cos, x, cos, tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Sin, x, sin, tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Cos, x, cos, tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Sin, x, sin, tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,16 +106,16 @@ TEST(SinCosfTest, SmallValues) {
|
||||
float x = valueFromBits(bits);
|
||||
float result_cos, result_sin;
|
||||
__llvm_libc::sincosf(x, &result_sin, &result_cos);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Cos, x, result_cos, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, result_sin, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Cos, x, result_cos, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, result_sin, tolerance);
|
||||
EXPECT_EQ(BitPatterns::one, valueAsBits(result_cos));
|
||||
EXPECT_EQ(bits, valueAsBits(result_sin));
|
||||
|
||||
bits = 0x00400000;
|
||||
x = valueFromBits(bits);
|
||||
__llvm_libc::sincosf(x, &result_sin, &result_cos);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Cos, x, result_cos, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, result_sin, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Cos, x, result_cos, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, result_sin, tolerance);
|
||||
EXPECT_EQ(BitPatterns::one, valueAsBits(result_cos));
|
||||
EXPECT_EQ(bits, valueAsBits(result_sin));
|
||||
}
|
||||
@@ -127,7 +127,7 @@ TEST(SinCosfTest, SDCOMP_26094) {
|
||||
float x = valueFromBits(v);
|
||||
float sin, cos;
|
||||
__llvm_libc::sincosf(x, &sin, &cos);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Cos, x, cos, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, sin, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Cos, x, cos, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, sin, tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,13 +80,13 @@ TEST(SinfTest, InFloatRange) {
|
||||
float x = valueFromBits(v);
|
||||
if (isnan(x) || isinf(x))
|
||||
continue;
|
||||
ASSERT_MPFR_MATCH(mpfr::OP_Sin, x, __llvm_libc::sinf(x), tolerance);
|
||||
ASSERT_MPFR_MATCH(mpfr::Operation::Sin, x, __llvm_libc::sinf(x), tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(SinfTest, SpecificBitPatterns) {
|
||||
float x = valueFromBits(0xc70d39a1);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, __llvm_libc::sinf(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, __llvm_libc::sinf(x), tolerance);
|
||||
}
|
||||
|
||||
// For small values, sin(x) is x.
|
||||
@@ -94,13 +94,13 @@ TEST(SinfTest, SmallValues) {
|
||||
uint32_t bits = 0x17800000;
|
||||
float x = valueFromBits(bits);
|
||||
float result = __llvm_libc::sinf(x);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, result, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, result, tolerance);
|
||||
EXPECT_EQ(bits, valueAsBits(result));
|
||||
|
||||
bits = 0x00400000;
|
||||
x = valueFromBits(bits);
|
||||
result = __llvm_libc::sinf(x);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, result, tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, result, tolerance);
|
||||
EXPECT_EQ(bits, valueAsBits(result));
|
||||
}
|
||||
|
||||
@@ -109,6 +109,6 @@ TEST(SinfTest, SmallValues) {
|
||||
TEST(SinfTest, SDCOMP_26094) {
|
||||
for (uint32_t v : sdcomp26094Values) {
|
||||
float x = valueFromBits(v);
|
||||
EXPECT_MPFR_MATCH(mpfr::OP_Sin, x, __llvm_libc::sinf(x), tolerance);
|
||||
EXPECT_MPFR_MATCH(mpfr::Operation::Sin, x, __llvm_libc::sinf(x), tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,21 +86,21 @@ public:
|
||||
mpfr_init2(value, mpfrPrecision);
|
||||
MPFRNumber mpfrInput(rawValue);
|
||||
switch (op) {
|
||||
case OP_Abs:
|
||||
case Operation::Abs:
|
||||
mpfr_abs(value, mpfrInput.value, MPFR_RNDN);
|
||||
break;
|
||||
case OP_Cos:
|
||||
case Operation::Cos:
|
||||
mpfr_cos(value, mpfrInput.value, MPFR_RNDN);
|
||||
break;
|
||||
case OP_Sin:
|
||||
mpfr_sin(value, mpfrInput.value, MPFR_RNDN);
|
||||
break;
|
||||
case OP_Exp:
|
||||
case Operation::Exp:
|
||||
mpfr_exp(value, mpfrInput.value, MPFR_RNDN);
|
||||
break;
|
||||
case OP_Exp2:
|
||||
case Operation::Exp2:
|
||||
mpfr_exp2(value, mpfrInput.value, MPFR_RNDN);
|
||||
break;
|
||||
case Operation::Sin:
|
||||
mpfr_sin(value, mpfrInput.value, MPFR_RNDN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ struct Tolerance {
|
||||
uint32_t bits;
|
||||
};
|
||||
|
||||
enum Operation { OP_Abs, OP_Cos, OP_Sin, OP_Exp, OP_Exp2 };
|
||||
enum class Operation : int { Abs, Cos, Exp, Exp2, Sin };
|
||||
|
||||
namespace internal {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user