Skip to content

Commit efac016

Browse files
authored
[NFC][libc++] Refactors the time.cal tests. (#73356)
These tests use an old way to test code in constexpr context. This changes the code to the idomatic libc++ method. This is a preparation for #73162. Side changes - Updated formatting - Made some helper functions constexpr - Some naming improvements
1 parent 0783bf1 commit efac016

File tree

38 files changed

+1095
-1481
lines changed

38 files changed

+1095
-1481
lines changed

libcxx/test/std/time/time.cal/euclidian.h

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,25 @@
1212
// Assumption: minValue <= lhs <= maxValue
1313
// Assumption: minValue >= 0
1414
template <typename T, T minValue, T maxValue>
15-
T euclidian_addition(T rhs, T lhs)
16-
{
17-
const T modulus = maxValue - minValue + 1;
18-
T ret = rhs + lhs;
19-
if (ret > maxValue)
20-
ret -= modulus;
21-
return ret;
15+
constexpr T euclidian_addition(T rhs, T lhs) {
16+
const T modulus = maxValue - minValue + 1;
17+
T ret = rhs + lhs;
18+
if (ret > maxValue)
19+
ret -= modulus;
20+
return ret;
2221
}
2322

2423
// Assumption: minValue < maxValue
2524
// Assumption: minValue <= rhs <= maxValue
2625
// Assumption: minValue <= lhs <= maxValue
2726
// Assumption: minValue >= 0
2827
template <typename T, T minValue, T maxValue>
29-
T euclidian_subtraction(T lhs, T rhs)
30-
{
31-
const T modulus = maxValue - minValue + 1;
32-
T ret = lhs - rhs;
33-
if (ret < minValue)
34-
ret += modulus;
35-
if (ret > maxValue) // this can happen if T is unsigned
36-
ret += modulus;
37-
return ret;
28+
constexpr T euclidian_subtraction(T lhs, T rhs) {
29+
const T modulus = maxValue - minValue + 1;
30+
T ret = lhs - rhs;
31+
if (ret < minValue)
32+
ret += modulus;
33+
if (ret > maxValue) // this can happen if T is unsigned
34+
ret += modulus;
35+
return ret;
3836
}

libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/decrement.pass.cpp

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,41 +13,33 @@
1313
// constexpr day& operator--() noexcept;
1414
// constexpr day operator--(int) noexcept;
1515

16-
1716
#include <chrono>
1817
#include <type_traits>
1918
#include <cassert>
2019

2120
#include "test_macros.h"
2221

23-
template <typename D>
24-
constexpr bool testConstexpr()
25-
{
26-
D d1{10};
27-
if (static_cast<unsigned>(--d1) != 9) return false;
28-
if (static_cast<unsigned>(d1--) != 9) return false;
29-
if (static_cast<unsigned>(d1) != 8) return false;
30-
return true;
31-
}
22+
using day = std::chrono::day;
3223

33-
int main(int, char**)
34-
{
35-
using day = std::chrono::day;
36-
ASSERT_NOEXCEPT(--(std::declval<day&>()) );
37-
ASSERT_NOEXCEPT( (std::declval<day&>())--);
24+
constexpr bool test() {
25+
for (unsigned i = 10; i <= 20; ++i) {
26+
day d(i);
27+
assert(static_cast<unsigned>(--d) == i - 1);
28+
assert(static_cast<unsigned>(d--) == i - 1);
29+
assert(static_cast<unsigned>(d) == i - 2);
30+
}
31+
return true;
32+
}
3833

39-
ASSERT_SAME_TYPE(day , decltype( std::declval<day&>()--));
40-
ASSERT_SAME_TYPE(day&, decltype(--std::declval<day&>() ));
34+
int main(int, char**) {
35+
ASSERT_NOEXCEPT(--(std::declval<day&>()));
36+
ASSERT_NOEXCEPT((std::declval<day&>())--);
4137

42-
static_assert(testConstexpr<day>(), "");
38+
ASSERT_SAME_TYPE(day, decltype(std::declval<day&>()--));
39+
ASSERT_SAME_TYPE(day&, decltype(--std::declval<day&>()));
4340

44-
for (unsigned i = 10; i <= 20; ++i)
45-
{
46-
day d(i);
47-
assert(static_cast<unsigned>(--d) == i - 1);
48-
assert(static_cast<unsigned>(d--) == i - 1);
49-
assert(static_cast<unsigned>(d) == i - 2);
50-
}
41+
test();
42+
static_assert(test());
5143

5244
return 0;
5345
}

libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/increment.pass.cpp

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,41 +13,34 @@
1313
// constexpr day& operator++() noexcept;
1414
// constexpr day operator++(int) noexcept;
1515

16-
1716
#include <chrono>
1817
#include <type_traits>
1918
#include <cassert>
2019

2120
#include "test_macros.h"
2221

23-
template <typename D>
24-
constexpr bool testConstexpr()
25-
{
26-
D d1{1};
27-
if (static_cast<unsigned>(++d1) != 2) return false;
28-
if (static_cast<unsigned>(d1++) != 2) return false;
29-
if (static_cast<unsigned>(d1) != 3) return false;
30-
return true;
31-
}
22+
using day = std::chrono::day;
3223

33-
int main(int, char**)
34-
{
35-
using day = std::chrono::day;
36-
ASSERT_NOEXCEPT(++(std::declval<day&>()) );
37-
ASSERT_NOEXCEPT( (std::declval<day&>())++);
24+
constexpr bool test() {
25+
for (unsigned i = 10; i <= 20; ++i) {
26+
day d(i);
27+
assert(static_cast<unsigned>(++d) == i + 1);
28+
assert(static_cast<unsigned>(d++) == i + 1);
29+
assert(static_cast<unsigned>(d) == i + 2);
30+
}
31+
32+
return true;
33+
}
3834

39-
ASSERT_SAME_TYPE(day , decltype( std::declval<day&>()++));
40-
ASSERT_SAME_TYPE(day&, decltype(++std::declval<day&>() ));
35+
int main(int, char**) {
36+
ASSERT_NOEXCEPT(++(std::declval<day&>()));
37+
ASSERT_NOEXCEPT((std::declval<day&>())++);
4138

42-
static_assert(testConstexpr<day>(), "");
39+
ASSERT_SAME_TYPE(day, decltype(std::declval<day&>()++));
40+
ASSERT_SAME_TYPE(day&, decltype(++std::declval<day&>()));
4341

44-
for (unsigned i = 10; i <= 20; ++i)
45-
{
46-
day d(i);
47-
assert(static_cast<unsigned>(++d) == i + 1);
48-
assert(static_cast<unsigned>(d++) == i + 1);
49-
assert(static_cast<unsigned>(d) == i + 2);
50-
}
42+
test();
43+
static_assert(test());
5144

5245
return 0;
5346
}

libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/plus_minus_equal.pass.cpp

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,30 @@
1919

2020
#include "test_macros.h"
2121

22-
template <typename D, typename Ds>
23-
constexpr bool testConstexpr()
24-
{
25-
D d1{1};
26-
if (static_cast<unsigned>(d1 += Ds{ 1}) != 2) return false;
27-
if (static_cast<unsigned>(d1 += Ds{ 2}) != 4) return false;
28-
if (static_cast<unsigned>(d1 += Ds{22}) != 26) return false;
29-
if (static_cast<unsigned>(d1 -= Ds{ 1}) != 25) return false;
30-
if (static_cast<unsigned>(d1 -= Ds{ 2}) != 23) return false;
31-
if (static_cast<unsigned>(d1 -= Ds{22}) != 1) return false;
32-
return true;
22+
using day = std::chrono::day;
23+
using days = std::chrono::days;
24+
25+
constexpr bool test() {
26+
for (unsigned i = 0; i <= 10; ++i) {
27+
day d(i);
28+
assert(static_cast<unsigned>(d += days{22}) == i + 22);
29+
assert(static_cast<unsigned>(d) == i + 22);
30+
assert(static_cast<unsigned>(d -= days{12}) == i + 10);
31+
assert(static_cast<unsigned>(d) == i + 10);
32+
}
33+
34+
return true;
3335
}
3436

35-
int main(int, char**)
36-
{
37-
using day = std::chrono::day;
38-
using days = std::chrono::days;
37+
int main(int, char**) {
38+
ASSERT_NOEXCEPT(std::declval<day&>() += std::declval<days>());
39+
ASSERT_NOEXCEPT(std::declval<day&>() -= std::declval<days>());
3940

40-
ASSERT_NOEXCEPT(std::declval<day&>() += std::declval<days>());
41-
ASSERT_NOEXCEPT(std::declval<day&>() -= std::declval<days>());
41+
ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() += std::declval<days>()));
42+
ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() -= std::declval<days>()));
4243

43-
ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() += std::declval<days>()));
44-
ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() -= std::declval<days>()));
45-
46-
static_assert(testConstexpr<day, days>(), "");
47-
48-
for (unsigned i = 0; i <= 10; ++i)
49-
{
50-
day d(i);
51-
assert(static_cast<unsigned>(d += days{22}) == i + 22);
52-
assert(static_cast<unsigned>(d) == i + 22);
53-
assert(static_cast<unsigned>(d -= days{12}) == i + 10);
54-
assert(static_cast<unsigned>(d) == i + 10);
55-
}
44+
test();
45+
static_assert(test());
5646

