blob: 3bcefa60003bc7f09fd0d4c8f82546c17c477604 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
// { dg-do run { target c++20 } }
// Class month [time.cal.month]
#include <chrono>
#include <limits>
#include <testsuite_hooks.h>
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<months::rep>::max()});
test_extreme_values(months{std::numeric_limits<months::rep>::min()});
return 0;
}
|