1*83542e47SHristo Hristov //===----------------------------------------------------------------------===//
2*83542e47SHristo Hristov //
3*83542e47SHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*83542e47SHristo Hristov // See https://llvm.org/LICENSE.txt for license information.
5*83542e47SHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*83542e47SHristo Hristov //
7*83542e47SHristo Hristov //===----------------------------------------------------------------------===//
8*83542e47SHristo Hristov
9*83542e47SHristo Hristov // UNSUPPORTED: c++03, c++11, c++14, c++17
10*83542e47SHristo Hristov
11*83542e47SHristo Hristov // <chrono>
12*83542e47SHristo Hristov
13*83542e47SHristo Hristov // duration
14*83542e47SHristo Hristov
15*83542e47SHristo Hristov // template<class Rep1, class Period1, class Rep2, class Period2>
16*83542e47SHristo Hristov // requires ThreeWayComparable<typename CT::rep>
17*83542e47SHristo Hristov // constexpr auto operator<=>(const duration<Rep1, Period1>& lhs,
18*83542e47SHristo Hristov // const duration<Rep2, Period2>& rhs);
19*83542e47SHristo Hristov
20*83542e47SHristo Hristov #include <cassert>
21*83542e47SHristo Hristov #include <chrono>
22*83542e47SHristo Hristov #include <ratio>
23*83542e47SHristo Hristov
24*83542e47SHristo Hristov #include "test_comparisons.h"
25*83542e47SHristo Hristov
test()26*83542e47SHristo Hristov constexpr bool test() {
27*83542e47SHristo Hristov {
28*83542e47SHristo Hristov std::chrono::seconds s1(3);
29*83542e47SHristo Hristov std::chrono::seconds s2(3);
30*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::equal);
31*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::equal));
32*83542e47SHristo Hristov }
33*83542e47SHristo Hristov {
34*83542e47SHristo Hristov std::chrono::seconds s1(3);
35*83542e47SHristo Hristov std::chrono::seconds s2(4);
36*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::less);
37*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::less));
38*83542e47SHristo Hristov }
39*83542e47SHristo Hristov {
40*83542e47SHristo Hristov std::chrono::milliseconds s1(3);
41*83542e47SHristo Hristov std::chrono::microseconds s2(3000);
42*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::equal);
43*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::equal));
44*83542e47SHristo Hristov }
45*83542e47SHristo Hristov {
46*83542e47SHristo Hristov std::chrono::milliseconds s1(3);
47*83542e47SHristo Hristov std::chrono::microseconds s2(4000);
48*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::less);
49*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::less));
50*83542e47SHristo Hristov }
51*83542e47SHristo Hristov {
52*83542e47SHristo Hristov std::chrono::duration<int, std::ratio<2, 3>> s1(9);
53*83542e47SHristo Hristov std::chrono::duration<int, std::ratio<3, 5>> s2(10);
54*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::equal);
55*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::equal));
56*83542e47SHristo Hristov }
57*83542e47SHristo Hristov {
58*83542e47SHristo Hristov std::chrono::duration<int, std::ratio<2, 3>> s1(10);
59*83542e47SHristo Hristov std::chrono::duration<int, std::ratio<3, 5>> s2(9);
60*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::greater);
61*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::greater));
62*83542e47SHristo Hristov }
63*83542e47SHristo Hristov {
64*83542e47SHristo Hristov std::chrono::duration<int, std::ratio<2, 3>> s1(9);
65*83542e47SHristo Hristov std::chrono::duration<double, std::ratio<3, 5>> s2(10.1);
66*83542e47SHristo Hristov assert((s1 <=> s2) == std::strong_ordering::less);
67*83542e47SHristo Hristov assert(testOrder(s1, s2, std::strong_ordering::less));
68*83542e47SHristo Hristov }
69*83542e47SHristo Hristov
70*83542e47SHristo Hristov return true;
71*83542e47SHristo Hristov }
72*83542e47SHristo Hristov
main(int,char **)73*83542e47SHristo Hristov int main(int, char**) {
74*83542e47SHristo Hristov assert(test());
75*83542e47SHristo Hristov static_assert(test());
76*83542e47SHristo Hristov return 0;
77*83542e47SHristo Hristov }
78