2 // Copyright 2006-2009 Daniel James.
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 // This test creates the containers with members that meet their minimum
7 // requirements. Makes sure everything compiles and is defined correctly.
9 #include "../helpers/prefix.hpp"
10 #include <boost/unordered_set.hpp>
11 #include "../helpers/postfix.hpp"
14 #include "../helpers/test.hpp"
15 #include "../objects/minimal.hpp"
16 #include "./compile_tests.hpp"
18 // Explicit instantiation to catch compile-time errors
20 template class boost::unordered_set
<
24 test::minimal::allocator
<int> >;
25 template class boost::unordered_multiset
<
29 test::minimal::allocator
<int> >;
31 template class boost::unordered_set
<
32 test::minimal::assignable
const,
33 test::minimal::hash
<test::minimal::assignable
>,
34 test::minimal::equal_to
<test::minimal::assignable
>,
35 test::minimal::allocator
<test::minimal::assignable
> >;
36 template class boost::unordered_multiset
<
37 test::minimal::assignable
,
38 test::minimal::hash
<test::minimal::assignable
>,
39 test::minimal::equal_to
<test::minimal::assignable
>,
40 test::minimal::allocator
<test::minimal::assignable
> >;
42 UNORDERED_AUTO_TEST(test0
)
44 test::minimal::constructor_param x
;
46 test::minimal::assignable
assignable(x
);
48 std::cout
<<"Test unordered_set.\n";
50 boost::unordered_set
<int> int_set
;
52 boost::unordered_set
<int,
53 boost::hash
<int>, std::equal_to
<int>,
54 test::minimal::cxx11_allocator
<int>
58 test::minimal::assignable
,
59 test::minimal::hash
<test::minimal::assignable
>,
60 test::minimal::equal_to
<test::minimal::assignable
>,
61 test::minimal::allocator
<test::minimal::assignable
> > set
;
63 container_test(int_set
, 0);
64 container_test(int_set2
, 0);
65 container_test(set
, assignable
);
67 std::cout
<<"Test unordered_multiset.\n";
69 boost::unordered_multiset
<int> int_multiset
;
71 boost::unordered_multiset
<int,
72 boost::hash
<int>, std::equal_to
<int>,
73 test::minimal::cxx11_allocator
<int>
76 boost::unordered_multiset
<
77 test::minimal::assignable
,
78 test::minimal::hash
<test::minimal::assignable
>,
79 test::minimal::equal_to
<test::minimal::assignable
>,
80 test::minimal::allocator
<test::minimal::assignable
> > multiset
;
82 container_test(int_multiset
, 0);
83 container_test(int_multiset2
, 0);
84 container_test(multiset
, assignable
);
87 UNORDERED_AUTO_TEST(equality_tests
) {
88 typedef test::minimal::copy_constructible_equality_comparable value_type
;
90 boost::unordered_set
<int> int_set
;
92 boost::unordered_set
<int,
93 boost::hash
<int>, std::equal_to
<int>,
94 test::minimal::cxx11_allocator
<int>
98 test::minimal::copy_constructible_equality_comparable
,
99 test::minimal::hash
<test::minimal::copy_constructible_equality_comparable
>,
100 test::minimal::equal_to
<test::minimal::copy_constructible_equality_comparable
>,
101 test::minimal::allocator
<value_type
> > set
;
103 equality_test(int_set
);
104 equality_test(int_set2
);
107 boost::unordered_multiset
<int> int_multiset
;
109 boost::unordered_multiset
<int,
110 boost::hash
<int>, std::equal_to
<int>,
111 test::minimal::cxx11_allocator
<int>
114 boost::unordered_multiset
<
115 test::minimal::copy_constructible_equality_comparable
,
116 test::minimal::hash
<test::minimal::copy_constructible_equality_comparable
>,
117 test::minimal::equal_to
<test::minimal::copy_constructible_equality_comparable
>,
118 test::minimal::allocator
<value_type
> > multiset
;
120 equality_test(int_multiset
);
121 equality_test(int_multiset2
);
122 equality_test(multiset
);
125 UNORDERED_AUTO_TEST(test1
)
127 boost::hash
<int> hash
;
128 std::equal_to
<int> equal_to
;
131 std::cout
<<"Test unordered_set." << std::endl
;
133 boost::unordered_set
<int> set
;
135 boost::unordered_set
<int,
136 boost::hash
<int>, std::equal_to
<int>,
137 test::minimal::cxx11_allocator
<int>
140 unordered_unique_test(set
, value
);
141 unordered_set_test(set
, value
);
142 unordered_copyable_test(set
, value
, value
, hash
, equal_to
);
144 unordered_unique_test(set2
, value
);
145 unordered_set_test(set2
, value
);
146 unordered_copyable_test(set2
, value
, value
, hash
, equal_to
);
148 std::cout
<<"Test unordered_multiset." << std::endl
;
150 boost::unordered_multiset
<int> multiset
;
152 boost::unordered_multiset
<int,
153 boost::hash
<int>, std::equal_to
<int>,
154 test::minimal::cxx11_allocator
<int>
157 unordered_equivalent_test(multiset
, value
);
158 unordered_set_test(multiset
, value
);
159 unordered_copyable_test(multiset
, value
, value
, hash
, equal_to
);
161 unordered_equivalent_test(multiset2
, value
);
162 unordered_set_test(multiset2
, value
);
163 unordered_copyable_test(multiset2
, value
, value
, hash
, equal_to
);
166 UNORDERED_AUTO_TEST(test2
)
168 test::minimal::constructor_param x
;
170 test::minimal::assignable
assignable(x
);
171 test::minimal::copy_constructible
copy_constructible(x
);
172 test::minimal::hash
<test::minimal::assignable
> hash(x
);
173 test::minimal::equal_to
<test::minimal::assignable
> equal_to(x
);
175 std::cout
<<"Test unordered_set.\n";
177 boost::unordered_set
<
178 test::minimal::assignable
,
179 test::minimal::hash
<test::minimal::assignable
>,
180 test::minimal::equal_to
<test::minimal::assignable
>,
181 test::minimal::allocator
<test::minimal::assignable
> > set
;
183 unordered_unique_test(set
, assignable
);
184 unordered_set_test(set
, assignable
);
185 unordered_copyable_test(set
, assignable
, assignable
, hash
, equal_to
);
186 unordered_set_member_test(set
, assignable
);
188 std::cout
<<"Test unordered_multiset.\n";
190 boost::unordered_multiset
<
191 test::minimal::assignable
,
192 test::minimal::hash
<test::minimal::assignable
>,
193 test::minimal::equal_to
<test::minimal::assignable
>,
194 test::minimal::allocator
<test::minimal::assignable
> > multiset
;
196 unordered_equivalent_test(multiset
, assignable
);
197 unordered_set_test(multiset
, assignable
);
198 unordered_copyable_test(multiset
, assignable
, assignable
, hash
, equal_to
);
199 unordered_set_member_test(multiset
, assignable
);
202 UNORDERED_AUTO_TEST(movable1_tests
)
204 test::minimal::constructor_param x
;
206 test::minimal::movable1
movable1(x
);
207 test::minimal::hash
<test::minimal::movable1
> hash(x
);
208 test::minimal::equal_to
<test::minimal::movable1
> equal_to(x
);
210 std::cout
<<"Test unordered_set.\n";
212 boost::unordered_set
<
213 test::minimal::movable1
,
214 test::minimal::hash
<test::minimal::movable1
>,
215 test::minimal::equal_to
<test::minimal::movable1
>,
216 test::minimal::allocator
<test::minimal::movable1
> > set
;
218 //unordered_unique_test(set, movable1);
219 unordered_set_test(set
, movable1
);
220 unordered_movable_test(set
, movable1
, movable1
, hash
, equal_to
);
222 std::cout
<<"Test unordered_multiset.\n";
224 boost::unordered_multiset
<
225 test::minimal::movable1
,
226 test::minimal::hash
<test::minimal::movable1
>,
227 test::minimal::equal_to
<test::minimal::movable1
>,
228 test::minimal::allocator
<test::minimal::movable1
> > multiset
;
230 //unordered_equivalent_test(multiset, movable1);
231 unordered_set_test(multiset
, movable1
);
232 unordered_movable_test(multiset
, movable1
, movable1
, hash
, equal_to
);
235 UNORDERED_AUTO_TEST(movable2_tests
)
237 test::minimal::constructor_param x
;
239 test::minimal::movable2
movable2(x
);
240 test::minimal::hash
<test::minimal::movable2
> hash(x
);
241 test::minimal::equal_to
<test::minimal::movable2
> equal_to(x
);
243 std::cout
<<"Test unordered_set.\n";
245 boost::unordered_set
<
246 test::minimal::movable2
,
247 test::minimal::hash
<test::minimal::movable2
>,
248 test::minimal::equal_to
<test::minimal::movable2
>,
249 test::minimal::allocator
<test::minimal::movable2
> > set
;
251 //unordered_unique_test(set, movable2);
252 unordered_set_test(set
, movable2
);
253 unordered_movable_test(set
, movable2
, movable2
, hash
, equal_to
);
255 std::cout
<<"Test unordered_multiset.\n";
257 boost::unordered_multiset
<
258 test::minimal::movable2
,
259 test::minimal::hash
<test::minimal::movable2
>,
260 test::minimal::equal_to
<test::minimal::movable2
>,
261 test::minimal::allocator
<test::minimal::movable2
> > multiset
;
263 //unordered_equivalent_test(multiset, movable2);
264 unordered_set_test(multiset
, movable2
);
265 unordered_movable_test(multiset
, movable2
, movable2
, hash
, equal_to
);
268 UNORDERED_AUTO_TEST(destructible_tests
)
270 test::minimal::constructor_param x
;
272 test::minimal::destructible
destructible(x
);
273 test::minimal::hash
<test::minimal::destructible
> hash(x
);
274 test::minimal::equal_to
<test::minimal::destructible
> equal_to(x
);
276 std::cout
<<"Test unordered_set.\n";
278 boost::unordered_set
<
279 test::minimal::destructible
,
280 test::minimal::hash
<test::minimal::destructible
>,
281 test::minimal::equal_to
<test::minimal::destructible
> > set
;
283 unordered_destructible_test(set
);
285 std::cout
<<"Test unordered_multiset.\n";
287 boost::unordered_multiset
<
288 test::minimal::destructible
,
289 test::minimal::hash
<test::minimal::destructible
>,
290 test::minimal::equal_to
<test::minimal::destructible
> > multiset
;
292 unordered_destructible_test(multiset
);