time_point_cast.pass.cpp revision 713f4db2e5b37ef84c5506fa1b65f3b76798d594
19e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//===----------------------------------------------------------------------===//
29e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//
39e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//                     The LLVM Compiler Infrastructure
49e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//
59e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek// This file is dual licensed under the MIT and the University of Illinois Open
69e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek// Source Licenses. See LICENSE.TXT for details.
79e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//
89e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//===----------------------------------------------------------------------===//
99e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
109e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek// <chrono>
119e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
129e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek// time_point
139e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
149e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek// template <class ToDuration, class Clock, class Duration>
159e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//   time_point<Clock, ToDuration>
169e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek//   time_point_cast(const time_point<Clock, Duration>& t);
179e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
189e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek#include <chrono>
19993f1c72913417be7c534ec7a634363cdfc84fa5Ted Kremenek#include <type_traits>
20993f1c72913417be7c534ec7a634363cdfc84fa5Ted Kremenek#include <cassert>
21993f1c72913417be7c534ec7a634363cdfc84fa5Ted Kremenek
2222ab7a4d900ed53285fd0b6720e7b43af84724d8Zhongxing Xutemplate <class FromDuration, class ToDuration>
23a693d4fa7a6dc31b23837cf38cba7aa2af8f00f3Ted Kremenekvoid
249e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenektest(const FromDuration& df, const ToDuration& d)
259e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek{
26dc0a25d9bff956cdbe54ea0bfc8fbbe3ceb4eb92Zhongxing Xu    typedef std::chrono::system_clock Clock;
27dc0a25d9bff956cdbe54ea0bfc8fbbe3ceb4eb92Zhongxing Xu    typedef std::chrono::time_point<Clock, FromDuration> FromTimePoint;
289e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    typedef std::chrono::time_point<Clock, ToDuration> ToTimePoint;
299e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    {
309e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    FromTimePoint f(df);
319e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    ToTimePoint t(d);
329e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    typedef decltype(std::chrono::time_point_cast<ToDuration>(f)) R;
339e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    static_assert((std::is_same<R, ToTimePoint>::value), "");
349e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    assert(std::chrono::time_point_cast<ToDuration>(f) == t);
359e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    }
369e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek}
379e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
389e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek#if _LIBCPP_STD_VER > 11
399e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
409e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenektemplate<class FromDuration, long long From, class ToDuration, long long To>
41993f1c72913417be7c534ec7a634363cdfc84fa5Ted Kremenekvoid test_constexpr ()
4282bd99f4db2454cc6e1b7bfaac6db25cb3444ddcTed Kremenek{
439e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    typedef std::chrono::system_clock Clock;
449e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    typedef std::chrono::time_point<Clock, FromDuration> FromTimePoint;
4577cfac623178d0c16e16e2f171d20b0fea8fde30Zhongxing Xu    typedef std::chrono::time_point<Clock, ToDuration> ToTimePoint;
46329d6fde79254503b14724e1231a9d70fa6b387fTed Kremenek    {
47dc0a25d9bff956cdbe54ea0bfc8fbbe3ceb4eb92Zhongxing Xu    constexpr FromTimePoint f{FromDuration{From}};
48dc0a25d9bff956cdbe54ea0bfc8fbbe3ceb4eb92Zhongxing Xu    constexpr ToTimePoint   t{ToDuration{To}};
49329d6fde79254503b14724e1231a9d70fa6b387fTed Kremenek    static_assert(std::chrono::time_point_cast<ToDuration>(f) == t, "");
50329d6fde79254503b14724e1231a9d70fa6b387fTed Kremenek    }
51329d6fde79254503b14724e1231a9d70fa6b387fTed Kremenek
52329d6fde79254503b14724e1231a9d70fa6b387fTed Kremenek}
53329d6fde79254503b14724e1231a9d70fa6b387fTed Kremenek
549e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek#endif
559e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek
569e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenekint main()
579e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek{
589e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000), std::chrono::hours(2));
599e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000), std::chrono::minutes(121));
609e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000), std::chrono::seconds(7265));
619e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000), std::chrono::milliseconds(7265000));
629e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000), std::chrono::microseconds(7265000000LL));
639e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000), std::chrono::nanoseconds(7265000000000LL));
649e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::milliseconds(7265000),
659e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek         std::chrono::duration<double, std::ratio<3600> >(7265./3600));
669e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test(std::chrono::duration<int, std::ratio<2, 3> >(9),
67b21ff77c8126ea628b66d2ffb931fdaa7884f5d2Zhongxing Xu         std::chrono::duration<int, std::ratio<3, 5> >(10));
689e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek#if _LIBCPP_STD_VER > 11
699e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    {
709e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test_constexpr<std::chrono::milliseconds, 7265000, std::chrono::hours,    2> ();
71b21ff77c8126ea628b66d2ffb931fdaa7884f5d2Zhongxing Xu    test_constexpr<std::chrono::milliseconds, 7265000, std::chrono::minutes,121> ();
729e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test_constexpr<std::chrono::milliseconds, 7265000, std::chrono::seconds,7265> ();
739e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test_constexpr<std::chrono::milliseconds, 7265000, std::chrono::milliseconds,7265000> ();
749e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test_constexpr<std::chrono::milliseconds, 7265000, std::chrono::microseconds,7265000000LL> ();
759e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test_constexpr<std::chrono::milliseconds, 7265000, std::chrono::nanoseconds,7265000000000LL> ();
769e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    typedef std::chrono::duration<int, std::ratio<3, 5>> T1;
779e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    test_constexpr<std::chrono::duration<int, std::ratio<2, 3>>, 9, T1, 10> ();
789e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek    }
799e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek#endif
809e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek}
819e24049bef26b6289cce9ac9b483c5cbb096e3aeTed Kremenek