blob: 924709321e5d7fc54e09ee96258192c3e4524b51 (
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 weekday [time.cal.wd]
#include <chrono>
#include <limits>
#include <testsuite_hooks.h>
using namespace std::chrono;
void test_extreme_values(days extreme)
{
auto const count = extreme.count();
auto const safe = count < 0 ? count + 7 : count;
auto const mod = safe - 7 * ((safe < 0 ? safe - 6 : safe) / 7);
for (unsigned d = 0; d < 254; ++d)
{
auto const weekday_plus_extreme = weekday{d} + extreme;
VERIFY(weekday_plus_extreme.c_encoding() == (d + mod) % 7);
auto const weekday_minus_extreme = weekday{d} - extreme;
VERIFY(weekday_minus_extreme.c_encoding() == (d + 7 - mod) % 7);
}
}
int main()
{
test_extreme_values(days{std::numeric_limits<days::rep>::max()});
test_extreme_values(days{std::numeric_limits<days::rep>::min()});
return 0;
}
|