16f2d8cc0SMark de Wever //===----------------------------------------------------------------------===// 26f2d8cc0SMark de Wever // 36f2d8cc0SMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 46f2d8cc0SMark de Wever // See https://llvm.org/LICENSE.txt for license information. 56f2d8cc0SMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66f2d8cc0SMark de Wever // 76f2d8cc0SMark de Wever //===----------------------------------------------------------------------===// 86f2d8cc0SMark de Wever 96f2d8cc0SMark de Wever // UNSUPPORTED: c++03, c++11, c++14, c++17 106f2d8cc0SMark de Wever // UNSUPPORTED: no-filesystem, no-localization, no-tzdb 116f2d8cc0SMark de Wever 12a4422a51SMark de Wever // XFAIL: libcpp-has-no-experimental-tzdb 136f2d8cc0SMark de Wever // XFAIL: availability-tzdb-missing 146f2d8cc0SMark de Wever 156f2d8cc0SMark de Wever // <chrono> 166f2d8cc0SMark de Wever 176f2d8cc0SMark de Wever // class leap_second; 186f2d8cc0SMark de Wever 196f2d8cc0SMark de Wever // constexpr seconds value() const noexcept; 206f2d8cc0SMark de Wever 216f2d8cc0SMark de Wever #include <cassert> 226f2d8cc0SMark de Wever #include <chrono> 23*2e43a304SNikolas Klauser #include <concepts> 246f2d8cc0SMark de Wever 256f2d8cc0SMark de Wever #include "test_macros.h" 266f2d8cc0SMark de Wever 276f2d8cc0SMark de Wever #include "test_chrono_leap_second.h" 286f2d8cc0SMark de Wever 296f2d8cc0SMark de Wever constexpr void test(const std::chrono::leap_second leap_second, std::chrono::seconds expected) { 306f2d8cc0SMark de Wever std::same_as<std::chrono::seconds> auto value = leap_second.value(); 316f2d8cc0SMark de Wever assert(value == expected); 326f2d8cc0SMark de Wever static_assert(noexcept(leap_second.value())); 336f2d8cc0SMark de Wever } 346f2d8cc0SMark de Wever 356f2d8cc0SMark de Wever constexpr bool test() { 366f2d8cc0SMark de Wever test(test_leap_second_create(std::chrono::sys_seconds{std::chrono::seconds{0}}, std::chrono::seconds{1}), 376f2d8cc0SMark de Wever std::chrono::seconds{1}); 386f2d8cc0SMark de Wever 396f2d8cc0SMark de Wever return true; 406f2d8cc0SMark de Wever } 416f2d8cc0SMark de Wever 426f2d8cc0SMark de Wever int main(int, const char**) { 436f2d8cc0SMark de Wever test(); 446f2d8cc0SMark de Wever static_assert(test()); 456f2d8cc0SMark de Wever 466f2d8cc0SMark de Wever // test with the real tzdb 476f2d8cc0SMark de Wever const std::chrono::tzdb& tzdb = std::chrono::get_tzdb(); 486f2d8cc0SMark de Wever assert(!tzdb.leap_seconds.empty()); 496f2d8cc0SMark de Wever test(tzdb.leap_seconds[0], tzdb.leap_seconds[0].value()); 506f2d8cc0SMark de Wever 516f2d8cc0SMark de Wever return 0; 526f2d8cc0SMark de Wever } 53