1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <chrono>
11
12// duration
13
14// template <class Rep1, class Period1, class Rep2, class Period2>
15//   constexpr
16//   bool
17//   operator< (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
18
19// template <class Rep1, class Period1, class Rep2, class Period2>
20//   constexpr
21//   bool
22//   operator> (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
23
24// template <class Rep1, class Period1, class Rep2, class Period2>
25//   constexpr
26//   bool
27//   operator<=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
28
29// template <class Rep1, class Period1, class Rep2, class Period2>
30//   constexpr
31//   bool
32//   operator>=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
33
34#include <chrono>
35#include <cassert>
36
37#include "test_macros.h"
38
39int main()
40{
41    {
42    std::chrono::seconds s1(3);
43    std::chrono::seconds s2(3);
44    assert(!(s1 < s2));
45    assert(!(s1 > s2));
46    assert( (s1 <= s2));
47    assert( (s1 >= s2));
48    }
49    {
50    std::chrono::seconds s1(3);
51    std::chrono::seconds s2(4);
52    assert( (s1 < s2));
53    assert(!(s1 > s2));
54    assert( (s1 <= s2));
55    assert(!(s1 >= s2));
56    }
57    {
58    std::chrono::milliseconds s1(3);
59    std::chrono::microseconds s2(3000);
60    assert(!(s1 < s2));
61    assert(!(s1 > s2));
62    assert( (s1 <= s2));
63    assert( (s1 >= s2));
64    }
65    {
66    std::chrono::milliseconds s1(3);
67    std::chrono::microseconds s2(4000);
68    assert( (s1 < s2));
69    assert(!(s1 > s2));
70    assert( (s1 <= s2));
71    assert(!(s1 >= s2));
72    }
73    {
74    std::chrono::duration<int, std::ratio<2, 3> > s1(9);
75    std::chrono::duration<int, std::ratio<3, 5> > s2(10);
76    assert(!(s1 < s2));
77    assert(!(s1 > s2));
78    assert( (s1 <= s2));
79    assert( (s1 >= s2));
80    }
81    {
82    std::chrono::duration<int, std::ratio<2, 3> > s1(10);
83    std::chrono::duration<int, std::ratio<3, 5> > s2(9);
84    assert(!(s1 < s2));
85    assert( (s1 > s2));
86    assert(!(s1 <= s2));
87    assert( (s1 >= s2));
88    }
89    {
90    std::chrono::duration<int, std::ratio<2, 3> > s1(9);
91    std::chrono::duration<double, std::ratio<3, 5> > s2(10);
92    assert(!(s1 < s2));
93    assert(!(s1 > s2));
94    assert( (s1 <= s2));
95    assert( (s1 >= s2));
96    }
97#if TEST_STD_VER >= 11
98    {
99    constexpr std::chrono::seconds s1(3);
100    constexpr std::chrono::seconds s2(3);
101    static_assert(!(s1 < s2), "");
102    static_assert(!(s1 > s2), "");
103    static_assert( (s1 <= s2), "");
104    static_assert( (s1 >= s2), "");
105    }
106    {
107    constexpr std::chrono::seconds s1(3);
108    constexpr std::chrono::seconds s2(4);
109    static_assert( (s1 < s2), "");
110    static_assert(!(s1 > s2), "");
111    static_assert( (s1 <= s2), "");
112    static_assert(!(s1 >= s2), "");
113    }
114    {
115    constexpr std::chrono::milliseconds s1(3);
116    constexpr std::chrono::microseconds s2(3000);
117    static_assert(!(s1 < s2), "");
118    static_assert(!(s1 > s2), "");
119    static_assert( (s1 <= s2), "");
120    static_assert( (s1 >= s2), "");
121    }
122    {
123    constexpr std::chrono::milliseconds s1(3);
124    constexpr std::chrono::microseconds s2(4000);
125    static_assert( (s1 < s2), "");
126    static_assert(!(s1 > s2), "");
127    static_assert( (s1 <= s2), "");
128    static_assert(!(s1 >= s2), "");
129    }
130    {
131    constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9);
132    constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(10);
133    static_assert(!(s1 < s2), "");
134    static_assert(!(s1 > s2), "");
135    static_assert( (s1 <= s2), "");
136    static_assert( (s1 >= s2), "");
137    }
138    {
139    constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(10);
140    constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(9);
141    static_assert(!(s1 < s2), "");
142    static_assert( (s1 > s2), "");
143    static_assert(!(s1 <= s2), "");
144    static_assert( (s1 >= s2), "");
145    }
146    {
147    constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9);
148    constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(10);
149    static_assert(!(s1 < s2), "");
150    static_assert(!(s1 > s2), "");
151    static_assert( (s1 <= s2), "");
152    static_assert( (s1 >= s2), "");
153    }
154#endif
155}
156