[libcxx-commits] [libcxx] [NFC][libc++] Refactors the time.cal tests. (PR #73356)

via libcxx-commits libcxx-commits at lists.llvm.org
Fri Nov 24 10:32:39 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Mark de Wever (mordante)

<details>
<summary>Changes</summary>

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

---

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:

- (modified) libcxx/test/std/time/time.cal/euclidian.h (+14-16) 
- (modified) libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/decrement.pass.cpp (+17-25) 
- (modified) libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/increment.pass.cpp (+18-25) 
- (modified) libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.members/plus_minus_equal.pass.cpp (+20-30) 
- (modified) libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/minus.pass.cpp (+19-27) 
- (modified) libcxx/test/std/time/time.cal/time.cal.day/time.cal.day.nonmembers/plus.pass.cpp (+20-28) 
- (modified) libcxx/test/std/time/time.cal/time.cal.month/time.cal.month.nonmembers/minus.pass.cpp (+25-35) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/c_encoding.pass.cpp (+13-18) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/decrement.pass.cpp (+18-25) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/increment.pass.cpp (+18-25) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/iso_encoding.pass.cpp (+16-20) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.members/plus_minus_equal.pass.cpp (+24-35) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.nonmembers/minus.pass.cpp (+25-37) 
- (modified) libcxx/test/std/time/time.cal/time.cal.weekday/time.cal.weekday.nonmembers/plus.pass.cpp (+24-31) 
- (modified) libcxx/test/std/time/time.cal/time.cal.year/time.cal.year.members/decrement.pass.cpp (+18-25) 
- (modified) libcxx/test/std/time/time.cal/time.cal.year/time.cal.year.members/increment.pass.cpp (+18-25) 
- (modified) libcxx/test/std/time/time.cal/time.cal.year/time.cal.year.members/plus_minus.pass.cpp (+16-22) 
- (modified) libcxx/test/std/time/time.cal/time.cal.year/time.cal.year.members/plus_minus_equal.pass.cpp (+20-30) 
- (modified) libcxx/test/std/time/time.cal/time.cal.year/time.cal.year.nonmembers/minus.pass.cpp (+20-27) 
- (modified) libcxx/test/std/time/time.cal/time.cal.year/time.cal.year.nonmembers/plus.pass.cpp (+20-28) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ym/time.cal.ym.members/plus_minus_equal_month.pass.cpp (+27-37) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ym/time.cal.ym.members/plus_minus_equal_year.pass.cpp (+27-38) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ym/time.cal.ym.nonmembers/minus.pass.cpp (+40-39) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymd/time.cal.ymd.members/plus_minus_equal_month.pass.cpp (+31-43) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymd/time.cal.ymd.members/plus_minus_equal_year.pass.cpp (+33-43) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymd/time.cal.ymd.nonmembers/plus.pass.cpp (+49-69) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymdlast/time.cal.ymdlast.members/plus_minus_equal_month.pass.cpp (+29-39) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymdlast/time.cal.ymdlast.members/plus_minus_equal_year.pass.cpp (+28-38) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymdlast/time.cal.ymdlast.nonmembers/minus.pass.cpp (+35-49) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymdlast/time.cal.ymdlast.nonmembers/plus.pass.cpp (+47-70) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwd/time.cal.ymwd.members/plus_minus_equal_month.pass.cpp (+45-55) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwd/time.cal.ymwd.members/plus_minus_equal_year.pass.cpp (+42-53) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwd/time.cal.ymwd.nonmembers/minus.pass.cpp (+40-65) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwd/time.cal.ymwd.nonmembers/plus.pass.cpp (+56-76) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwdlast/time.cal.ymwdlast.members/plus_minus_equal_month.pass.cpp (+43-50) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwdlast/time.cal.ymwdlast.members/plus_minus_equal_year.pass.cpp (+41-49) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwdlast/time.cal.ymwdlast.nonmembers/minus.pass.cpp (+41-59) 
- (modified) libcxx/test/std/time/time.cal/time.cal.ymwdlast/time.cal.ymwdlast.nonmembers/plus.pass.cpp (+58-75) 


``````````diff
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]

``````````

</details>


https://github.com/llvm/llvm-project/pull/73356


More information about the libcxx-commits mailing list