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 #include <chrono>
24*7738db2cSMark de Wever #include <cassert>
25*7738db2cSMark de Wever #include <ratio>
26*7738db2cSMark de Wever 
27*7738db2cSMark de Wever #include "test_macros.h"
28*7738db2cSMark de Wever 
main(int,char **)29*7738db2cSMark de Wever int main(int, char**)
30*7738db2cSMark de Wever {
31*7738db2cSMark de Wever     {
32*7738db2cSMark de Wever     std::chrono::seconds s1(3);
33*7738db2cSMark de Wever     std::chrono::seconds s2(3);
34*7738db2cSMark de Wever     assert(s1 == s2);
35*7738db2cSMark de Wever     assert(!(s1 != s2));
36*7738db2cSMark de Wever     }
37*7738db2cSMark de Wever     {
38*7738db2cSMark de Wever     std::chrono::seconds s1(3);
39*7738db2cSMark de Wever     std::chrono::seconds s2(4);
40*7738db2cSMark de Wever     assert(!(s1 == s2));
41*7738db2cSMark de Wever     assert(s1 != s2);
42*7738db2cSMark de Wever     }
43*7738db2cSMark de Wever     {
44*7738db2cSMark de Wever     std::chrono::milliseconds s1(3);
45*7738db2cSMark de Wever     std::chrono::microseconds s2(3000);
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::milliseconds s1(3);
51*7738db2cSMark de Wever     std::chrono::microseconds s2(4000);
52*7738db2cSMark de Wever     assert(!(s1 == s2));
53*7738db2cSMark de Wever     assert(s1 != s2);
54*7738db2cSMark de Wever     }
55*7738db2cSMark de Wever     {
56*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<2, 3> > s1(9);
57*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<3, 5> > s2(10);
58*7738db2cSMark de Wever     assert(s1 == s2);
59*7738db2cSMark de Wever     assert(!(s1 != s2));
60*7738db2cSMark de Wever     }
61*7738db2cSMark de Wever     {
62*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<2, 3> > s1(10);
63*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<3, 5> > s2(9);
64*7738db2cSMark de Wever     assert(!(s1 == s2));
65*7738db2cSMark de Wever     assert(s1 != s2);
66*7738db2cSMark de Wever     }
67*7738db2cSMark de Wever     {
68*7738db2cSMark de Wever     std::chrono::duration<int, std::ratio<2, 3> > s1(9);
69*7738db2cSMark de Wever     std::chrono::duration<double, std::ratio<3, 5> > s2(10);
70*7738db2cSMark de Wever     assert(s1 == s2);
71*7738db2cSMark de Wever     assert(!(s1 != s2));
72*7738db2cSMark de Wever     }
73*7738db2cSMark de Wever #if TEST_STD_VER >= 11
74*7738db2cSMark de Wever     {
75*7738db2cSMark de Wever     constexpr std::chrono::seconds s1(3);
76*7738db2cSMark de Wever     constexpr std::chrono::seconds s2(3);
77*7738db2cSMark de Wever     static_assert(s1 == s2, "");
78*7738db2cSMark de Wever     static_assert(!(s1 != s2), "");
79*7738db2cSMark de Wever     }
80*7738db2cSMark de Wever     {
81*7738db2cSMark de Wever     constexpr std::chrono::seconds s1(3);
82*7738db2cSMark de Wever     constexpr std::chrono::seconds s2(4);
83*7738db2cSMark de Wever     static_assert(!(s1 == s2), "");
84*7738db2cSMark de Wever     static_assert(s1 != s2, "");
85*7738db2cSMark de Wever     }
86*7738db2cSMark de Wever     {
87*7738db2cSMark de Wever     constexpr std::chrono::milliseconds s1(3);
88*7738db2cSMark de Wever     constexpr std::chrono::microseconds s2(3000);
89*7738db2cSMark de Wever     static_assert(s1 == s2, "");
90*7738db2cSMark de Wever     static_assert(!(s1 != s2), "");
91*7738db2cSMark de Wever     }
92*7738db2cSMark de Wever     {
93*7738db2cSMark de Wever     constexpr std::chrono::milliseconds s1(3);
94*7738db2cSMark de Wever     constexpr std::chrono::microseconds s2(4000);
95*7738db2cSMark de Wever     static_assert(!(s1 == s2), "");
96*7738db2cSMark de Wever     static_assert(s1 != s2, "");
97*7738db2cSMark de Wever     }
98*7738db2cSMark de Wever     {
99*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9);
100*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(10);
101*7738db2cSMark de Wever     static_assert(s1 == s2, "");
102*7738db2cSMark de Wever     static_assert(!(s1 != s2), "");
103*7738db2cSMark de Wever     }
104*7738db2cSMark de Wever     {
105*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(10);
106*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(9);
107*7738db2cSMark de Wever     static_assert(!(s1 == s2), "");
108*7738db2cSMark de Wever     static_assert(s1 != s2, "");
109*7738db2cSMark de Wever     }
110*7738db2cSMark de Wever     {
111*7738db2cSMark de Wever     constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9);
112*7738db2cSMark de Wever     constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(10);
113*7738db2cSMark de Wever     static_assert(s1 == s2, "");
114*7738db2cSMark de Wever     static_assert(!(s1 != s2), "");
115*7738db2cSMark de Wever     }
116*7738db2cSMark de Wever #endif
117*7738db2cSMark de Wever 
118*7738db2cSMark de Wever   return 0;
119*7738db2cSMark de Wever }
120