Skip to content

Commit 01b99c6

Browse files
author
Siva Chandra
committed
[libc][obvious] Switch nearest integer function tests to the new matchers.
1 parent d73be5a commit 01b99c6

12 files changed

+559
-454
lines changed

libc/test/src/math/ceil_test.cpp

Lines changed: 53 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,67 +8,76 @@
88

99
#include "include/math.h"
1010
#include "src/math/ceil.h"
11-
#include "utils/FPUtil/BitPatterns.h"
12-
#include "utils/FPUtil/FloatOperations.h"
13-
#include "utils/FPUtil/FloatProperties.h"
11+
#include "utils/FPUtil/FPBits.h"
12+
#include "utils/FPUtil/TestHelpers.h"
1413
#include "utils/MPFRWrapper/MPFRUtils.h"
1514
#include "utils/UnitTest/Test.h"
1615

17-
using __llvm_libc::fputil::valueAsBits;
18-
using __llvm_libc::fputil::valueFromBits;
19-
20-
using BitPatterns = __llvm_libc::fputil::BitPatterns<double>;
21-
using Properties = __llvm_libc::fputil::FloatProperties<double>;
16+
using FPBits = __llvm_libc::fputil::FPBits<double>;
2217

2318
namespace mpfr = __llvm_libc::testing::mpfr;
2419

