1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: c++03, c++11, c++14, c++17
10 
11 // <compare>
12 
13 // constexpr bool is_eq  (partial_ordering cmp) noexcept { return cmp == 0; }
14 // constexpr bool is_neq (partial_ordering cmp) noexcept { return cmp != 0; }
15 // constexpr bool is_lt  (partial_ordering cmp) noexcept { return cmp < 0; }
16 // constexpr bool is_lteq(partial_ordering cmp) noexcept { return cmp <= 0; }
17 // constexpr bool is_gt  (partial_ordering cmp) noexcept { return cmp > 0; }
18 // constexpr bool is_gteq(partial_ordering cmp) noexcept { return cmp >= 0; }
19 
20 #include <compare>
21 #include <cassert>
22 
23 #include "test_macros.h"
24 
test()25 constexpr bool test()
26 {
27     assert(!std::is_eq(std::strong_ordering::less));
28     assert( std::is_eq(std::strong_ordering::equal));
29     assert(!std::is_eq(std::strong_ordering::greater));
30     assert(!std::is_eq(std::weak_ordering::less));
31     assert( std::is_eq(std::weak_ordering::equivalent));
32     assert(!std::is_eq(std::weak_ordering::greater));
33     assert(!std::is_eq(std::partial_ordering::less));
34     assert( std::is_eq(std::partial_ordering::equivalent));
35     assert(!std::is_eq(std::partial_ordering::greater));
36     assert(!std::is_eq(std::partial_ordering::unordered));
37 
38     assert( std::is_neq(std::strong_ordering::less));
39     assert(!std::is_neq(std::strong_ordering::equal));
40     assert( std::is_neq(std::strong_ordering::greater));
41     assert( std::is_neq(std::weak_ordering::less));
42     assert(!std::is_neq(std::weak_ordering::equivalent));
43     assert( std::is_neq(std::weak_ordering::greater));
44     assert( std::is_neq(std::partial_ordering::less));
45     assert(!std::is_neq(std::partial_ordering::equivalent));
46     assert( std::is_neq(std::partial_ordering::greater));
47     assert( std::is_neq(std::partial_ordering::unordered));
48 
49     assert( std::is_lt(std::strong_ordering::less));
50     assert(!std::is_lt(std::strong_ordering::equal));
51     assert(!std::is_lt(std::strong_ordering::greater));
52     assert( std::is_lt(std::weak_ordering::less));
53     assert(!std::is_lt(std::weak_ordering::equivalent));
54     assert(!std::is_lt(std::weak_ordering::greater));
55     assert( std::is_lt(std::partial_ordering::less));
56     assert(!std::is_lt(std::partial_ordering::equivalent));
57     assert(!std::is_lt(std::partial_ordering::greater));
58     assert(!std::is_lt(std::partial_ordering::unordered));
59 
60     assert( std::is_lteq(std::strong_ordering::less));
61     assert( std::is_lteq(std::strong_ordering::equal));
62     assert(!std::is_lteq(std::strong_ordering::greater));
63     assert( std::is_lteq(std::weak_ordering::less));
64     assert( std::is_lteq(std::weak_ordering::equivalent));
65     assert(!std::is_lteq(std::weak_ordering::greater));
66     assert( std::is_lteq(std::partial_ordering::less));
67     assert( std::is_lteq(std::partial_ordering::equivalent));
68     assert(!std::is_lteq(std::partial_ordering::greater));
69     assert(!std::is_lteq(std::partial_ordering::unordered));
70 
71     assert(!std::is_gt(std::strong_ordering::less));
72     assert(!std::is_gt(std::strong_ordering::equal));
73     assert( std::is_gt(std::strong_ordering::greater));
74     assert(!std::is_gt(std::weak_ordering::less));
75     assert(!std::is_gt(std::weak_ordering::equivalent));
76     assert( std::is_gt(std::weak_ordering::greater));
77     assert(!std::is_gt(std::partial_ordering::less));
78     assert(!std::is_gt(std::partial_ordering::equivalent));
79     assert( std::is_gt(std::partial_ordering::greater));
80     assert(!std::is_gt(std::partial_ordering::unordered));
81 
82     assert(!std::is_gteq(std::strong_ordering::less));
83     assert( std::is_gteq(std::strong_ordering::equal));
84     assert( std::is_gteq(std::strong_ordering::greater));
85     assert(!std::is_gteq(std::weak_ordering::less));
86     assert( std::is_gteq(std::weak_ordering::equivalent));
87     assert( std::is_gteq(std::weak_ordering::greater));
88     assert(!std::is_gteq(std::partial_ordering::less));
89     assert( std::is_gteq(std::partial_ordering::equivalent));
90     assert( std::is_gteq(std::partial_ordering::greater));
91     assert(!std::is_gteq(std::partial_ordering::unordered));
92 
93     // Test noexceptness.
94     ASSERT_NOEXCEPT(std::is_eq(std::partial_ordering::less));
95     ASSERT_NOEXCEPT(std::is_neq(std::partial_ordering::less));
96     ASSERT_NOEXCEPT(std::is_lt(std::partial_ordering::less));
97     ASSERT_NOEXCEPT(std::is_lteq(std::partial_ordering::less));
98     ASSERT_NOEXCEPT(std::is_gt(std::partial_ordering::less));
99     ASSERT_NOEXCEPT(std::is_gteq(std::partial_ordering::less));
100 
101     return true;
102 }
103 
main(int,char **)104 int main(int, char**) {
105     test();
106     static_assert(test());
107 
108     return 0;
109 }
110