xref: /llvm-project/libcxx/test/support/test_chrono_leap_second.h (revision 0a1317564a6b437760d96f0a227a3c910875428d)
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 Wever test_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