This source file includes following definitions.
- BOOST_AUTO_TEST_SUITE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_SUITE_END
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_SUITE_END
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_SUITE_END
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_SUITE_END
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #include "stdafx.h"
22
23 #define BOOST_TEST_MODULE libjmmcg_tests
24 #include <boost/test/included/unit_test.hpp>
25
26 #include <boost/test/test_case_template.hpp>
27 #include <boost/mpl/list.hpp>
28
29 #include "core/thread_safe_adaptors.hpp"
30 #include "core/rw_locking.hpp"
31
32 using namespace jmmcg;
33 using namespace ppd;
34
35 template<typename Mdl, template<class, class> class Colln>
36 struct erew_colln_t {
37 typedef api_lock_traits<platform_api, Mdl> lock_traits;
38 typedef safe_colln<
39 Colln<int, std::allocator<int> >,
40 typename lock_traits::critical_section_type
41 > result;
42 };
43
44 template<typename Mdl, template<class, class> class Colln>
45 struct crew_colln_t {
46 typedef api_lock_traits<platform_api, Mdl> lock_traits;
47 typedef safe_colln<
48 Colln<int, std::allocator<int> >,
49 lock::rw::template locker<lock_traits>,
50 typename lock::rw::template locker<lock_traits>::decaying_write_lock_type
51 > result;
52 };
53
54 template<typename Mdl, template<class, class> class Colln>
55 struct erew_queue_t {
56 typedef api_lock_traits<platform_api, Mdl> lock_traits;
57 typedef queue<
58 Colln<int, std::allocator<int> >,
59 typename lock_traits::critical_section_type
60 > result;
61 };
62
63 template<typename Mdl, template<class, class> class Colln>
64 struct erew_funky_queue_t {
65 typedef api_lock_traits<platform_api, Mdl> lock_traits;
66 typedef funky_queue<
67 Colln<int, std::allocator<int> >,
68 typename lock_traits::critical_section_type
69 > result;
70 };
71
72 typedef boost::mpl::list<
73 heavyweight_threading,
74 sequential_mode
75 > test_types;
76
77 BOOST_AUTO_TEST_SUITE(thread_safe_colln)
78
79 BOOST_AUTO_TEST_SUITE(list_tests)
80
81 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
82 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
83
84 colln_t s1;
85 BOOST_CHECK(s1.empty());
86 BOOST_CHECK_EQUAL(s1.size(), 0U);
87 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
88 }
89
90 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor, Mdl, test_types) {
91 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
92
93 typename colln_t::container_type src;
94 colln_t s1(src);
95 BOOST_CHECK(s1.empty());
96 BOOST_CHECK_EQUAL(s1.size(), src.size());
97 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
98 }
99
100 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_1, Mdl, test_types) {
101 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
102
103 typename colln_t::container_type src;
104 src.push_back(1);
105 colln_t s1(src);
106 BOOST_CHECK(!s1.empty());
107 BOOST_CHECK_EQUAL(s1.size(), src.size());
108 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
109 }
110
111 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_2, Mdl, test_types) {
112 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
113
114 typename colln_t::container_type src;
115 src.push_back(1);
116 src.push_back(2);
117 colln_t s1(src);
118 BOOST_CHECK(!s1.empty());
119 BOOST_CHECK_EQUAL(s1.size(), src.size());
120 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
121 }
122
123 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
124 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
125
126 colln_t s1,s2;
127 s1=s2;
128 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
129 BOOST_CHECK_EQUAL(s1.size(), s2.size());
130 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
131 }
132
133 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
134 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
135
136 colln_t s1;
137 s1.push_back(1);
138 BOOST_CHECK(!s1.empty());
139 BOOST_CHECK_EQUAL(s1.size(), 1U);
140 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
141 BOOST_CHECK_EQUAL(s1.colln().front(), 1);
142 }
143
144 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
145 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
146
147 colln_t s1,s2;
148 s1.push_back(1);
149 s2=s1;
150 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
151 BOOST_CHECK_EQUAL(s1.size(), s2.size());
152 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
153 BOOST_CHECK_EQUAL(s2.colln().front(), 1);
154 }
155
156 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
157 typedef typename erew_colln_t<Mdl, std::list>::result colln_t;
158
159 colln_t s1;
160 s1.push_back(1);
161 s1.clear();
162 BOOST_CHECK(s1.empty());
163 BOOST_CHECK_EQUAL(s1.size(), 0U);
164 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
165 }
166
167 BOOST_AUTO_TEST_SUITE_END()
168
169 BOOST_AUTO_TEST_SUITE(queue_tests)
170
171 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
172 typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
173
174 colln_t s1;
175 BOOST_CHECK(s1.empty());
176 BOOST_CHECK_EQUAL(s1.size(), 0U);
177 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
178 }
179
180 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
181 typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
182
183 colln_t s1,s2;
184 s1=s2;
185 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
186 BOOST_CHECK_EQUAL(s1.size(), s2.size());
187 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
188 }
189
190 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
191 typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
192
193 colln_t s1;
194 s1.push_back(1);
195 BOOST_CHECK(!s1.empty());
196 BOOST_CHECK_EQUAL(s1.size(), 1U);
197 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
198 BOOST_CHECK_EQUAL(s1.front(), 1);
199 }
200
201 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
202 typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
203
204 colln_t s1,s2;
205 s1.push_back(1);
206 s2=s1;
207 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
208 BOOST_CHECK_EQUAL(s1.size(), s2.size());
209 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
210 BOOST_CHECK_EQUAL(s2.front(), 1);
211 }
212
213 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
214 typedef typename erew_queue_t<Mdl, std::list>::result colln_t;
215
216 colln_t s1;
217 s1.push_back(1);
218 s1.clear();
219 BOOST_CHECK(s1.empty());
220 BOOST_CHECK_EQUAL(s1.size(), 0U);
221 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
222 }
223
224 BOOST_AUTO_TEST_SUITE_END()
225
226 BOOST_AUTO_TEST_SUITE(funky_queue_tests)
227
228 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
229 typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
230
231 colln_t s1;
232 BOOST_CHECK(s1.empty());
233 BOOST_CHECK_EQUAL(s1.size(), 0U);
234 }
235
236 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
237 typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
238
239 colln_t s1,s2;
240 s1=s2;
241 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
242 BOOST_CHECK_EQUAL(s1.size(), s2.size());
243 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
244 }
245
246 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
247 typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
248
249 colln_t s1;
250 s1.push_back(1);
251 BOOST_CHECK(!s1.empty());
252 BOOST_CHECK_EQUAL(s1.size(), 1U);
253 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
254 BOOST_CHECK_EQUAL(s1.front(), 1);
255 }
256
257 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
258 typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
259
260 colln_t s1,s2;
261 s1.push_back(1);
262 s2=s1;
263 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
264 BOOST_CHECK_EQUAL(s1.size(), s2.size());
265 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
266 BOOST_CHECK_EQUAL(s2.front(), 1);
267 }
268
269 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
270 typedef typename erew_funky_queue_t<Mdl, std::list>::result colln_t;
271
272 colln_t s1;
273 s1.push_back(1);
274 s1.clear();
275 BOOST_CHECK(s1.empty());
276 BOOST_CHECK_EQUAL(s1.size(), 0U);
277 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
278 }
279
280 BOOST_AUTO_TEST_SUITE_END()
281
282 BOOST_AUTO_TEST_SUITE(vector_tests)
283
284 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
285 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
286
287 colln_t s1;
288 BOOST_CHECK(s1.empty());
289 BOOST_CHECK_EQUAL(s1.size(), 0U);
290 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
291 }
292
293 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor, Mdl, test_types) {
294 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
295
296 typename colln_t::container_type src;
297 colln_t s1(src);
298 BOOST_CHECK(s1.empty());
299 BOOST_CHECK_EQUAL(s1.size(), src.size());
300 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
301 }
302
303 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_1, Mdl, test_types) {
304 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
305
306 typename colln_t::container_type src;
307 src.push_back(1);
308 colln_t s1(src);
309 BOOST_CHECK(!s1.empty());
310 BOOST_CHECK_EQUAL(s1.size(), src.size());
311 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
312 }
313
314 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_2, Mdl, test_types) {
315 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
316
317 typename colln_t::container_type src;
318 src.push_back(1);
319 src.push_back(2);
320 colln_t s1(src);
321 BOOST_CHECK(!s1.empty());
322 BOOST_CHECK_EQUAL(s1.size(), src.size());
323 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
324 }
325
326 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
327 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
328
329 colln_t s1,s2;
330 s1=s2;
331 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
332 BOOST_CHECK_EQUAL(s1.size(), s2.size());
333 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
334 }
335
336 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
337 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
338
339 colln_t s1;
340 s1.push_back(1);
341 BOOST_CHECK(!s1.empty());
342 BOOST_CHECK_EQUAL(s1.size(), 1U);
343 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
344 BOOST_CHECK_EQUAL(s1[0], 1);
345 }
346
347 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
348 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
349
350 colln_t s1,s2;
351 s1.push_back(1);
352 s2=s1;
353 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
354 BOOST_CHECK_EQUAL(s1.size(), s2.size());
355 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
356 BOOST_CHECK_EQUAL(s2[0], 1);
357 }
358
359 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
360 typedef typename erew_colln_t<Mdl, std::vector>::result colln_t;
361
362 colln_t s1;
363 s1.push_back(1);
364 s1.clear();
365 BOOST_CHECK(s1.empty());
366 BOOST_CHECK_EQUAL(s1.size(), 0U);
367 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
368 }
369
370 BOOST_AUTO_TEST_SUITE_END()
371
372 BOOST_AUTO_TEST_SUITE(vector_rw_lk_tests)
373
374 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, test_types) {
375 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
376
377 colln_t s1;
378 BOOST_CHECK(s1.empty());
379 BOOST_CHECK_EQUAL(s1.size(), 0U);
380 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
381 }
382
383 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor, Mdl, test_types) {
384 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
385
386 typename colln_t::container_type src;
387 colln_t s1(src);
388 BOOST_CHECK(s1.empty());
389 BOOST_CHECK_EQUAL(s1.size(), src.size());
390 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
391 }
392
393 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_1, Mdl, test_types) {
394 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
395
396 typename colln_t::container_type src;
397 src.push_back(1);
398 colln_t s1(src);
399 BOOST_CHECK(!s1.empty());
400 BOOST_CHECK_EQUAL(s1.size(), src.size());
401 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
402 }
403
404 BOOST_AUTO_TEST_CASE_TEMPLATE(cctor_2, Mdl, test_types) {
405 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
406
407 typename colln_t::container_type src;
408 src.push_back(1);
409 src.push_back(2);
410 colln_t s1(src);
411 BOOST_CHECK(!s1.empty());
412 BOOST_CHECK_EQUAL(s1.size(), src.size());
413 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
414 }
415
416 BOOST_AUTO_TEST_CASE_TEMPLATE(assignment, Mdl, test_types) {
417 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
418
419 colln_t s1,s2;
420 s1=s2;
421 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
422 BOOST_CHECK_EQUAL(s1.size(), s2.size());
423 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
424 }
425
426 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item, Mdl, test_types) {
427 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
428
429 colln_t s1;
430 s1.push_back(1);
431 BOOST_CHECK(!s1.empty());
432 BOOST_CHECK_EQUAL(s1.size(), 1U);
433 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
434 BOOST_CHECK_EQUAL(s1[0], 1);
435 }
436
437 BOOST_AUTO_TEST_CASE_TEMPLATE(add_item_copy, Mdl, test_types) {
438 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
439
440 colln_t s1,s2;
441 s1.push_back(1);
442 s2=s1;
443 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
444 BOOST_CHECK_EQUAL(s1.size(), s2.size());
445 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
446 BOOST_CHECK_EQUAL(s2[0], 1);
447 }
448
449 BOOST_AUTO_TEST_CASE_TEMPLATE(clear, Mdl, test_types) {
450 typedef typename crew_colln_t<Mdl, std::vector>::result colln_t;
451
452 colln_t s1;
453 s1.push_back(1);
454 s1.clear();
455 BOOST_CHECK(s1.empty());
456 BOOST_CHECK_EQUAL(s1.size(), 0U);
457 BOOST_CHECK_EQUAL(s1.size(), s1.colln().size());
458 }
459
460 BOOST_AUTO_TEST_SUITE_END()
461
462 BOOST_AUTO_TEST_SUITE_END()