-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[NFC][libc++] Refactors the time.cal tests. #73356
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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 llvm#73162. Side changes - Updated formatting - Made some helper functions constexpr - Some naming improvements
@llvm/pr-subscribers-libcxx Author: Mark de Wever (mordante) ChangesThese 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
Patch is 128.14 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/73356.diff 38 Files Affected:
diff --git a/libcxx/test/std/time/time.cal/euclidian.h b/libcxx/test/std/time/time.cal/euclidian.h
index de56477ae338def..6e841a0789a6b6c 100644
--- a/libcxx/test/std/time/time.cal/euclidian.h
+++ b/libcxx/test/std/time/time.cal/euclidian.h
@@ -12,13 +12,12 @@
// Assumption: minValue <= lhs <= maxValue
// Assumption: minValue >= 0
template <typename T, T minValue, T maxValue>
-T euclidian_addition(T rhs, T lhs)
-{
- const T modulus = maxValue - minValue + 1;
- T ret = rhs + lhs;
- if (ret > maxValue)
- ret -= modulus;
- return ret;
+constexpr T euclidian_addition(T rhs, T lhs) {
+ const T modulus = maxValue - minValue + 1;
+ T ret = rhs + lhs;
+ if (ret > maxValue)
+ ret -= modulus;
+ return ret;
}
// Assumption: minValue < maxValue
@@ -26,13 +25,12 @@ T euclidian_addition(T rhs, T lhs)
// Assumption: minValue <= lhs <= maxValue
// Assumption: minValue >= 0
template <typename T, T minValue, T maxValue>
-T euclidian_subtraction(T lhs, T rhs)
-{
- const T modulus = maxValue - minValue + 1;
- T ret = lhs - rhs;
- if (ret < minValue)
- ret += modulus;
- if (ret > maxValue) // this can happen if T is unsigned
- ret += modulus;
- return ret;
+constexpr T euclidian_subtraction(T lhs, T rhs) {
+ const T modulus = maxValue - minValue + 1;
+ T ret = lhs - rhs;
+ if (ret < minValue)
+ ret += modulus;
+ if (ret > maxValue) // this can happen if T is unsigned
+ ret += modulus;
+ return ret;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/decrement.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/decrement.pass.cpp
index fd15b98b25f7d28..9e13ab4decd7b2f 100644
--- a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/decrement.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/decrement.pass.cpp
@@ -13,41 +13,33 @@
// constexpr day& operator--() noexcept;
// constexpr day operator--(int) noexcept;
-
#include <chrono>
#include <type_traits>
#include <cassert>
#include "test_macros.h"
-template <typename D>
-constexpr bool testConstexpr()
-{
- D d1{10};
- if (static_cast<unsigned>(--d1) != 9) return false;
- if (static_cast<unsigned>(d1--) != 9) return false;
- if (static_cast<unsigned>(d1) != 8) return false;
- return true;
-}
+using day = std::chrono::day;
-int main(int, char**)
-{
- using day = std::chrono::day;
- ASSERT_NOEXCEPT(--(std::declval<day&>()) );
- ASSERT_NOEXCEPT( (std::declval<day&>())--);
+constexpr bool test() {
+ for (unsigned i = 10; i <= 20; ++i) {
+ day d(i);
+ assert(static_cast<unsigned>(--d) == i - 1);
+ assert(static_cast<unsigned>(d--) == i - 1);
+ assert(static_cast<unsigned>(d) == i - 2);
+ }
+ return true;
+}
- ASSERT_SAME_TYPE(day , decltype( std::declval<day&>()--));
- ASSERT_SAME_TYPE(day&, decltype(--std::declval<day&>() ));
+int main(int, char**) {
+ ASSERT_NOEXCEPT(--(std::declval<day&>()));
+ ASSERT_NOEXCEPT((std::declval<day&>())--);
- static_assert(testConstexpr<day>(), "");
+ ASSERT_SAME_TYPE(day, decltype(std::declval<day&>()--));
+ ASSERT_SAME_TYPE(day&, decltype(--std::declval<day&>()));
- for (unsigned i = 10; i <= 20; ++i)
- {
- day d(i);
- assert(static_cast<unsigned>(--d) == i - 1);
- assert(static_cast<unsigned>(d--) == i - 1);
- assert(static_cast<unsigned>(d) == i - 2);
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/increment.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/increment.pass.cpp
index f11021b35f4dc37..3d67558950535c1 100644
--- a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/increment.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/increment.pass.cpp
@@ -13,41 +13,34 @@
// constexpr day& operator++() noexcept;
// constexpr day operator++(int) noexcept;
-
#include <chrono>
#include <type_traits>
#include <cassert>
#include "test_macros.h"
-template <typename D>
-constexpr bool testConstexpr()
-{
- D d1{1};
- if (static_cast<unsigned>(++d1) != 2) return false;
- if (static_cast<unsigned>(d1++) != 2) return false;
- if (static_cast<unsigned>(d1) != 3) return false;
- return true;
-}
+using day = std::chrono::day;
-int main(int, char**)
-{
- using day = std::chrono::day;
- ASSERT_NOEXCEPT(++(std::declval<day&>()) );
- ASSERT_NOEXCEPT( (std::declval<day&>())++);
+constexpr bool test() {
+ for (unsigned i = 10; i <= 20; ++i) {
+ day d(i);
+ assert(static_cast<unsigned>(++d) == i + 1);
+ assert(static_cast<unsigned>(d++) == i + 1);
+ assert(static_cast<unsigned>(d) == i + 2);
+ }
+
+ return true;
+}
- ASSERT_SAME_TYPE(day , decltype( std::declval<day&>()++));
- ASSERT_SAME_TYPE(day&, decltype(++std::declval<day&>() ));
+int main(int, char**) {
+ ASSERT_NOEXCEPT(++(std::declval<day&>()));
+ ASSERT_NOEXCEPT((std::declval<day&>())++);
- static_assert(testConstexpr<day>(), "");
+ ASSERT_SAME_TYPE(day, decltype(std::declval<day&>()++));
+ ASSERT_SAME_TYPE(day&, decltype(++std::declval<day&>()));
- for (unsigned i = 10; i <= 20; ++i)
- {
- day d(i);
- assert(static_cast<unsigned>(++d) == i + 1);
- assert(static_cast<unsigned>(d++) == i + 1);
- assert(static_cast<unsigned>(d) == i + 2);
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/plus_minus_equal.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/plus_minus_equal.pass.cpp
index 723ab2af14d1c71..28a1529beb74379 100644
--- a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/plus_minus_equal.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/plus_minus_equal.pass.cpp
@@ -19,40 +19,30 @@
#include "test_macros.h"
-template <typename D, typename Ds>
-constexpr bool testConstexpr()
-{
- D d1{1};
- if (static_cast<unsigned>(d1 += Ds{ 1}) != 2) return false;
- if (static_cast<unsigned>(d1 += Ds{ 2}) != 4) return false;
- if (static_cast<unsigned>(d1 += Ds{22}) != 26) return false;
- if (static_cast<unsigned>(d1 -= Ds{ 1}) != 25) return false;
- if (static_cast<unsigned>(d1 -= Ds{ 2}) != 23) return false;
- if (static_cast<unsigned>(d1 -= Ds{22}) != 1) return false;
- return true;
+using day = std::chrono::day;
+using days = std::chrono::days;
+
+constexpr bool test() {
+ for (unsigned i = 0; i <= 10; ++i) {
+ day d(i);
+ assert(static_cast<unsigned>(d += days{22}) == i + 22);
+ assert(static_cast<unsigned>(d) == i + 22);
+ assert(static_cast<unsigned>(d -= days{12}) == i + 10);
+ assert(static_cast<unsigned>(d) == i + 10);
+ }
+
+ return true;
}
-int main(int, char**)
-{
- using day = std::chrono::day;
- using days = std::chrono::days;
+int main(int, char**) {
+ ASSERT_NOEXCEPT(std::declval<day&>() += std::declval<days>());
+ ASSERT_NOEXCEPT(std::declval<day&>() -= std::declval<days>());
- ASSERT_NOEXCEPT(std::declval<day&>() += std::declval<days>());
- ASSERT_NOEXCEPT(std::declval<day&>() -= std::declval<days>());
+ ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() += std::declval<days>()));
+ ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() -= std::declval<days>()));
- ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() += std::declval<days>()));
- ASSERT_SAME_TYPE(day&, decltype(std::declval<day&>() -= std::declval<days>()));
-
- static_assert(testConstexpr<day, days>(), "");
-
- for (unsigned i = 0; i <= 10; ++i)
- {
- day d(i);
- assert(static_cast<unsigned>(d += days{22}) == i + 22);
- assert(static_cast<unsigned>(d) == i + 22);
- assert(static_cast<unsigned>(d -= days{12}) == i + 10);
- assert(static_cast<unsigned>(d) == i + 10);
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/minus.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/minus.pass.cpp
index 34b59f8e1c7c017..f2d29f7050e7301 100644
--- a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/minus.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/minus.pass.cpp
@@ -16,44 +16,36 @@
// constexpr days operator-(const day& x, const day& y) noexcept;
// Returns: days{int(unsigned{x}) - int(unsigned{y}).
-
#include <chrono>
#include <type_traits>
#include <cassert>
#include "test_macros.h"
-template <typename D, typename Ds>
-constexpr bool testConstexpr()
-{
- D d{23};
- Ds offset{6};
- if (d - offset != D{17}) return false;
- if (d - D{17} != offset) return false;
- return true;
-}
+using day = std::chrono::day;
+using days = std::chrono::days;
-int main(int, char**)
-{
- using day = std::chrono::day;
- using days = std::chrono::days;
+constexpr bool test() {
+ day dy{12};
+ for (unsigned i = 0; i <= 10; ++i) {
+ day d1 = dy - days{i};
+ days off = dy - day{i};
+ assert(static_cast<unsigned>(d1) == 12 - i);
+ assert(off.count() == static_cast<int>(12 - i)); // days is signed
+ }
- ASSERT_NOEXCEPT(std::declval<day>() - std::declval<days>());
- ASSERT_NOEXCEPT(std::declval<day>() - std::declval<day>());
+ return true;
+}
- ASSERT_SAME_TYPE(day, decltype(std::declval<day>() - std::declval<days>()));
- ASSERT_SAME_TYPE(days, decltype(std::declval<day>() - std::declval<day>()));
+int main(int, char**) {
+ ASSERT_NOEXCEPT(std::declval<day>() - std::declval<days>());
+ ASSERT_NOEXCEPT(std::declval<day>() - std::declval<day>());
- static_assert(testConstexpr<day, days>(), "");
+ ASSERT_SAME_TYPE(day, decltype(std::declval<day>() - std::declval<days>()));
+ ASSERT_SAME_TYPE(days, decltype(std::declval<day>() - std::declval<day>()));
- day dy{12};
- for (unsigned i = 0; i <= 10; ++i)
- {
- day d1 = dy - days{i};
- days off = dy - day {i};
- assert(static_cast<unsigned>(d1) == 12 - i);
- assert(off.count() == static_cast<int>(12 - i)); // days is signed
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/plus.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/plus.pass.cpp
index fedf9efe6db47e0..dd6e537ec5d3911 100644
--- a/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/plus.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/plus.pass.cpp
@@ -16,45 +16,37 @@
// constexpr day operator+(const days& x, const day& y) noexcept;
// Returns: y + x.
-
#include <chrono>
#include <type_traits>
#include <cassert>
#include "test_macros.h"
-template <typename D, typename Ds>
-constexpr bool testConstexpr()
-{
- D d{1};
- Ds offset{23};
- if (d + offset != D{24}) return false;
- if (offset + d != D{24}) return false;
- return true;
-}
+using day = std::chrono::day;
+using days = std::chrono::days;
-int main(int, char**)
-{
- using day = std::chrono::day;
- using days = std::chrono::days;
+constexpr bool test() {
+ day dy{12};
+ for (unsigned i = 0; i <= 10; ++i) {
+ day d1 = dy + days{i};
+ day d2 = days{i} + dy;
+ assert(d1 == d2);
+ assert(static_cast<unsigned>(d1) == i + 12);
+ assert(static_cast<unsigned>(d2) == i + 12);
+ }
- ASSERT_NOEXCEPT(std::declval<day>() + std::declval<days>());
- ASSERT_NOEXCEPT(std::declval<days>() + std::declval<day>());
+ return true;
+}
- ASSERT_SAME_TYPE(day, decltype(std::declval<day>() + std::declval<days>()));
- ASSERT_SAME_TYPE(day, decltype(std::declval<days>() + std::declval<day>()));
+int main(int, char**) {
+ ASSERT_NOEXCEPT(std::declval<day>() + std::declval<days>());
+ ASSERT_NOEXCEPT(std::declval<days>() + std::declval<day>());
- static_assert(testConstexpr<day, days>(), "");
+ ASSERT_SAME_TYPE(day, decltype(std::declval<day>() + std::declval<days>()));
+ ASSERT_SAME_TYPE(day, decltype(std::declval<days>() + std::declval<day>()));
- day dy{12};
- for (unsigned i = 0; i <= 10; ++i)
- {
- day d1 = dy + days{i};
- day d2 = days{i} + dy;
- assert(d1 == d2);
- assert(static_cast<unsigned>(d1) == i + 12);
- assert(static_cast<unsigned>(d2) == i + 12);
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/minus.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/minus.pass.cpp
index 2041afca5414b43..f7fb2b19ba60f23 100644
--- a/libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/minus.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/minus.pass.cpp
@@ -25,45 +25,35 @@
#include "test_macros.h"
-template <typename M, typename Ms>
-constexpr bool testConstexpr()
-{
- {
- M m{5};
- Ms offset{3};
- assert(m - offset == M{2});
- assert(m - M{2} == offset);
- }
-
- // Check the example
- assert(M{1} - M{2} == Ms{11});
-
- return true;
+using month = std::chrono::month;
+using months = std::chrono::months;
+
+constexpr bool test() {
+ month m{6};
+ for (unsigned i = 1; i <= 12; ++i) {
+ month m1 = m - months{i};
+ assert(m1.ok());
+ int exp = 6 - i;
+ if (exp < 1)
+ exp += 12;
+ assert(static_cast<unsigned>(m1) == static_cast<unsigned>(exp));
+ }
+
+ // Check the example
+ assert(month{1} - month{2} == months{11});
+
+ return true;
}
-int main(int, char**)
-{
- using month = std::chrono::month;
- using months = std::chrono::months;
-
- ASSERT_NOEXCEPT(std::declval<month>() - std::declval<months>());
- ASSERT_NOEXCEPT(std::declval<month>() - std::declval<month>());
-
- ASSERT_SAME_TYPE(month , decltype(std::declval<month>() - std::declval<months>()));
- ASSERT_SAME_TYPE(months, decltype(std::declval<month>() - std::declval<month> ()));
+int main(int, char**) {
+ ASSERT_NOEXCEPT(std::declval<month>() - std::declval<months>());
+ ASSERT_NOEXCEPT(std::declval<month>() - std::declval<month>());
- static_assert(testConstexpr<month, months>(), "");
+ ASSERT_SAME_TYPE(month, decltype(std::declval<month>() - std::declval<months>()));
+ ASSERT_SAME_TYPE(months, decltype(std::declval<month>() - std::declval<month>()));
- month m{6};
- for (unsigned i = 1; i <= 12; ++i)
- {
- month m1 = m - months{i};
- assert(m1.ok());
- int exp = 6 - i;
- if (exp < 1)
- exp += 12;
- assert(static_cast<unsigned>(m1) == static_cast<unsigned>(exp));
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/c_encoding.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/c_encoding.pass.cpp
index 6eb80638765b705..e80b449f9bc4498 100644
--- a/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/c_encoding.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/c_encoding.pass.cpp
@@ -12,34 +12,29 @@
// constexpr unsigned c_encoding() const noexcept;
-
#include <chrono>
#include <type_traits>
#include <cassert>
#include "test_macros.h"
-template <typename WD>
-constexpr bool testConstexpr()
-{
- WD wd{5};
- return wd.c_encoding() == 5;
-}
+using weekday = std::chrono::weekday;
-int main(int, char**)
-{
- using weekday = std::chrono::weekday;
+constexpr bool test() {
+ for (unsigned i = 0; i <= 10; ++i) {
+ weekday wd(i);
+ assert(wd.c_encoding() == (i == 7 ? 0 : i));
+ }
- ASSERT_NOEXCEPT( std::declval<weekday&>().c_encoding());
- ASSERT_SAME_TYPE(unsigned, decltype(std::declval<weekday&>().c_encoding()));
+ return true;
+}
- static_assert(testConstexpr<weekday>(), "");
+int main(int, char**) {
+ ASSERT_NOEXCEPT(std::declval<weekday&>().c_encoding());
+ ASSERT_SAME_TYPE(unsigned, decltype(std::declval<weekday&>().c_encoding()));
- for (unsigned i = 0; i <= 10; ++i)
- {
- weekday wd(i);
- assert(wd.c_encoding() == (i == 7 ? 0 : i));
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/decrement.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/decrement.pass.cpp
index f24da11d4c4699e..16ed968c3b9dc22 100644
--- a/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/decrement.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/decrement.pass.cpp
@@ -13,7 +13,6 @@
// constexpr weekday& operator--() noexcept;
// constexpr weekday operator--(int) noexcept;
-
#include <chrono>
#include <type_traits>
#include <cassert>
@@ -21,34 +20,28 @@
#include "test_macros.h"
#include "../../euclidian.h"
-template <typename WD>
-constexpr bool testConstexpr()
-{
- WD wd{1};
- if ((--wd).c_encoding() != 0) return false;
- if ((wd--).c_encoding() != 0) return false;
- if ((wd).c_encoding() != 6) return false;
- return true;
-}
+using weekday = std::chrono::weekday;
-int main(int, char**)
-{
- using weekday = std::chrono::weekday;
- ASSERT_NOEXCEPT(--(std::declval<weekday&>()) );
- ASSERT_NOEXCEPT( (std::declval<weekday&>())--);
+constexpr bool test() {
+ for (unsigned i = 0; i <= 6; ++i) {
+ weekday wd(i);
+ assert(((--wd).c_encoding() == euclidian_subtraction<unsigned, 0, 6>(i, 1)));
+ assert(((wd--).c_encoding() == euclidian_subtraction<unsigned, 0, 6>(i, 1)));
+ assert(((wd).c_encoding() == euclidian_subtraction<unsigned, 0, 6>(i, 2)));
+ }
+
+ return true;
+}
- ASSERT_SAME_TYPE(weekday , decltype( std::declval<weekday&>()--));
- ASSERT_SAME_TYPE(weekday&, decltype(--std::declval<weekday&>() ));
+int main(int, char**) {
+ ASSERT_NOEXCEPT(--(std::declval<weekday&>()));
+ ASSERT_NOEXCEPT((std::declval<weekday&>())--);
- static_assert(testConstexpr<weekday>(), "");
+ ASSERT_SAME_TYPE(weekday, decltype(std::declval<weekday&>()--));
+ ASSERT_SAME_TYPE(weekday&, decltype(--std::declval<weekday&>()));
- for (unsigned i = 0; i <= 6; ++i)
- {
- weekday wd(i);
- assert(((--wd).c_encoding() == euclidian_subtraction<unsigned, 0, 6>(i, 1)));
- assert(((wd--).c_encoding() == euclidian_subtraction<unsigned, 0, 6>(i, 1)));
- assert(((wd) .c_encoding() == euclidian_subtraction<unsigned, 0, 6>(i, 2)));
- }
+ test();
+ static_assert(test());
return 0;
}
diff --git a/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/increment.pass.cpp b/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/increment.pass.cpp
index 3da4b866b594b33..6c3ad9b21f45df0 100644
--- a/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/increment.pass.cpp
+++ b/libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/increment.pass.cpp
@@ -13,7 +13,6 @@
// constexpr weekday& operator++() noexcept;
// constexpr weekday operator++(int) noexcept;
-
#include <chrono>
#include <type_traits>
#include <cassert>
@@ -21,34 +20,28 @@
#include "test_macros.h"
#include "../../euclidian.h"
-template <typename WD>
-constexpr bool testConstexpr()
-{
- WD wd{5};
- if ((++wd).c_encoding() != 6) return false;
- if ((wd++).c_encoding() != 6) return false;
- if ((wd) .c_encoding() != 0) return false;
- return true;
-}
+using weekday = std::chrono::weekday;
-int main(int, char**)
-{
- using weekday = std::chrono::weekday;
- ASSERT_NOEXCEPT(++(std::declval<weekday&>()) );
- ASSERT_NOEXCEPT( (std::declval<weekday&>())++);
+constexpr bool test() {
+ for (unsigned i = 0; i <= 6; ++i) {
+ weekday wd(i);
+ assert(((++wd).c_encoding() == euclidian_addition<unsigned, 0, 6>(i, 1)));
+ assert(((wd++).c_encoding() == euclidian_addition<unsigned, 0, 6>(i, 1)));
+ assert(((wd).c_encoding() == euclidian_addition<unsigned, 0, 6>(i, 2)));
+ }
+
+ return true;
+}
- ASSERT_SAME_TYPE(weekda...
[truncated]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's great, thanks a lot for the cleanup!
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