20+
static const double zero = FPBits::zero();
21+
static const double negZero = FPBits::negZero();
22+
static const double nan = FPBits::buildNaN(1);
23+
static const double inf = FPBits::inf();
24+
static const double negInf = FPBits::negInf();
25+
2526
// Zero tolerance; As in, exact match with MPFR result.
26-
static constexpr mpfr::Tolerance tolerance{mpfr::Tolerance::doublePrecision, 0,
27+
static constexpr mpfr::Tolerance tolerance{mpfr::Tolerance::floatPrecision, 0,
2728
0};
29+
TEST(CeilTest, SpecialNumbers) {
30+
EXPECT_FP_EQ(zero, __llvm_libc::ceil(zero));
31+
EXPECT_FP_EQ(negZero, __llvm_libc::ceil(negZero));
2832

29-
TEST(ceilTest, SpecialNumbers) {
30-
EXPECT_EQ(
31-
BitPatterns::aQuietNaN,
32-
valueAsBits(__llvm_libc::ceil(valueFromBits(BitPatterns::aQuietNaN))));
33-
EXPECT_EQ(BitPatterns::aNegativeQuietNaN,
34-
valueAsBits(__llvm_libc::ceil(
35-
valueFromBits(BitPatterns::aNegativeQuietNaN))));
36-
37-
EXPECT_EQ(BitPatterns::aSignallingNaN,
38-
valueAsBits(
39-
__llvm_libc::ceil(valueFromBits(BitPatterns::aSignallingNaN))));
40-
EXPECT_EQ(BitPatterns::aNegativeSignallingNaN,
41-
valueAsBits(__llvm_libc::ceil(
42-
valueFromBits(BitPatterns::aNegativeSignallingNaN))));
33+
EXPECT_FP_EQ(inf, __llvm_libc::ceil(inf));
34+
EXPECT_FP_EQ(negInf, __llvm_libc::ceil(negInf));
4335

44-
EXPECT_EQ(BitPatterns::inf,
45-
valueAsBits(__llvm_libc::ceil(valueFromBits(BitPatterns::inf))));
46-
EXPECT_EQ(BitPatterns::negInf,
47-
valueAsBits(__llvm_libc::ceil(valueFromBits(BitPatterns::negInf))));
36+
ASSERT_NE(isnan(nan), 0);
37+
ASSERT_NE(isnan(__llvm_libc::ceil(nan)), 0);
38+
}
4839

49-
EXPECT_EQ(BitPatterns::zero,
50-
valueAsBits(__llvm_libc::ceil(valueFromBits(BitPatterns::zero))));
51-
EXPECT_EQ(BitPatterns::negZero, valueAsBits(__llvm_libc::ceil(
52-
valueFromBits(BitPatterns::negZero))));
40+
TEST(CeilTest, RoundedNumbers) {
41+
EXPECT_FP_EQ(1.0, __llvm_libc::ceil(1.0));
42+
EXPECT_FP_EQ(-1.0, __llvm_libc::ceil(-1.0));
43+
EXPECT_FP_EQ(10.0, __llvm_libc::ceil(10.0));
44+
EXPECT_FP_EQ(-10.0, __llvm_libc::ceil(-10.0));
45+
EXPECT_FP_EQ(1234.0, __llvm_libc::ceil(1234.0));
46+
EXPECT_FP_EQ(-1234.0, __llvm_libc::ceil(-1234.0));
5347
}
5448

55-
TEST(ceilTest, RoundedNumbers) {
56-
EXPECT_EQ(valueAsBits(1.0), valueAsBits(__llvm_libc::ceil(1.0)));
57-
EXPECT_EQ(valueAsBits(-1.0), valueAsBits(__llvm_libc::ceil(-1.0)));
58-
EXPECT_EQ(valueAsBits(10.0), valueAsBits(__llvm_libc::ceil(10.0)));
59-
EXPECT_EQ(valueAsBits(-10.0), valueAsBits(__llvm_libc::ceil(-10.0)));
60-
EXPECT_EQ(valueAsBits(12345.0), valueAsBits(__llvm_libc::ceil(12345.0)));
61-
EXPECT_EQ(valueAsBits(-12345.0), valueAsBits(__llvm_libc::ceil(-12345.0)));
49+
TEST(CeilTest, Fractions) {
50+
EXPECT_FP_EQ(1.0, __llvm_libc::ceil(0.5));
51+
EXPECT_FP_EQ(-0.0, __llvm_libc::ceil(-0.5));
52+
EXPECT_FP_EQ(1.0, __llvm_libc::ceil(0.115));
53+
EXPECT_FP_EQ(-0.0, __llvm_libc::ceil(-0.115));
54+
EXPECT_FP_EQ(1.0, __llvm_libc::ceil(0.715));
55+
EXPECT_FP_EQ(-0.0, __llvm_libc::ceil(-0.715));
56+
EXPECT_FP_EQ(2.0, __llvm_libc::ceil(1.3));
57+
EXPECT_FP_EQ(-1.0, __llvm_libc::ceil(-1.3));
58+
EXPECT_FP_EQ(2.0, __llvm_libc::ceil(1.5));
59+
EXPECT_FP_EQ(-1.0, __llvm_libc::ceil(-1.5));
60+
EXPECT_FP_EQ(2.0, __llvm_libc::ceil(1.75));
61+
EXPECT_FP_EQ(-1.0, __llvm_libc::ceil(-1.75));
62+
EXPECT_FP_EQ(11.0, __llvm_libc::ceil(10.32));
63+
EXPECT_FP_EQ(-10.0, __llvm_libc::ceil(-10.32));
64+
EXPECT_FP_EQ(11.0, __llvm_libc::ceil(10.65));
65+
EXPECT_FP_EQ(-10.0, __llvm_libc::ceil(-10.65));
66+
EXPECT_FP_EQ(1235.0, __llvm_libc::ceil(1234.38));
67+
EXPECT_FP_EQ(-1234.0, __llvm_libc::ceil(-1234.38));
68+
EXPECT_FP_EQ(1235.0, __llvm_libc::ceil(1234.96));
69+
EXPECT_FP_EQ(-1234.0, __llvm_libc::ceil(-1234.96));
6270
}
6371

64-
TEST(ceilTest, InDoubleRange) {
65-
using BitsType = Properties::BitsType;
66-
constexpr BitsType count = 1000000;
67-
constexpr BitsType step = UINT64_MAX / count;
68-
for (BitsType i = 0, v = 0; i <= count; ++i, v += step) {
69-
double x = valueFromBits(v);
72+
TEST(CeilTest, InDoubleRange) {
73+
using UIntType = FPBits::UIntType;
74+
constexpr UIntType count = 10000000;
75+
constexpr UIntType step = UIntType(-1) / count;
76+
for (UIntType i = 0, v = 0; i <= count; ++i, v += step) {
77+
double x = FPBits(v);
7078
if (isnan(x) || isinf(x))
7179
continue;
80+
7281
ASSERT_MPFR_MATCH(mpfr::Operation::Ceil, x, __llvm_libc::ceil(x),
7382
tolerance);
7483
}

libc/test/src/math/ceilf_test.cpp

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,67 +8,76 @@
88

99
#include "include/math.h"
1010
#include "src/math/ceilf.h"
11-
#include "utils/FPUtil/BitPatterns.h"
12-
#include "utils/FPUtil/FloatOperations.h"
13-
#include "utils/FPUtil/FloatProperties.h"
11+
#include "utils/FPUtil/FPBits.h"
12+
#include "utils/FPUtil/TestHelpers.h"
1413
#include "utils/MPFRWrapper/MPFRUtils.h"
1514
#include "utils/UnitTest/Test.h"
1615

17-
using __llvm_libc::fputil::valueAsBits;
18-
using __llvm_libc::fputil::valueFromBits;
19-
20-
using BitPatterns = __llvm_libc::fputil::BitPatterns<float>;
21-
using Properties = __llvm_libc::fputil::FloatProperties<float>;
16+
using FPBits = __llvm_libc::fputil::FPBits<float>;
2217

2318
namespace mpfr = __llvm_libc::testing::mpfr;
2419

20+
static const float zero = FPBits::zero();
21+
static const float negZero = FPBits::negZero();
22+
static const float nan = FPBits::buildNaN(1);
23+
static const float inf = FPBits::inf();
24+
static const float negInf = FPBits::negInf();
25+
2526
// Zero tolerance; As in, exact match with MPFR result.
26-
static constexpr mpfr::Tolerance tolerance{mpfr::Tolerance::doublePrecision, 0,
27+
static constexpr mpfr::Tolerance tolerance{mpfr::Tolerance::floatPrecision, 0,
2728
0};
28-
2929
TEST(CeilfTest, SpecialNumbers) {
30-
EXPECT_EQ(
31-
BitPatterns::aQuietNaN,
32-
valueAsBits(__llvm_libc::ceilf(valueFromBits(BitPatterns::aQuietNaN))));
33-
EXPECT_EQ(BitPatterns::aNegativeQuietNaN,
34-
valueAsBits(__llvm_libc::ceilf(
35-
valueFromBits(BitPatterns::aNegativeQuietNaN))));
36-
37-
EXPECT_EQ(BitPatterns::aSignallingNaN,
38-
valueAsBits(__llvm_libc::ceilf(
39-
valueFromBits(BitPatterns::aSignallingNaN))));
40-
EXPECT_EQ(BitPatterns::aNegativeSignallingNaN,
41-
valueAsBits(__llvm_libc::ceilf(
42-
valueFromBits(BitPatterns::aNegativeSignallingNaN))));
30+
EXPECT_FP_EQ(zero, __llvm_libc::ceilf(zero));
31+
EXPECT_FP_EQ(negZero, __llvm_libc::ceilf(negZero));
4332

44-
EXPECT_EQ(BitPatterns::inf,
45-
valueAsBits(__llvm_libc::ceilf(valueFromBits(BitPatterns::inf))));
46-
EXPECT_EQ(BitPatterns::negInf, valueAsBits(__llvm_libc::ceilf(
47-
valueFromBits(BitPatterns::negInf))));
33+
EXPECT_FP_EQ(inf, __llvm_libc::ceilf(inf));
34+
EXPECT_FP_EQ(negInf, __llvm_libc::ceilf(negInf));
4835

49-
EXPECT_EQ(BitPatterns::zero,
50-
valueAsBits(__llvm_libc::ceilf(valueFromBits(BitPatterns::zero))));
51-
EXPECT_EQ(BitPatterns::negZero, valueAsBits(__llvm_libc::ceilf(
52-
valueFromBits(BitPatterns::negZero))));
36+
ASSERT_NE(isnan(nan), 0);
37+
ASSERT_NE(isnan(__llvm_libc::ceilf(nan)), 0);
5338
}
5439

5540
TEST(CeilfTest, RoundedNumbers) {
56-
EXPECT_EQ(valueAsBits(1.0f), valueAsBits(__llvm_libc::ceilf(1.0f)));
57-
EXPECT_EQ(valueAsBits(-1.0f), valueAsBits(__llvm_libc::ceilf(-1.0f)));
58-
EXPECT_EQ(valueAsBits(10.0f), valueAsBits(__llvm_libc::ceilf(10.0f)));
59-
EXPECT_EQ(valueAsBits(-10.0f), valueAsBits(__llvm_libc::ceilf(-10.0f)));
60-
EXPECT_EQ(valueAsBits(12345.0f), valueAsBits(__llvm_libc::ceilf(12345.0f)));
61-
EXPECT_EQ(valueAsBits(-12345.0f), valueAsBits(__llvm_libc::ceilf(-12345.0f)));
41+
EXPECT_FP_EQ(1.0f, __llvm_libc::ceilf(1.0f));
42+
EXPECT_FP_EQ(-1.0f, __llvm_libc::ceilf(-1.0f));
43+
EXPECT_FP_EQ(10.0f, __llvm_libc::ceilf(10.0f));
44+
EXPECT_FP_EQ(-10.0f, __llvm_libc::ceilf(-10.0f));
45+
EXPECT_FP_EQ(1234.0f, __llvm_libc::ceilf(1234.0f));
46+
EXPECT_FP_EQ(-1234.0f, __llvm_libc::ceilf(-1234.0f));
47+
}
48+
49+
TEST(CeilfTest, Fractions) {
50+
EXPECT_FP_EQ(1.0f, __llvm_libc::ceilf(0.5f));
51+
EXPECT_FP_EQ(-0.0f, __llvm_libc::ceilf(-0.5f));
52+
EXPECT_FP_EQ(1.0f, __llvm_libc::ceilf(0.115f));
53+
EXPECT_FP_EQ(-0.0f, __llvm_libc::ceilf(-0.115f));
54+
EXPECT_FP_EQ(1.0f, __llvm_libc::ceilf(0.715f));
55+
EXPECT_FP_EQ(-0.0f, __llvm_libc::ceilf(-0.715f));
56+
EXPECT_FP_EQ(2.0f, __llvm_libc::ceilf(1.3f));
57+
EXPECT_FP_EQ(-1.0f, __llvm_libc::ceilf(-1.3f));
58+
EXPECT_FP_EQ(2.0f, __llvm_libc::ceilf(1.5f));
59+
EXPECT_FP_EQ(-1.0f, __llvm_libc::ceilf(-1.5f));
60+
EXPECT_FP_EQ(2.0f, __llvm_libc::ceilf(1.75f));
61+
EXPECT_FP_EQ(-1.0f, __llvm_libc::ceilf(-1.75f));
62+
EXPECT_FP_EQ(11.0f, __llvm_libc::ceilf(10.32f));
63+
EXPECT_FP_EQ(-10.0f, __llvm_libc::ceilf(-10.32f));
64+
EXPECT_FP_EQ(11.0f, __llvm_libc::ceilf(10.65f));
65+
EXPECT_FP_EQ(-10.0f, __llvm_libc::ceilf(-10.65f));
66+
EXPECT_FP_EQ(1235.0f, __llvm_libc::ceilf(1234.38f));
67+
EXPECT_FP_EQ(-1234.0f, __llvm_libc::ceilf(-1234.38f));
68+
EXPECT_FP_EQ(1235.0f, __llvm_libc::ceilf(1234.96f));
69+
EXPECT_FP_EQ(-1234.0f, __llvm_libc::ceilf(-1234.96f));
6270
}
6371

6472
TEST(CeilfTest, InFloatRange) {
65-
using BitsType = Properties::BitsType;
66-
constexpr BitsType count = 1000000;
67-
constexpr BitsType step = UINT32_MAX / count;
68-
for (BitsType i = 0, v = 0; i <= count; ++i, v += step) {
69-
double x = valueFromBits(v);
73+
using UIntType = FPBits::UIntType;
74+
constexpr UIntType count = 1000000;
75+
constexpr UIntType step = UIntType(-1) / count;
76+
for (UIntType i = 0, v = 0; i <= count; ++i, v += step) {
77+
float x = FPBits(v);
7078
if (isnan(x) || isinf(x))
7179
continue;
80+
7281
ASSERT_MPFR_MATCH(mpfr::Operation::Ceil, x, __llvm_libc::ceilf(x),
7382
tolerance);
7483
}

libc/test/src/math/ceill_test.cpp

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,64 @@
99
#include "include/math.h"
1010
#include "src/math/ceill.h"
1111
#include "utils/FPUtil/FPBits.h"
12+
#include "utils/FPUtil/TestHelpers.h"
1213
#include "utils/MPFRWrapper/MPFRUtils.h"
1314
#include "utils/UnitTest/Test.h"
1415

1516
using FPBits = __llvm_libc::fputil::FPBits<long double>;
1617

1718
namespace mpfr = __llvm_libc::testing::mpfr;
1819

20+
static const long double zero = FPBits::zero();
21+
static const long double negZero = FPBits::negZero();
22+
static const long double nan = FPBits::buildNaN(1);
23+
static const long double inf = FPBits::inf();
24+
static const long double negInf = FPBits::negInf();
25+
1926
// Zero tolerance; As in, exact match with MPFR result.
20-
static constexpr mpfr::Tolerance tolerance{mpfr::Tolerance::doublePrecision, 0,
27+
static constexpr mpfr::Tolerance tolerance{mpfr::Tolerance::floatPrecision, 0,
2128
0};
2229
TEST(CeillTest, SpecialNumbers) {
23-
ASSERT_TRUE(FPBits::zero() == __llvm_libc::ceill(FPBits::zero()));
24-
ASSERT_TRUE(FPBits::negZero() == __llvm_libc::ceill(FPBits::negZero()));
30+
EXPECT_FP_EQ(zero, __llvm_libc::ceill(zero));
31+
EXPECT_FP_EQ(negZero, __llvm_libc::ceill(negZero));
2532

26-
ASSERT_TRUE(FPBits::inf() == __llvm_libc::ceill(FPBits::inf()));
27-
ASSERT_TRUE(FPBits::negInf() == __llvm_libc::ceill(FPBits::negInf()));
33+
EXPECT_FP_EQ(inf, __llvm_libc::ceill(inf));
34+
EXPECT_FP_EQ(negInf, __llvm_libc::ceill(negInf));
2835

29-
long double nan = FPBits::buildNaN(1);
3036
ASSERT_NE(isnan(nan), 0);
3137
ASSERT_NE(isnan(__llvm_libc::ceill(nan)), 0);
3238
}
3339

3440
TEST(CeillTest, RoundedNumbers) {
35-
ASSERT_TRUE(FPBits(1.0l) == __llvm_libc::ceill(1.0l));
36-
ASSERT_TRUE(FPBits(-1.0l) == __llvm_libc::ceill(-1.0l));
37-
ASSERT_TRUE(FPBits(10.0l) == __llvm_libc::ceill(10.0l));
38-
ASSERT_TRUE(FPBits(-10.0l) == __llvm_libc::ceill(-10.0l));
39-
ASSERT_TRUE(FPBits(1234.0l) == __llvm_libc::ceill(1234.0l));
40-
ASSERT_TRUE(FPBits(-1234.0l) == __llvm_libc::ceill(-1234.0l));
41+
EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.0l));
42+
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.0l));
43+
EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.0l));
44+
EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.0l));
45+
EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.0l));
46+
EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.0l));
4147
}
4248

