// { dg-options "-std=gnu++20" } // { dg-do run { target c++20 } } #include #include void test01() { using namespace std::chrono; tai_seconds tai_epoch{0s}; utc_seconds tai_as_utc{sys_days{1958y/January/1}.time_since_epoch() - 10s}; VERIFY( clock_cast(tai_epoch) == tai_as_utc ); VERIFY( tai_epoch == clock_cast(tai_as_utc) ); sys_days y2k{2000y/January/1}; tai_seconds y2k_as_tai{clock_cast(y2k)}; utc_seconds y2k_as_utc = utc_clock::from_sys(y2k); VERIFY( clock_cast(y2k_as_tai) == y2k_as_utc ); VERIFY( y2k_as_tai == clock_cast(y2k_as_utc) ); } void test02() { using namespace std::chrono; sys_days d{2022y/November/12}; VERIFY( clock_cast(clock_cast(d)) == d ); tai_seconds t(1234567s); VERIFY( clock_cast(clock_cast(t)) == t ); VERIFY( clock_cast(clock_cast(t)) == t ); } void test03() { using namespace std::chrono; tai_time tai1 = tai_clock::now(); utc_time utc = utc_clock::now(); tai_time tai2 = tai_clock::now(); auto delta = tai2 - tai1; VERIFY( (utc - clock_cast(tai1)) <= delta ); VERIFY( (clock_cast(tai2) - utc) <= delta ); tai_seconds s = time_point_cast(tai1); VERIFY( tai1 - s < 1s ); } int main() { test01(); test02(); test03(); }