21 #define BOOST_TEST_MODULE libjmmcg_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include "core/intrusive.hpp"
26 using namespace libjmmcg;
35 struct data final :
public intrusive::
node_details_itf<LT>,
public sp_counter_type<
typename intrusive::node_details_itf<LT>::atomic_ctr_t::value_type, LT> {
43 explicit data(
int j)
noexcept(
true)
55 BOOST_AUTO_TEST_SUITE(instrusive)
57 BOOST_AUTO_TEST_SUITE(stack)
59 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, thread_types)
61 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> stack_t;
64 BOOST_CHECK(l.empty());
65 BOOST_CHECK_EQUAL(l.size(), 0U);
68 BOOST_AUTO_TEST_CASE_TEMPLATE(push_one_item, Mdl, thread_types)
70 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> stack_t;
73 typename stack_t::value_type val(
new typename stack_t::value_type::value_type(1));
74 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 1);
76 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
77 BOOST_CHECK(!l.empty());
78 BOOST_CHECK_EQUAL(l.size(), 1U);
81 BOOST_AUTO_TEST_CASE_TEMPLATE(push_and_pop_one_item, Mdl, thread_types)
83 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> stack_t;
86 typename stack_t::value_type val(
new typename stack_t::value_type::value_type(1));
87 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 1);
89 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
90 typename stack_t::value_type ret(l.top());
91 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 3);
92 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
93 BOOST_CHECK_EQUAL(val, ret);
94 BOOST_CHECK(!l.empty());
95 BOOST_CHECK_EQUAL(l.size(), 1U);
97 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
98 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
99 BOOST_CHECK(l.empty());
100 BOOST_CHECK_EQUAL(l.size(), 0U);
103 BOOST_AUTO_TEST_CASE_TEMPLATE(push_two_items, Mdl, thread_types)
105 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> stack_t;
108 typename stack_t::value_type val1(
new typename stack_t::value_type::value_type(1));
109 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
111 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
112 BOOST_CHECK(!l.empty());
113 BOOST_CHECK_EQUAL(l.size(), 1U);
114 typename stack_t::value_type val2(
new typename stack_t::value_type::value_type(2));
115 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
116 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
118 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
119 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
120 BOOST_CHECK(!l.empty());
121 BOOST_CHECK_EQUAL(l.size(), 2U);
124 BOOST_AUTO_TEST_CASE_TEMPLATE(push_two_items_pop_one1, Mdl, thread_types)
126 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> stack_t;
129 typename stack_t::value_type val1(
new typename stack_t::value_type::value_type(1));
130 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
132 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
133 typename stack_t::value_type val2(
new typename stack_t::value_type::value_type(2));
134 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
136 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
137 typename stack_t::value_type ret(l.top());
138 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
139 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
140 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 3);
141 BOOST_CHECK_EQUAL(val2, ret);
142 BOOST_CHECK(!l.empty());
143 BOOST_CHECK_EQUAL(l.size(), 2U);
145 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
146 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
147 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
148 BOOST_CHECK(!l.empty());
149 BOOST_CHECK_EQUAL(l.size(), 1U);
152 BOOST_AUTO_TEST_CASE_TEMPLATE(push_two_items_pop_one2, Mdl, thread_types)
154 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> stack_t;
157 typename stack_t::value_type val1(
new typename stack_t::value_type::value_type(1));
159 typename stack_t::value_type ret(l.top());
160 BOOST_CHECK_EQUAL(val1, ret);
161 BOOST_CHECK(!l.empty());
162 BOOST_CHECK_EQUAL(l.size(), 1U);
164 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
165 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
166 BOOST_CHECK(l.empty());
167 BOOST_CHECK_EQUAL(l.size(), 0U);
168 typename stack_t::value_type val2(
new typename stack_t::value_type::value_type(2));
170 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
171 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
172 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
173 BOOST_CHECK(!l.empty());
174 BOOST_CHECK_EQUAL(l.size(), 1U);
177 BOOST_AUTO_TEST_CASE_TEMPLATE(push_two_items_pop_two, Mdl, thread_types)
179 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
182 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
184 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
186 typename container_t::value_type ret2(l.top());
187 BOOST_CHECK_EQUAL(val2, ret2);
188 BOOST_CHECK(!l.empty());
189 BOOST_CHECK_EQUAL(l.size(), 2U);
191 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
192 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
193 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
194 BOOST_CHECK(!l.empty());
195 BOOST_CHECK_EQUAL(l.size(), 1U);
196 typename container_t::value_type ret1(l.top());
197 BOOST_CHECK_EQUAL(val1, ret1);
198 BOOST_CHECK(!l.empty());
199 BOOST_CHECK_EQUAL(l.size(), 1U);
201 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
202 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
203 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
204 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
205 BOOST_CHECK(l.empty());
206 BOOST_CHECK_EQUAL(l.size(), 0U);
209 BOOST_AUTO_TEST_CASE_TEMPLATE(push_three_items_pop_three, Mdl, thread_types)
211 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
214 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
216 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
218 typename container_t::value_type val3(
new typename container_t::value_type::value_type(3));
220 typename container_t::value_type ret3(l.top());
221 BOOST_CHECK_EQUAL(val3, ret3);
222 BOOST_CHECK(!l.empty());
223 BOOST_CHECK_EQUAL(l.size(), 3U);
225 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
226 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
227 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
228 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
229 BOOST_CHECK(!l.empty());
230 BOOST_CHECK_EQUAL(l.size(), 2U);
231 typename container_t::value_type ret2(l.top());
232 BOOST_CHECK_EQUAL(val2, ret2);
233 BOOST_CHECK(!l.empty());
234 BOOST_CHECK_EQUAL(l.size(), 2U);
236 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
237 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
238 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
239 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
240 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
241 BOOST_CHECK(!l.empty());
242 BOOST_CHECK_EQUAL(l.size(), 1U);
243 typename container_t::value_type ret1(l.top());
244 BOOST_CHECK_EQUAL(val1, ret1);
245 BOOST_CHECK(!l.empty());
246 BOOST_CHECK_EQUAL(l.size(), 1U);
248 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
249 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
250 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
251 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
252 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
253 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
254 BOOST_CHECK(l.empty());
255 BOOST_CHECK_EQUAL(l.size(), 0U);
258 BOOST_AUTO_TEST_CASE_TEMPLATE(empty_begin_is_end, Mdl, thread_types)
260 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
263 BOOST_CHECK(l.empty());
264 BOOST_CHECK_EQUAL(l.begin(), l.end());
267 BOOST_AUTO_TEST_CASE_TEMPLATE(one_item_begin_is_not_end, Mdl, thread_types)
269 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
272 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
274 BOOST_CHECK(!l.empty());
275 BOOST_CHECK_NE(l.begin(), l.end());
278 BOOST_AUTO_TEST_CASE_TEMPLATE(one_item_begin_is_first, Mdl, thread_types)
280 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
283 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
285 BOOST_CHECK_EQUAL(*l.begin(), val);
288 BOOST_AUTO_TEST_CASE_TEMPLATE(one_item_next_is_end, Mdl, thread_types)
290 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
293 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
295 typename container_t::iterator iter=l.begin();
297 BOOST_CHECK_NE(iter, l.begin());
298 BOOST_CHECK_EQUAL(iter, l.end());
301 BOOST_AUTO_TEST_CASE_TEMPLATE(erase_item_size_one, Mdl, thread_types)
303 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
306 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
309 BOOST_CHECK(l.empty());
310 BOOST_CHECK_EQUAL(l.size(), 0U);
313 BOOST_AUTO_TEST_CASE_TEMPLATE(erase_item_size_two, Mdl, thread_types)
315 typedef intrusive::stack<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
318 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
321 BOOST_CHECK(l.empty());
322 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
324 BOOST_CHECK(!l.empty());
325 BOOST_CHECK_EQUAL(l.size(), 1U);
328 BOOST_AUTO_TEST_SUITE_END()
330 BOOST_AUTO_TEST_SUITE(slist)
332 BOOST_AUTO_TEST_CASE_TEMPLATE(default_ctor, Mdl, thread_types)
334 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
337 BOOST_CHECK(l.empty());
338 BOOST_CHECK_EQUAL(l.size(), 0U);
339 BOOST_CHECK(l.penultimate_reachable_from_prefront());
342 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_one_item, Mdl, thread_types)
344 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
347 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
348 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 1);
350 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
351 BOOST_CHECK(!l.empty());
352 BOOST_CHECK_EQUAL(l.size(), 1U);
353 BOOST_CHECK(l.penultimate_reachable_from_prefront());
356 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_and_pop_front_one_item, Mdl, thread_types)
358 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
361 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
362 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 1);
364 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
365 BOOST_CHECK(!l.empty());
366 BOOST_CHECK_EQUAL(l.size(), 1U);
367 BOOST_CHECK(l.penultimate_reachable_from_prefront());
368 typename container_t::value_type ret(l.front());
369 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 3);
370 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
371 BOOST_CHECK_EQUAL(val, ret);
372 BOOST_CHECK(!l.empty());
373 BOOST_CHECK_EQUAL(l.size(), 1U);
375 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
376 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
377 BOOST_CHECK(l.empty());
378 BOOST_CHECK_EQUAL(l.size(), 0U);
379 BOOST_CHECK(l.penultimate_reachable_from_prefront());
382 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_two_items, Mdl, thread_types)
384 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
387 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
388 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
390 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
391 BOOST_CHECK(!l.empty());
392 BOOST_CHECK_EQUAL(l.size(), 1U);
393 BOOST_CHECK(l.penultimate_reachable_from_prefront());
394 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
395 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
397 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
398 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
399 BOOST_CHECK(!l.empty());
400 BOOST_CHECK_EQUAL(l.size(), 2U);
401 BOOST_CHECK(l.penultimate_reachable_from_prefront());
404 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_two_items_pop_one1, Mdl, thread_types)
406 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
409 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
410 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
412 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
413 BOOST_CHECK(!l.empty());
414 BOOST_CHECK_EQUAL(l.size(), 1U);
415 typename container_t::value_type ret(l.front());
416 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 3);
417 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
418 BOOST_CHECK_EQUAL(val1, ret);
419 BOOST_CHECK(!l.empty());
420 BOOST_CHECK_EQUAL(l.size(), 1U);
421 BOOST_CHECK(l.penultimate_reachable_from_prefront());
423 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
424 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
425 BOOST_CHECK(l.empty());
426 BOOST_CHECK_EQUAL(l.size(), 0U);
427 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
428 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
429 BOOST_CHECK(l.penultimate_reachable_from_prefront());
431 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
432 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
433 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
434 BOOST_CHECK(!l.empty());
435 BOOST_CHECK_EQUAL(l.size(), 1U);
436 BOOST_CHECK(l.penultimate_reachable_from_prefront());
439 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_two_items_pop_one2, Mdl, thread_types)
441 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
444 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
445 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
447 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
448 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
449 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
450 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
451 BOOST_CHECK(l.penultimate_reachable_from_prefront());
453 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
454 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
455 typename container_t::value_type ret(l.front());
456 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 3);
457 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
458 BOOST_CHECK_EQUAL(val1, ret);
459 BOOST_CHECK(!l.empty());
460 BOOST_CHECK_EQUAL(l.size(), 2U);
461 BOOST_CHECK(l.penultimate_reachable_from_prefront());
463 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
464 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
465 BOOST_CHECK(!l.empty());
466 BOOST_CHECK_EQUAL(l.size(), 1U);
467 BOOST_CHECK(l.penultimate_reachable_from_prefront());
470 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_two_items_pop_two, Mdl, thread_types)
472 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
475 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
476 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
478 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
479 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
480 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
481 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
483 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
484 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
485 typename container_t::value_type ret1(l.front());
486 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 3);
487 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 3);
488 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
489 BOOST_CHECK_EQUAL(val1, ret1);
490 BOOST_CHECK(!l.empty());
491 BOOST_CHECK_EQUAL(l.size(), 2U);
493 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
494 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
495 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
496 BOOST_CHECK(!l.empty());
497 BOOST_CHECK_EQUAL(l.size(), 1U);
498 typename container_t::value_type ret2(l.front());
499 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
500 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 3);
501 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
502 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 3);
503 BOOST_CHECK_EQUAL(val2, ret2);
504 BOOST_CHECK(!l.empty());
505 BOOST_CHECK_EQUAL(l.size(), 1U);
507 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
508 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
509 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
510 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
511 BOOST_CHECK(l.empty());
512 BOOST_CHECK_EQUAL(l.size(), 0U);
513 BOOST_CHECK(l.penultimate_reachable_from_prefront());
516 BOOST_AUTO_TEST_CASE_TEMPLATE(push_back_three_items_pop_three, Mdl, thread_types)
518 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
521 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
523 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
525 typename container_t::value_type val3(
new typename container_t::value_type::value_type(3));
527 BOOST_CHECK(l.penultimate_reachable_from_prefront());
528 typename container_t::value_type ret1(l.front());
529 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 3);
530 BOOST_CHECK_EQUAL(val1, ret1);
531 BOOST_CHECK(!l.empty());
532 BOOST_CHECK_EQUAL(l.size(), 3U);
534 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
535 BOOST_CHECK(!l.empty());
536 BOOST_CHECK_EQUAL(l.size(), 2U);
537 typename container_t::value_type ret2(l.front());
538 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 3);
539 BOOST_CHECK_EQUAL(val2, ret2);
540 BOOST_CHECK(!l.empty());
541 BOOST_CHECK_EQUAL(l.size(), 2U);
543 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
544 BOOST_CHECK(!l.empty());
545 BOOST_CHECK_EQUAL(l.size(), 1U);
546 typename container_t::value_type ret3(l.front());
547 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 3);
548 BOOST_CHECK_EQUAL(val3, ret3);
549 BOOST_CHECK(!l.empty());
550 BOOST_CHECK_EQUAL(l.size(), 1U);
552 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
553 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
554 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
555 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
556 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
557 BOOST_CHECK(l.empty());
558 BOOST_CHECK_EQUAL(l.size(), 0U);
559 BOOST_CHECK(l.penultimate_reachable_from_prefront());
562 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_one_item, Mdl, thread_types)
564 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
567 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
568 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 1);
570 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
571 BOOST_CHECK(!l.empty());
572 BOOST_CHECK_EQUAL(l.size(), 1U);
573 BOOST_CHECK(l.penultimate_reachable_from_prefront());
576 BOOST_AUTO_TEST_CASE_TEMPLATE(push_and_pop_front_one_item, Mdl, thread_types)
578 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
581 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
582 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 1);
584 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
585 typename container_t::value_type ret(l.front());
586 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 3);
587 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
588 BOOST_CHECK_EQUAL(val, ret);
589 BOOST_CHECK(!l.empty());
590 BOOST_CHECK_EQUAL(l.size(), 1U);
592 BOOST_CHECK_EQUAL(val.get().get()->sp_count(), 2);
593 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
594 BOOST_CHECK(l.empty());
595 BOOST_CHECK_EQUAL(l.size(), 0U);
596 BOOST_CHECK(l.penultimate_reachable_from_prefront());
599 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_two_items, Mdl, thread_types)
601 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
604 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
605 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
607 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
608 BOOST_CHECK(!l.empty());
609 BOOST_CHECK_EQUAL(l.size(), 1U);
610 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
611 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
612 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
614 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
615 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
616 BOOST_CHECK(!l.empty());
617 BOOST_CHECK_EQUAL(l.size(), 2U);
618 BOOST_CHECK(l.penultimate_reachable_from_prefront());
621 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_and_back_one_item, Mdl, thread_types)
623 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
626 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
627 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
629 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
630 BOOST_CHECK(!l.empty());
631 BOOST_CHECK_EQUAL(l.size(), 1U);
632 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
633 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
634 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
636 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
637 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
638 BOOST_CHECK(!l.empty());
639 BOOST_CHECK_EQUAL(l.size(), 2U);
640 BOOST_CHECK(l.penultimate_reachable_from_prefront());
643 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_two_items_pop_one1, Mdl, thread_types)
645 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
648 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
649 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 1);
651 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
652 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
653 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 1);
655 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
656 typename container_t::value_type ret(l.front());
657 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
658 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 3);
659 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 3);
660 BOOST_CHECK_EQUAL(val2, ret);
661 BOOST_CHECK(!l.empty());
662 BOOST_CHECK_EQUAL(l.size(), 2U);
664 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
665 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
666 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
667 BOOST_CHECK(!l.empty());
668 BOOST_CHECK_EQUAL(l.size(), 1U);
669 BOOST_CHECK(l.penultimate_reachable_from_prefront());
672 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_two_items_pop_one2, Mdl, thread_types)
674 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
677 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
679 typename container_t::value_type ret(l.front());
680 BOOST_CHECK_EQUAL(val1, ret);
681 BOOST_CHECK(!l.empty());
682 BOOST_CHECK_EQUAL(l.size(), 1U);
684 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
685 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
686 BOOST_CHECK(l.empty());
687 BOOST_CHECK_EQUAL(l.size(), 0U);
688 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
690 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
691 BOOST_CHECK_EQUAL(ret.get().get()->sp_count(), 2);
692 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
693 BOOST_CHECK(!l.empty());
694 BOOST_CHECK_EQUAL(l.size(), 1U);
695 BOOST_CHECK(l.penultimate_reachable_from_prefront());
698 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_two_items_pop_two, Mdl, thread_types)
700 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
703 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
705 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
707 typename container_t::value_type ret2(l.front());
708 BOOST_CHECK_EQUAL(val2, ret2);
709 BOOST_CHECK(!l.empty());
710 BOOST_CHECK_EQUAL(l.size(), 2U);
712 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
713 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
714 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
715 BOOST_CHECK(!l.empty());
716 BOOST_CHECK_EQUAL(l.size(), 1U);
717 typename container_t::value_type ret1(l.front());
718 BOOST_CHECK_EQUAL(val1, ret1);
719 BOOST_CHECK(!l.empty());
720 BOOST_CHECK_EQUAL(l.size(), 1U);
722 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
723 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
724 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
725 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
726 BOOST_CHECK(l.empty());
727 BOOST_CHECK_EQUAL(l.size(), 0U);
728 BOOST_CHECK(l.penultimate_reachable_from_prefront());
731 BOOST_AUTO_TEST_CASE_TEMPLATE(push_front_three_items_pop_three, Mdl, thread_types)
733 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
736 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
738 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
740 typename container_t::value_type val3(
new typename container_t::value_type::value_type(3));
742 typename container_t::value_type ret3(l.front());
743 BOOST_CHECK_EQUAL(val3, ret3);
744 BOOST_CHECK(!l.empty());
745 BOOST_CHECK_EQUAL(l.size(), 3U);
747 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
748 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
749 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
750 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
751 BOOST_CHECK(!l.empty());
752 BOOST_CHECK_EQUAL(l.size(), 2U);
753 typename container_t::value_type ret2(l.front());
754 BOOST_CHECK_EQUAL(val2, ret2);
755 BOOST_CHECK(!l.empty());
756 BOOST_CHECK_EQUAL(l.size(), 2U);
758 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
759 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
760 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
761 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
762 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
763 BOOST_CHECK(!l.empty());
764 BOOST_CHECK_EQUAL(l.size(), 1U);
765 typename container_t::value_type ret1(l.front());
766 BOOST_CHECK_EQUAL(val1, ret1);
767 BOOST_CHECK(!l.empty());
768 BOOST_CHECK_EQUAL(l.size(), 1U);
770 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
771 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
772 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
773 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
774 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
775 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
776 BOOST_CHECK(l.empty());
777 BOOST_CHECK_EQUAL(l.size(), 0U);
778 BOOST_CHECK(l.penultimate_reachable_from_prefront());
781 BOOST_AUTO_TEST_CASE_TEMPLATE(mixed_push_pop_three_items1, Mdl, thread_types)
783 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
786 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
788 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
790 typename container_t::value_type val3(
new typename container_t::value_type::value_type(3));
792 typename container_t::value_type ret3(l.front());
793 BOOST_CHECK_EQUAL(val3, ret3);
794 BOOST_CHECK(!l.empty());
795 BOOST_CHECK_EQUAL(l.size(), 3U);
796 BOOST_CHECK(l.penultimate_reachable_from_prefront());
798 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
799 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
800 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
801 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
802 BOOST_CHECK(!l.empty());
803 BOOST_CHECK_EQUAL(l.size(), 2U);
804 typename container_t::value_type ret1(l.front());
805 BOOST_CHECK_EQUAL(val1, ret1);
806 BOOST_CHECK(!l.empty());
807 BOOST_CHECK_EQUAL(l.size(), 2U);
809 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
810 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
811 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
812 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
813 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
814 BOOST_CHECK(!l.empty());
815 BOOST_CHECK_EQUAL(l.size(), 1U);
816 typename container_t::value_type ret2(l.front());
817 BOOST_CHECK_EQUAL(val2, ret2);
818 BOOST_CHECK(!l.empty());
819 BOOST_CHECK_EQUAL(l.size(), 1U);
821 BOOST_CHECK_EQUAL(val1.get().get()->sp_count(), 2);
822 BOOST_CHECK_EQUAL(ret1.get().get()->sp_count(), 2);
823 BOOST_CHECK_EQUAL(val2.get().get()->sp_count(), 2);
824 BOOST_CHECK_EQUAL(ret2.get().get()->sp_count(), 2);
825 BOOST_CHECK_EQUAL(val3.get().get()->sp_count(), 2);
826 BOOST_CHECK_EQUAL(ret3.get().get()->sp_count(), 2);
827 BOOST_CHECK(l.empty());
828 BOOST_CHECK_EQUAL(l.size(), 0U);
829 BOOST_CHECK(l.penultimate_reachable_from_prefront());
832 BOOST_AUTO_TEST_CASE_TEMPLATE(find_item_size_one, Mdl, thread_types)
834 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
837 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
839 typename container_t::iterator i(l.find(val));
840 BOOST_CHECK_NE(i, l.end());
841 BOOST_CHECK_EQUAL(*i, val);
842 BOOST_CHECK_EQUAL(i->i, val->i);
845 BOOST_AUTO_TEST_CASE_TEMPLATE(not_find_wrong_item_size_one, Mdl, thread_types)
847 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
850 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
851 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
853 typename container_t::iterator i(l.find(val2));
854 BOOST_CHECK_EQUAL(i, l.end());
857 BOOST_AUTO_TEST_CASE_TEMPLATE(not_find_item_popped_size_one, Mdl, thread_types)
859 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
862 typename container_t::value_type val(
new typename container_t::value_type::value_type(1));
864 typename container_t::iterator i(l.find(val));
865 BOOST_CHECK_NE(i, l.end());
866 BOOST_CHECK_EQUAL(*i, val);
867 BOOST_CHECK_EQUAL(i->i, val->i);
869 typename container_t::iterator i1(l.find(val));
870 BOOST_CHECK_EQUAL(i1, l.end());
871 BOOST_CHECK(l.penultimate_reachable_from_prefront());
874 BOOST_AUTO_TEST_CASE_TEMPLATE(not_find_item_popped_size_two, Mdl, thread_types)
876 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
879 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
881 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
883 typename container_t::iterator i2_1(l.find(val2));
884 BOOST_CHECK_NE(i2_1, l.end());
885 BOOST_CHECK_EQUAL(*i2_1, val2);
886 BOOST_CHECK_EQUAL(i2_1->i, val2->i);
888 typename container_t::iterator i2_2(l.find(val2));
889 BOOST_CHECK_EQUAL(i2_2, l.end());
890 typename container_t::iterator i1(l.find(val1));
891 BOOST_CHECK_NE(i1, l.end());
892 BOOST_CHECK_EQUAL(*i1, val1);
893 BOOST_CHECK_EQUAL(i1->i, val1->i);
894 BOOST_CHECK(l.penultimate_reachable_from_prefront());
897 BOOST_AUTO_TEST_CASE_TEMPLATE(find_item_size_two, Mdl, thread_types)
899 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
902 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
904 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
906 typename container_t::iterator i1(l.find(val1));
907 BOOST_CHECK_NE(i1, l.end());
908 BOOST_CHECK_EQUAL(*i1, val1);
909 BOOST_CHECK_EQUAL(i1->i, val1->i);
910 typename container_t::iterator i2(l.find(val2));
911 BOOST_CHECK_NE(i2, l.end());
912 BOOST_CHECK_EQUAL(*i2, val2);
913 BOOST_CHECK_EQUAL(i2->i, val2->i);
914 BOOST_CHECK(l.penultimate_reachable_from_prefront());
917 BOOST_AUTO_TEST_CASE_TEMPLATE(erase_item_size_one, Mdl, thread_types)
919 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
922 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
924 BOOST_CHECK(l.penultimate_reachable_from_prefront());
926 BOOST_CHECK(l.empty());
927 BOOST_CHECK(l.penultimate_reachable_from_prefront());
928 typename container_t::iterator i1(l.find(val1));
929 BOOST_CHECK_EQUAL(i1, l.end());
930 BOOST_CHECK(l.penultimate_reachable_from_prefront());
933 BOOST_AUTO_TEST_CASE_TEMPLATE(erase_item_size_two1, Mdl, thread_types)
935 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
938 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
940 BOOST_CHECK(l.penultimate_reachable_from_prefront());
942 BOOST_CHECK(l.empty());
943 BOOST_CHECK(l.penultimate_reachable_from_prefront());
944 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
946 BOOST_CHECK(!l.empty());
947 BOOST_CHECK_EQUAL(l.size(), 1U);
948 BOOST_CHECK(l.penultimate_reachable_from_prefront());
949 BOOST_CHECK(l.penultimate_reachable_from_prefront());
952 BOOST_AUTO_TEST_CASE_TEMPLATE(erase_item_size_two2, Mdl, thread_types)
954 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
957 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
959 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
961 BOOST_CHECK(l.penultimate_reachable_from_prefront());
963 BOOST_CHECK(!l.empty());
964 BOOST_CHECK_EQUAL(l.size(), 1U);
965 BOOST_CHECK(l.penultimate_reachable_from_prefront());
966 typename container_t::iterator i2(l.find(val2));
967 BOOST_CHECK_EQUAL(i2, l.end());
968 typename container_t::iterator i1(l.find(val1));
969 BOOST_CHECK_NE(i1, l.end());
970 BOOST_CHECK_EQUAL(*i1, val1);
971 BOOST_CHECK_EQUAL(i1->i, val1->i);
972 BOOST_CHECK(l.penultimate_reachable_from_prefront());
975 BOOST_AUTO_TEST_CASE_TEMPLATE(find_erase_middle_three_items, Mdl, thread_types)
977 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
980 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
982 BOOST_CHECK_EQUAL(l.size(), 1U);
983 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
985 BOOST_CHECK_EQUAL(l.size(), 2U);
986 typename container_t::value_type val3(
new typename container_t::value_type::value_type(3));
988 BOOST_CHECK_EQUAL(l.size(), 3U);
989 BOOST_CHECK(l.penultimate_reachable_from_prefront());
990 typename container_t::iterator chk(l.begin());
991 BOOST_CHECK_EQUAL(chk->i, val3->i);
992 BOOST_CHECK_EQUAL((++chk)->i, val1->i);
993 BOOST_CHECK_EQUAL((++chk)->i, val2->i);
994 typename container_t::iterator i1_1(l.find(val1));
995 BOOST_CHECK_NE(i1_1, l.end());
996 BOOST_CHECK_EQUAL(i1_1->i, val1->i);
998 BOOST_CHECK_EQUAL(l.size(), 2U);
999 BOOST_CHECK(l.penultimate_reachable_from_prefront());
1001 BOOST_CHECK_EQUAL(chk->i, val3->i);
1002 BOOST_CHECK_EQUAL((++chk)->i, val2->i);
1003 typename container_t::iterator i1_2(l.find(val1));
1004 BOOST_CHECK_EQUAL(i1_2, l.end());
1005 typename container_t::iterator i2(l.find(val2));
1006 BOOST_CHECK_NE(i2, l.end());
1007 BOOST_CHECK_EQUAL(*i2, val2);
1008 BOOST_CHECK_EQUAL(i2->i, val2->i);
1009 typename container_t::iterator i3(l.find(val3));
1010 BOOST_CHECK_NE(i3, l.end());
1011 BOOST_CHECK_EQUAL(*i3, val3);
1012 BOOST_CHECK_EQUAL(i3->i, val3->i);
1013 BOOST_CHECK(l.penultimate_reachable_from_prefront());
1016 BOOST_AUTO_TEST_CASE_TEMPLATE(check_iterator_walks_through_list, Mdl, thread_types)
1018 typedef intrusive::
slist<data<api_lock_traits<platform_api, Mdl> >, api_lock_traits<platform_api, Mdl>> container_t;
1021 typename container_t::value_type val1(
new typename container_t::value_type::value_type(1));
1022 typename container_t::value_type val2(
new typename container_t::value_type::value_type(2));
1023 typename container_t::value_type val3(
new typename container_t::value_type::value_type(3));
1027 typename container_t::iterator i(l.begin());
1028 BOOST_CHECK_EQUAL(*i, val1);
1029 BOOST_CHECK_EQUAL(i->i, val1->i);
1031 BOOST_CHECK_NE(i, l.end());
1032 BOOST_CHECK_EQUAL(*i, val2);
1033 BOOST_CHECK_EQUAL(i->i, val2->i);
1035 BOOST_CHECK_NE(i, l.end());
1036 BOOST_CHECK_EQUAL(*i, val3);
1037 BOOST_CHECK_EQUAL(i->i, val3->i);
1039 BOOST_CHECK_EQUAL(i, l.end());
1041 BOOST_CHECK_EQUAL(i, l.end());
1043 BOOST_CHECK_EQUAL(i, l.end());
1044 BOOST_CHECK(l.penultimate_reachable_from_prefront());
1047 BOOST_AUTO_TEST_SUITE_END()
1049 BOOST_AUTO_TEST_SUITE_END()