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