1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <chrono>
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// time_point
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Clock, class Duration1, class Duration2>
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   bool
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   operator< (const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Clock, class Duration1, class Duration2>
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   bool
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   operator> (const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Clock, class Duration1, class Duration2>
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   bool
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   operator<=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Clock, class Duration1, class Duration2>
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   bool
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   operator>=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <chrono>
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::chrono::system_clock Clock;
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::chrono::milliseconds Duration1;
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::chrono::microseconds Duration2;
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::chrono::time_point<Clock, Duration1> T1;
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::chrono::time_point<Clock, Duration2> T2;
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T1 t1(Duration1(3));
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T1 t2(Duration1(3));
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 <  t2));
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 >  t2));
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 <= t2));
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 >= t2));
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T1 t1(Duration1(3));
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T1 t2(Duration1(4));
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 <  t2));
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 >  t2));
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 <= t2));
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 >= t2));
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T1 t1(Duration1(3));
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T2 t2(Duration2(3000));
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 <  t2));
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 >  t2));
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 <= t2));
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 >= t2));
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T1 t1(Duration1(3));
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    T2 t2(Duration2(3001));
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 <  t2));
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 >  t2));
70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert( (t1 <= t2));
71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(!(t1 >= t2));
72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
735de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh
745de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh#if _LIBCPP_STD_VER > 11
755de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    {
765de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T1 t1(Duration1(3));
775de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T1 t2(Duration1(3));
785de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 <  t2), "");
795de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 >  t2), "");
805de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 <= t2), "");
815de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 >= t2), "");
825de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    }
835de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    {
845de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T1 t1(Duration1(3));
855de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T1 t2(Duration1(4));
865de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 <  t2), "");
875de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 >  t2), "");
885de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 <= t2), "");
895de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 >= t2), "");
905de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    }
915de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    {
925de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T1 t1(Duration1(3));
935de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T2 t2(Duration2(3000));
945de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 <  t2), "");
955de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 >  t2), "");
965de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 <= t2), "");
975de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 >= t2), "");
985de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    }
995de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    {
1005de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T1 t1(Duration1(3));
1015de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    constexpr T2 t2(Duration2(3001));
1025de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 <  t2), "");
1035de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 >  t2), "");
1045de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert( (t1 <= t2), "");
1055de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    static_assert(!(t1 >= t2), "");
1065de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh    }
1075de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh#endif
108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
109