// { dg-do run { target c++20 } } // Class month [time.cal.month] #include #include #include using namespace std::chrono; void test_extreme_values(months extreme) { auto const count = extreme.count(); auto const safe = count < 0 ? count + 12 : count; auto const mod = safe - 12 * ((safe < 0 ? safe - 11 : safe) / 12); for (unsigned m = 0; m < 256; ++m) { auto const month_plus_extreme = month{m} + extreme; VERIFY(unsigned{month_plus_extreme } == (m + 11 + mod) % 12 + 1); auto const month_minus_extreme = month{m} - extreme; VERIFY(unsigned{month_minus_extreme} == (m + 11 - mod) % 12 + 1); } } int main() { test_extreme_values(months{std::numeric_limits::max()}); test_extreme_values(months{std::numeric_limits::min()}); return 0; }