|
| 1 | +#include <time_shield/time_zone_conversions.hpp> |
| 2 | +#include <time_shield/time_conversions.hpp> |
| 3 | +#include <cassert> |
| 4 | + |
| 5 | +/// \brief Round-trip tests for GMT and CET/EET conversions around DST boundaries. |
| 6 | +int main() { |
| 7 | + using namespace time_shield; |
| 8 | + |
| 9 | + for(int year : {2021, 2022, 2023, 2024}) { |
| 10 | + int start_day = last_sunday_month_day(year, MAR); |
| 11 | + |
| 12 | + ts_t cet_start_before = to_timestamp(year, int(MAR), start_day, 1, 59, 0); |
| 13 | + ts_t gmt_from_cet_before = cet_to_gmt(cet_start_before); |
| 14 | + assert(gmt_to_cet(gmt_from_cet_before) == cet_start_before); |
| 15 | + |
| 16 | + ts_t cet_start_after = to_timestamp(year, int(MAR), start_day, 3, 0, 0); |
| 17 | + ts_t gmt_from_cet_after = cet_to_gmt(cet_start_after); |
| 18 | + assert(gmt_to_cet(gmt_from_cet_after) == cet_start_after); |
| 19 | + |
| 20 | + ts_t eet_start_before = to_timestamp(year, int(MAR), start_day, 2, 59, 0); |
| 21 | + ts_t gmt_from_eet_before = eet_to_gmt(eet_start_before); |
| 22 | + assert(gmt_to_eet(gmt_from_eet_before) == eet_start_before); |
| 23 | + |
| 24 | + ts_t eet_start_after = to_timestamp(year, int(MAR), start_day, 4, 0, 0); |
| 25 | + ts_t gmt_from_eet_after = eet_to_gmt(eet_start_after); |
| 26 | + assert(gmt_to_eet(gmt_from_eet_after) == eet_start_after); |
| 27 | + |
| 28 | + int end_day = last_sunday_month_day(year, OCT); |
| 29 | + |
| 30 | + ts_t cet_end_before = to_timestamp(year, int(OCT), end_day, 1, 59, 0); |
| 31 | + ts_t gmt_from_cet_end_before = cet_to_gmt(cet_end_before); |
| 32 | + assert(gmt_to_cet(gmt_from_cet_end_before) == cet_end_before); |
| 33 | + |
| 34 | + ts_t cet_end_after = to_timestamp(year, int(OCT), end_day, 3, 0, 0); |
| 35 | + ts_t gmt_from_cet_end_after = cet_to_gmt(cet_end_after); |
| 36 | + assert(gmt_to_cet(gmt_from_cet_end_after) == cet_end_after); |
| 37 | + |
| 38 | + ts_t eet_end_before = to_timestamp(year, int(OCT), end_day, 3, 59, 0); |
| 39 | + ts_t gmt_from_eet_end_before = eet_to_gmt(eet_end_before); |
| 40 | + assert(gmt_to_eet(gmt_from_eet_end_before) == eet_end_before); |
| 41 | + |
| 42 | + ts_t eet_end_after = to_timestamp(year, int(OCT), end_day, 4, 0, 0); |
| 43 | + ts_t gmt_from_eet_end_after = eet_to_gmt(eet_end_after); |
| 44 | + assert(gmt_to_eet(gmt_from_eet_end_after) == eet_end_after); |
| 45 | + } |
| 46 | + |
| 47 | + return 0; |
| 48 | +} |
0 commit comments