[RISCV] Fix mgather -> riscv.masked.strided.load combine not extending indices (...
[llvm-project.git] / libcxx / test / std / containers / unord / unord.multiset / eq.pass.cpp
blob7c4cfd63c7bb613a1ef9459c7a640ab1fc3efc53
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 //===----------------------------------------------------------------------===//
9 // <unordered_set>
11 // template <class Key, class Hash, class Pred, class Alloc>
12 // bool
13 // operator==(const unordered_multiset<Key, Hash, Pred, Alloc>& x,
14 // const unordered_multiset<Key, Hash, Pred, Alloc>& y);
16 // template <class Key, class Hash, class Pred, class Alloc>
17 // bool
18 // operator!=(const unordered_multiset<Key, Hash, Pred, Alloc>& x,
19 // const unordered_multiset<Key, Hash, Pred, Alloc>& y);
21 #include <unordered_set>
22 #include <cassert>
23 #include <cstddef>
25 #include "test_macros.h"
26 #include "min_allocator.h"
28 #include "test_comparisons.h"
30 int main(int, char**)
33 typedef std::unordered_multiset<int> C;
34 typedef int P;
35 P a[] =
37 P(10),
38 P(20),
39 P(20),
40 P(30),
41 P(40),
42 P(50),
43 P(50),
44 P(50),
45 P(60),
46 P(70),
47 P(80)
49 const C c1(std::begin(a), std::end(a));
50 const C c2;
51 assert(!(c1 == c2));
52 assert( (c1 != c2));
55 typedef std::unordered_multiset<int> C;
56 typedef int P;
57 P a[] =
59 P(10),
60 P(20),
61 P(20),
62 P(30),
63 P(40),
64 P(50),
65 P(50),
66 P(50),
67 P(60),
68 P(70),
69 P(80)
71 const C c1(std::begin(a), std::end(a));
72 const C c2 = c1;
73 assert( (c1 == c2));
74 assert(!(c1 != c2));
77 typedef std::unordered_multiset<int> C;
78 typedef int P;
79 P a[] =
81 P(10),
82 P(20),
83 P(20),
84 P(30),
85 P(40),
86 P(50),
87 P(50),
88 P(50),
89 P(60),
90 P(70),
91 P(80)
93 C c1(std::begin(a), std::end(a));
94 C c2 = c1;
95 c2.rehash(30);
96 assert( (c1 == c2));
97 assert(!(c1 != c2));
98 c2.insert(P(90));
99 assert(!(c1 == c2));
100 assert( (c1 != c2));
101 c1.insert(P(90));
102 assert( (c1 == c2));
103 assert(!(c1 != c2));
105 #if TEST_STD_VER >= 11
107 typedef std::unordered_multiset<int, std::hash<int>,
108 std::equal_to<int>, min_allocator<int>> C;
109 typedef int P;
110 P a[] =
112 P(10),
113 P(20),
114 P(20),
115 P(30),
116 P(40),
117 P(50),
118 P(50),
119 P(50),
120 P(60),
121 P(70),
122 P(80)
124 const C c1(std::begin(a), std::end(a));
125 const C c2;
126 assert(!(c1 == c2));
127 assert( (c1 != c2));
130 typedef std::unordered_multiset<int, std::hash<int>,
131 std::equal_to<int>, min_allocator<int>> C;
132 typedef int P;
133 P a[] =
135 P(10),
136 P(20),
137 P(20),
138 P(30),
139 P(40),
140 P(50),
141 P(50),
142 P(50),
143 P(60),
144 P(70),
145 P(80)
147 const C c1(std::begin(a), std::end(a));
148 const C c2 = c1;
149 assert( (c1 == c2));
150 assert(!(c1 != c2));
153 typedef std::unordered_multiset<int, std::hash<int>,
154 std::equal_to<int>, min_allocator<int>> C;
155 typedef int P;
156 P a[] =
158 P(10),
159 P(20),
160 P(20),
161 P(30),
162 P(40),
163 P(50),
164 P(50),
165 P(50),
166 P(60),
167 P(70),
168 P(80)
170 C c1(std::begin(a), std::end(a));
171 C c2 = c1;
172 c2.rehash(30);
173 assert( (c1 == c2));
174 assert(!(c1 != c2));
175 c2.insert(P(90));
176 assert(!(c1 == c2));
177 assert( (c1 != c2));
178 c1.insert(P(90));
179 assert( (c1 == c2));
180 assert(!(c1 != c2));
182 #endif
184 // Make sure we take into account the number of times that a key repeats into equality.
186 int a[] = {1, 1, 1, 2};
187 int b[] = {1, 1, 1, 1, 2};
189 std::unordered_multiset<int> c1(std::begin(a), std::end(a));
190 std::unordered_multiset<int> c2(std::begin(b), std::end(b));
191 assert(testEquality(c1, c2, false));
194 // Make sure we behave properly when a custom key predicate is provided.
196 int a[] = {1, 3};
197 int b[] = {1, 1};
198 // A very poor hash
199 struct HashModuloOddness {
200 std::size_t operator()(int x) const { return std::hash<int>()(x % 2); }
202 // A very poor hash
203 struct CompareModuloOddness {
204 bool operator()(int x, int y) const { return (x % 2) == (y % 2); }
207 using Set = std::unordered_multiset<int, HashModuloOddness, CompareModuloOddness>;
208 Set c1(std::begin(a), std::end(a));
209 Set c2(std::begin(b), std::end(b));
211 assert(testEquality(c1, c2, false));
214 return 0;