4349
TEST(CeillTest, Fractions) {
44-
ASSERT_TRUE(FPBits(2.0l) == __llvm_libc::ceill(1.3l));
45-
ASSERT_TRUE(FPBits(-1.0l) == __llvm_libc::ceill(-1.3l));
46-
ASSERT_TRUE(FPBits(2.0l) == __llvm_libc::ceill(1.5l));
47-
ASSERT_TRUE(FPBits(-1.0l) == __llvm_libc::ceill(-1.5l));
48-
ASSERT_TRUE(FPBits(2.0l) == __llvm_libc::ceill(1.75l));
49-
ASSERT_TRUE(FPBits(-1.0l) == __llvm_libc::ceill(-1.75l));
50-
ASSERT_TRUE(FPBits(11.0l) == __llvm_libc::ceill(10.32l));
51-
ASSERT_TRUE(FPBits(-10.0l) == __llvm_libc::ceill(-10.32l));
52-
ASSERT_TRUE(FPBits(11.0l) == __llvm_libc::ceill(10.65l));
53-
ASSERT_TRUE(FPBits(-10.0l) == __llvm_libc::ceill(-10.65l));
54-
ASSERT_TRUE(FPBits(1235.0l) == __llvm_libc::ceill(1234.18l));
55-
ASSERT_TRUE(FPBits(-1234.0l) == __llvm_libc::ceill(-1234.18l));
56-
ASSERT_TRUE(FPBits(1235.0l) == __llvm_libc::ceill(1234.96l));
57-
ASSERT_TRUE(FPBits(-1234.0l) == __llvm_libc::ceill(-1234.96l));
50+
EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.5l));
51+
EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.5l));
52+
EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.115l));
53+
EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.115l));
54+
EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.715l));
55+
EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.715l));
56+
EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.3l));
57+
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.3l));
58+
EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.5l));
59+
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.5l));
60+
EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.75l));
61+
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.75l));
62+
EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.32l));
63+
EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.32l));
64+
EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.65l));
65+
EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.65l));
66+
EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.38l));
67+
EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.38l));
68+
EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.96l));
69+
EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.96l));
5870
}
5971

6072
TEST(CeillTest, InLongDoubleRange) {

0 commit comments

Comments
 (0)