16f2d8cc0SMark de Wever // -*- C++ -*- 26f2d8cc0SMark de Wever //===----------------------------------------------------------------------===// 36f2d8cc0SMark de Wever // 46f2d8cc0SMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 56f2d8cc0SMark de Wever // See https://llvm.org/LICENSE.txt for license information. 66f2d8cc0SMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 76f2d8cc0SMark de Wever // 86f2d8cc0SMark de Wever //===----------------------------------------------------------------------===// 96f2d8cc0SMark de Wever 106f2d8cc0SMark de Wever #ifndef SUPPORT_TEST_CHRONO_LEAP_SECOND_HPP 116f2d8cc0SMark de Wever #define SUPPORT_TEST_CHRONO_LEAP_SECOND_HPP 126f2d8cc0SMark de Wever 136f2d8cc0SMark de Wever // Contains helper functions to create a std::chrono::leap_second. 146f2d8cc0SMark de Wever // 156f2d8cc0SMark de Wever // Since the standard doesn't specify how a @ref std::chrono::leap_second is 166f2d8cc0SMark de Wever // constructed this is implementation defined. To make the public API tests of 176f2d8cc0SMark de Wever // the class generic this header defines helper functions to create the 186f2d8cc0SMark de Wever // required object. 196f2d8cc0SMark de Wever // 206f2d8cc0SMark de Wever // Note This requires every standard library implementation to write their own 216f2d8cc0SMark de Wever // helper function. Vendors are encouraged to create a pull request at 226f2d8cc0SMark de Wever // https://github.com/llvm/llvm-project so their specific implementation can be 236f2d8cc0SMark de Wever // part of this file. 246f2d8cc0SMark de Wever 256f2d8cc0SMark de Wever #include "test_macros.h" 266f2d8cc0SMark de Wever 276f2d8cc0SMark de Wever #if TEST_STD_VER < 20 286f2d8cc0SMark de Wever # error "The format header requires at least C++20" 296f2d8cc0SMark de Wever #endif 306f2d8cc0SMark de Wever 316f2d8cc0SMark de Wever #include <chrono> 326f2d8cc0SMark de Wever 336f2d8cc0SMark de Wever #ifdef _LIBCPP_VERSION 346f2d8cc0SMark de Wever 35*0a131756SMark de Wever # include <__utility/private_constructor_tag.h> 366f2d8cc0SMark de Wever 376f2d8cc0SMark de Wever inline constexpr std::chrono::leap_second test_leap_second_create(const std::chrono::sys_seconds & date,const std::chrono::seconds & value)386f2d8cc0SMark de Wevertest_leap_second_create(const std::chrono::sys_seconds& date, const std::chrono::seconds& value) { 39*0a131756SMark de Wever return std::chrono::leap_second{std::__private_constructor_tag{}, date, value}; 406f2d8cc0SMark de Wever } 416f2d8cc0SMark de Wever 426f2d8cc0SMark de Wever #else // _LIBCPP_VERSION 436f2d8cc0SMark de Wever # error \ 446f2d8cc0SMark de Wever "Please create a vendor specific version of the test typedef and file a PR at https://github.com/llvm/llvm-project" 456f2d8cc0SMark de Wever #endif // _LIBCPP_VERSION 466f2d8cc0SMark de Wever 476f2d8cc0SMark de Wever #endif // SUPPORT_TEST_CHRONO_LEAP_SECOND_HPP 48