5747
return 0;
5848
}

libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/minus.pass.cpp

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,36 @@
1616
// constexpr days operator-(const day& x, const day& y) noexcept;
1717
// Returns: days{int(unsigned{x}) - int(unsigned{y}).
1818

19-
2019
#include <chrono>
2120
#include <type_traits>
2221
#include <cassert>
2322

2423
#include "test_macros.h"
2524

26-
template <typename D, typename Ds>
27-
constexpr bool testConstexpr()
28-
{
29-
D d{23};
30-
Ds offset{6};
31-
if (d - offset != D{17}) return false;
32-
if (d - D{17} != offset) return false;
33-
return true;
34-
}
25+
using day = std::chrono::day;
26+
using days = std::chrono::days;
3527

36-
int main(int, char**)
37-
{
38-
using day = std::chrono::day;
39-
using days = std::chrono::days;
28+
constexpr bool test() {
29+
day dy{12};
30+
for (unsigned i = 0; i <= 10; ++i) {
31+
day d1 = dy - days{i};
32+
days off = dy - day{i};
33+
assert(static_cast<unsigned>(d1) == 12 - i);
34+
assert(off.count() == static_cast<int>(12 - i)); // days is signed
35+
}
4036

41-
ASSERT_NOEXCEPT(std::declval<day>() - std::declval<days>());
42-
ASSERT_NOEXCEPT(std::declval<day>() - std::declval<day>());
37+
return true;
38+
}
4339

44-
ASSERT_SAME_TYPE(day, decltype(std::declval<day>() - std::declval<days>()));
45-
ASSERT_SAME_TYPE(days, decltype(std::declval<day>() - std::declval<day>()));
40+
int main(int, char**) {
41+
ASSERT_NOEXCEPT(std::declval<day>() - std::declval<days>());
42+
ASSERT_NOEXCEPT(std::declval<day>() - std::declval<day>());
4643

47-
static_assert(testConstexpr<day, days>(), "");
44+
ASSERT_SAME_TYPE(day, decltype(std::declval<day>() - std::declval<days>()));
45+
ASSERT_SAME_TYPE(days, decltype(std::declval<day>() - std::declval<day>()));
4846

49-
day dy{12};
50-
for (unsigned i = 0; i <= 10; ++i)
51-
{
52-
day d1 = dy - days{i};
53-
days off = dy - day {i};
54-
assert(static_cast<unsigned>(d1) == 12 - i);
55-
assert(off.count() == static_cast<int>(12 - i)); // days is signed
56-
}
47+
test();
48+
static_assert(test());
5749

5850
return 0;
5951
}

libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/plus.pass.cpp

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,45 +16,37 @@
1616
// constexpr day operator+(const days& x, const day& y) noexcept;
1717
// Returns: y + x.
1818

19-
2019
#include <chrono>
2120
#include <type_traits>
2221
#include <cassert>
2322

2423
#include "test_macros.h"
2524

26-
template <typename D, typename Ds>
27-
constexpr bool testConstexpr()
28-
{
29-
D d{1};
30-
Ds offset{23};
31-
if (d + offset != D{24}) return false;
32-
if (offset + d != D{24}) return false;
33-
return true;
34-
}
25+
using day = std::chrono::day;
26+
using days = std::chrono::days;
3527

36-
int main(int, char**)
37-
{
38-
using day = std::chrono::day;
39-
using days = std::chrono::days;
28+
constexpr bool test() {
29+
day dy{12};
30+
for (unsigned i = 0; i <= 10; ++i) {
31+
day d1 = dy + days{i};
32+
day d2 = days{i} + dy;
33+
assert(d1 == d2);
34+
assert(static_cast<unsigned>(d1) == i + 12);
35+
assert(static_cast<unsigned>(d2) == i + 12);
36+
}
4037

41-
ASSERT_NOEXCEPT(std::declval<day>() + std::declval<days>());
42-
ASSERT_NOEXCEPT(std::declval<days>() + std::declval<day>());
38+
return true;
39+
}
4340

44-
ASSERT_SAME_TYPE(day, decltype(std::declval<day>() + std::declval<days>()));
45-
ASSERT_SAME_TYPE(day, decltype(std::declval<days>() + std::declval<day>()));
41+
int main(int, char**) {
42+
ASSERT_NOEXCEPT(std::declval<day>() + std::declval<days>());
43+
ASSERT_NOEXCEPT(std::declval<days>() + std::declval<day>());
4644

47-
static_assert(testConstexpr<day, days>(), "");
45+
ASSERT_SAME_TYPE(day, decltype(std::declval<day>() + std::declval<days>()));
46+
ASSERT_SAME_TYPE(day, decltype(std::declval<days>() + std::declval<day>()));
4847

49-
day dy{12};
50-
for (unsigned i = 0; i <= 10; ++i)
51-
{
52-
day d1 = dy + days{i};
53-
day d2 = days{i} + dy;
54-
assert(d1 == d2);
55-
assert(static_cast<unsigned>(d1) == i + 12);
56-
assert(static_cast<unsigned>(d2) == i + 12);
57-
}
48+
test();
49+
static_assert(test());
5850

5951
return 0;
6052
}

0 commit comments

Comments
 (0)