xref: /llvm-project/libcxx/test/std/containers/sequences/vector.bool/compare.three_way.pass.cpp (revision 55ec808a889726e0547b7e2f0aa12bc197f6d163)
1*55ec808aSHristo Hristov //===----------------------------------------------------------------------===//
2*55ec808aSHristo Hristov //
3*55ec808aSHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*55ec808aSHristo Hristov // See https://llvm.org/LICENSE.txt for license information.
5*55ec808aSHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*55ec808aSHristo Hristov //
7*55ec808aSHristo Hristov //===----------------------------------------------------------------------===//
8*55ec808aSHristo Hristov // UNSUPPORTED: c++03, c++11, c++14, c++17
9*55ec808aSHristo Hristov 
10*55ec808aSHristo Hristov // <vector>
11*55ec808aSHristo Hristov 
12*55ec808aSHristo Hristov // class vector<bool, Allocator>
13*55ec808aSHristo Hristov 
14*55ec808aSHristo Hristov // template<class T, class Allocator>
15*55ec808aSHristo Hristov //   constexpr synth-three-way-result<T> operator<=>(const vector<T, Allocator>& x,
16*55ec808aSHristo Hristov //                                                   const vector<T, Allocator>& y);
17*55ec808aSHristo Hristov 
18*55ec808aSHristo Hristov #include <cassert>
19*55ec808aSHristo Hristov #include <vector>
20*55ec808aSHristo Hristov 
21*55ec808aSHristo Hristov #include "test_comparisons.h"
22*55ec808aSHristo Hristov 
test_sequence_container_spaceship_vectorbool()23*55ec808aSHristo Hristov constexpr bool test_sequence_container_spaceship_vectorbool() {
24*55ec808aSHristo Hristov   // Empty containers
25*55ec808aSHristo Hristov   {
26*55ec808aSHristo Hristov     std::vector<bool> l1;
27*55ec808aSHristo Hristov     std::vector<bool> l2;
28*55ec808aSHristo Hristov     assert(testOrder(l1, l2, std::strong_ordering::equivalent));
29*55ec808aSHristo Hristov   }
30*55ec808aSHristo Hristov   // Identical contents
31*55ec808aSHristo Hristov   {
32*55ec808aSHristo Hristov     std::vector<bool> t1{true, true};
33*55ec808aSHristo Hristov     std::vector<bool> t2{true, true};
34*55ec808aSHristo Hristov     assert(testOrder(t1, t2, std::strong_ordering::equivalent));
35*55ec808aSHristo Hristov 
36*55ec808aSHristo Hristov     std::vector<bool> f1{false, false};
37*55ec808aSHristo Hristov     std::vector<bool> f2{false, false};
38*55ec808aSHristo Hristov     assert(testOrder(f1, f2, std::strong_ordering::equivalent));
39*55ec808aSHristo Hristov   }
40*55ec808aSHristo Hristov   // Less, due to contained values
41*55ec808aSHristo Hristov   {
42*55ec808aSHristo Hristov     std::vector<bool> l1{true, false};
43*55ec808aSHristo Hristov     std::vector<bool> l2{true, true};
44*55ec808aSHristo Hristov     assert(testOrder(l1, l2, std::strong_ordering::less));
45*55ec808aSHristo Hristov   }
46*55ec808aSHristo Hristov   // Greater, due to contained values
47*55ec808aSHristo Hristov   {
48*55ec808aSHristo Hristov     std::vector<bool> l1{true, true};
49*55ec808aSHristo Hristov     std::vector<bool> l2{true, false};
50*55ec808aSHristo Hristov     assert(testOrder(l1, l2, std::strong_ordering::greater));
51*55ec808aSHristo Hristov   }
52*55ec808aSHristo Hristov   // Shorter list
53*55ec808aSHristo Hristov   {
54*55ec808aSHristo Hristov     std::vector<bool> l1{true};
55*55ec808aSHristo Hristov     std::vector<bool> l2{true, false};
56*55ec808aSHristo Hristov     assert(testOrder(l1, l2, std::strong_ordering::less));
57*55ec808aSHristo Hristov 
58*55ec808aSHristo Hristov     std::vector<bool> t1{true};
59*55ec808aSHristo Hristov     std::vector<bool> t2{true, true};
60*55ec808aSHristo Hristov     assert(testOrder(t1, t2, std::strong_ordering::less));
61*55ec808aSHristo Hristov 
62*55ec808aSHristo Hristov     std::vector<bool> f1{false};
63*55ec808aSHristo Hristov     std::vector<bool> f2{false, false};
64*55ec808aSHristo Hristov     assert(testOrder(f1, f2, std::strong_ordering::less));
65*55ec808aSHristo Hristov 
66*55ec808aSHristo Hristov     std::vector<bool> e;
67*55ec808aSHristo Hristov     assert(testOrder(e, t1, std::strong_ordering::less));
68*55ec808aSHristo Hristov     assert(testOrder(e, f1, std::strong_ordering::less));
69*55ec808aSHristo Hristov   }
70*55ec808aSHristo Hristov   // Longer list
71*55ec808aSHristo Hristov   {
72*55ec808aSHristo Hristov     std::vector<bool> l1{true, false};
73*55ec808aSHristo Hristov     std::vector<bool> l2{true};
74*55ec808aSHristo Hristov     assert(testOrder(l1, l2, std::strong_ordering::greater));
75*55ec808aSHristo Hristov 
76*55ec808aSHristo Hristov     std::vector<bool> t1{true, true};
77*55ec808aSHristo Hristov     std::vector<bool> t2{true};
78*55ec808aSHristo Hristov     assert(testOrder(t1, t2, std::strong_ordering::greater));
79*55ec808aSHristo Hristov 
80*55ec808aSHristo Hristov     std::vector<bool> f1{false, false};
81*55ec808aSHristo Hristov     std::vector<bool> f2{false};
82*55ec808aSHristo Hristov     assert(testOrder(f1, f2, std::strong_ordering::greater));
83*55ec808aSHristo Hristov 
84*55ec808aSHristo Hristov     std::vector<bool> e;
85*55ec808aSHristo Hristov     assert(testOrder(t2, e, std::strong_ordering::greater));
86*55ec808aSHristo Hristov     assert(testOrder(f2, e, std::strong_ordering::greater));
87*55ec808aSHristo Hristov   }
88*55ec808aSHristo Hristov 
89*55ec808aSHristo Hristov   return true;
90*55ec808aSHristo Hristov }
91*55ec808aSHristo Hristov 
main(int,char **)92*55ec808aSHristo Hristov int main(int, char**) {
93*55ec808aSHristo Hristov   assert(test_sequence_container_spaceship_vectorbool());
94*55ec808aSHristo Hristov   static_assert(test_sequence_container_spaceship_vectorbool());
95*55ec808aSHristo Hristov   return 0;
96*55ec808aSHristo Hristov }
97