Skip to content

[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

Merged
merged 1 commit into from
Nov 28, 2023

Conversation

mordante
Copy link
Member

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

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
@mordante mordante requested a review from a team as a code owner November 24, 2023 18:32
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Nov 24, 2023
@llvmbot
Copy link
Member

llvmbot commented Nov 24, 2023

@llvm/pr-subscribers-libcxx

Author: Mark de Wever (mordante)

Changes

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

Copy link
Member

@ldionne ldionne left a 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!

@mordante mordante merged commit efac016 into llvm:main Nov 28, 2023
@mordante mordante deleted the GH-time.cal_test_refactoring branch November 28, 2023 18:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants