xref: /llvm-project/libcxx/test/std/time/time.duration/time.duration.comparisons/op_less.pass.cpp (revision 7738db2c06b177fe916ac1bcf3633449b3c1fca9)
1*7738db2cSMark de Wever //===----------------------------------------------------------------------===//
2*7738db2cSMark de Wever //
3*7738db2cSMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*7738db2cSMark de Wever // See https://llvm.org/LICENSE.txt for license information.
5*7738db2cSMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*7738db2cSMark de Wever //
7*7738db2cSMark de Wever //===----------------------------------------------------------------------===//
8*7738db2cSMark de Wever 
9*7738db2cSMark de Wever // <chrono>
10*7738db2cSMark de Wever 
11*7738db2cSMark de Wever // duration
12*7738db2cSMark de Wever 
13*7738db2cSMark de Wever // template <class Rep1, class Period1, class Rep2, class Period2>
14*7738db2cSMark de Wever //   constexpr
15*7738db2cSMark de Wever //   bool
16*7738db2cSMark de Wever //   operator< (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
17*7738db2cSMark de Wever 
18*7738db2cSMark de Wever // template <class Rep1, class Period1, class Rep2, class Period2>
19*7738db2cSMark de Wever //   constexpr
20*7738db2cSMark de Wever //   bool
21*7738db2cSMark de Wever //   operator> (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
22*7738db2cSMark de Wever 
23*7738db2cSMark de Wever // template <class Rep1, class Period1, class Rep2, class Period2>
24*7738db2cSMark de Wever //   constexpr
25*7738db2cSMark de Wever //   bool
26*7738db2cSMark de Wever //   operator<=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
27*7738db2cSMark de Wever 
28*7738db2cSMark de Wever // template <class Rep1, class Period1, class Rep2, class Period2>
29*7738db2cSMark de Wever //   constexpr
30*7738db2cSMark de Wever //   bool
31*7738db2cSMark de Wever //   operator>=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
32*7738db2cSMark de Wever 
33*7738db2cSMark de Wever #include <chrono>
34*7738db2cSMark de Wever #include <cassert>
35*7738db2cSMark de Wever #include <ratio>
36*7738db2cSMark de Wever 
37*7738db2cSMark de Wever #include "test_macros.h"
38*7738db2cSMark de Wever 
main(int,char **)39*7738db2cSMark de Wever int main(int, char**)
40*7738db2cSMark de Wever {
41*7738db2cSMark de Wever     {
42*7738db2cSMark de Wever     std::chrono::seconds s1(3);
43*7738db2cSMark de Wever     std::chrono::seconds s2(3);
44*7738db2cSMark de Wever     assert(!(s1 < s2));
45*7738db2cSMark de Wever     assert(!(s1 > s2));
46*7738db2cSMark de Wever     assert( (s1 <= s2));
47*7738db2cSMark de Wever     assert( (s1 >= s2));
48*7738db2cSMark de Wever     }
49*7738db2cSMark de Wever     {
50*7738db2cSMark de Wever     std::chrono::seconds s1(3);
51*7738db2cSMark de Wever     std::chrono::seconds s2(4);
52*7738db2cSMark de Wever     assert( (s1 < s2));
53*7738db2cSMark de Wever     assert(!(s1 > s2));
54*7738db2cSMark de Wever     assert( (s1 <= s2));
55*7738db2cSMark de Wever     assert(!(s1 >= s2));
56*7738db2cSMark de Wever     }
57*7738db2cSMark de Wever     {
58*7738db2cSMark de Wever     std::chrono::milliseconds s1(3);
59*7738db2cSMark de Wever     std::chrono::microseconds s2(3000);
60*7738db2cSMark de Wever     assert(!(s1 < s2));
61*7738db2cSMark de Wever     assert(!(s1 > s2));
62*7738db2cSMark de Wever     assert( (s1 <= s2));
63*7738db2cSMark de Wever     assert( (s1 >= s2));
64*7738db2cSMark de Wever     }
65*7738db2cSMark de Wever     {
66*7738db2cSMark de Wever     std::chrono::milliseconds s1(3);
67*7738db2cSMark de Wever     std::chrono::microseconds s2(4000);
68*7738db2cSMark de Wever     assert( (s1 < s2));
69*7738db2cSMark de Wever     assert(!(s1 > s2));
70*7738db2cSMark de Wever     assert( (s1 <= s2));
71*7738db2cSMark de Wever     assert(!(s1 >= s2));
72*7738db2cSMark de Wever     }
73*7738db2cSMark de Wever     {
74*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<2, 3> > s1(9);
75*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<3, 5> > s2(10);
76*7738db2cSMark de Wever     assert(!(s1 < s2));
77*7738db2cSMark de Wever     assert(!(s1 > s2));
78*7738db2cSMark de Wever     assert( (s1 <= s2));
79*7738db2cSMark de Wever     assert( (s1 >= s2));
80*7738db2cSMark de Wever     }
81*7738db2cSMark de Wever     {
82*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<2, 3> > s1(10);
83*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<3, 5> > s2(9);
84*7738db2cSMark de Wever     assert(!(s1 < s2));
85*7738db2cSMark de Wever     assert( (s1 > s2));
86*7738db2cSMark de Wever     assert(!(s1 <= s2));
87*7738db2cSMark de Wever     assert( (s1 >= s2));
88*7738db2cSMark de Wever     }
89*7738db2cSMark de Wever     {
90*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<2, 3> > s1(9);
91*7738db2cSMark de Wever     std::chrono::duration<double, std::ratio<3, 5> > s2(10);
92*7738db2cSMark de Wever     assert(!(s1 < s2));
93*7738db2cSMark de Wever     assert(!(s1 > s2));
94*7738db2cSMark de Wever     assert( (s1 <= s2));
95*7738db2cSMark de Wever     assert( (s1 >= s2));
96*7738db2cSMark de Wever     }
97*7738db2cSMark de Wever #if TEST_STD_VER >= 11
98*7738db2cSMark de Wever     {
99*7738db2cSMark de Wever     constexpr std::chrono::seconds s1(3);
100*7738db2cSMark de Wever     constexpr std::chrono::seconds s2(3);
101*7738db2cSMark de Wever     static_assert(!(s1 < s2), "");
102*7738db2cSMark de Wever     static_assert(!(s1 > s2), "");
103*7738db2cSMark de Wever     static_assert( (s1 <= s2), "");
104*7738db2cSMark de Wever     static_assert( (s1 >= s2), "");
105*7738db2cSMark de Wever     }
106*7738db2cSMark de Wever     {
107*7738db2cSMark de Wever     constexpr std::chrono::seconds s1(3);
108*7738db2cSMark de Wever     constexpr std::chrono::seconds s2(4);
109*7738db2cSMark de Wever     static_assert( (s1 < s2), "");
110*7738db2cSMark de Wever     static_assert(!(s1 > s2), "");
111*7738db2cSMark de Wever     static_assert( (s1 <= s2), "");
112*7738db2cSMark de Wever     static_assert(!(s1 >= s2), "");
113*7738db2cSMark de Wever     }
114*7738db2cSMark de Wever     {
115*7738db2cSMark de Wever     constexpr std::chrono::milliseconds s1(3);
116*7738db2cSMark de Wever     constexpr std::chrono::microseconds s2(3000);
117*7738db2cSMark de Wever     static_assert(!(s1 < s2), "");
118*7738db2cSMark de Wever     static_assert(!(s1 > s2), "");
119*7738db2cSMark de Wever     static_assert( (s1 <= s2), "");
120*7738db2cSMark de Wever     static_assert( (s1 >= s2), "");
121*7738db2cSMark de Wever     }
122*7738db2cSMark de Wever     {
123*7738db2cSMark de Wever     constexpr std::chrono::milliseconds s1(3);
124*7738db2cSMark de Wever     constexpr std::chrono::microseconds s2(4000);
125*7738db2cSMark de Wever     static_assert( (s1 < s2), "");
126*7738db2cSMark de Wever     static_assert(!(s1 > s2), "");
127*7738db2cSMark de Wever     static_assert( (s1 <= s2), "");
128*7738db2cSMark de Wever     static_assert(!(s1 >= s2), "");
129*7738db2cSMark de Wever     }
130*7738db2cSMark de Wever     {
131*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9);
132*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(10);
133*7738db2cSMark de Wever     static_assert(!(s1 < s2), "");
134*7738db2cSMark de Wever     static_assert(!(s1 > s2), "");
135*7738db2cSMark de Wever     static_assert( (s1 <= s2), "");
136*7738db2cSMark de Wever     static_assert( (s1 >= s2), "");
137*7738db2cSMark de Wever     }
138*7738db2cSMark de Wever     {
139*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(10);
140*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(9);
141*7738db2cSMark de Wever     static_assert(!(s1 < s2), "");
142*7738db2cSMark de Wever     static_assert( (s1 > s2), "");
143*7738db2cSMark de Wever     static_assert(!(s1 <= s2), "");
144*7738db2cSMark de Wever     static_assert( (s1 >= s2), "");
145*7738db2cSMark de Wever     }
146*7738db2cSMark de Wever     {
147*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9);
148*7738db2cSMark de Wever     constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(10);
149*7738db2cSMark de Wever     static_assert(!(s1 < s2), "");
150*7738db2cSMark de Wever     static_assert(!(s1 > s2), "");
151*7738db2cSMark de Wever     static_assert( (s1 <= s2), "");
152*7738db2cSMark de Wever     static_assert( (s1 >= s2), "");
153*7738db2cSMark de Wever     }
154*7738db2cSMark de Wever #endif
155*7738db2cSMark de Wever 
156*7738db2cSMark de Wever   return 0;
157*7738db2cSMark de Wever }
158