1 // Test of the base circular buffer container.
3 // Copyright (c) 2003-2008 Jan Gaspar
4 // Copyright (c) 2013 Antony Polukhin
6 // Use, modification, and distribution is subject to the Boost Software
7 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
12 #define CB_CONTAINER circular_buffer
16 void iterator_constructor_and_assign_test() {
18 circular_buffer<MyInteger> cb(4, 3);
19 circular_buffer<MyInteger>::iterator it = cb.begin();
20 circular_buffer<MyInteger>::iterator itCopy;
23 circular_buffer<MyInteger>::const_iterator cit;
25 circular_buffer<MyInteger>::const_iterator end1 = cb.end();
26 circular_buffer<MyInteger>::const_iterator end2 = end1;
28 BOOST_TEST(itCopy == it);
29 BOOST_TEST(cit == it);
30 BOOST_TEST(end1 == end2);
31 BOOST_TEST(it != end1);
32 BOOST_TEST(cit != end2);
35 void iterator_reference_test() {
37 circular_buffer<Dummy> cb(3, Dummy());
38 circular_buffer<Dummy>::iterator it = cb.begin();
39 circular_buffer<Dummy>::const_iterator cit = cb.begin() + 1;
41 BOOST_TEST((*it).m_n == Dummy::eVar);
42 BOOST_TEST((*it).fnc() == Dummy::eFnc);
43 BOOST_TEST((*cit).const_fnc() == Dummy::eConst);
44 BOOST_TEST((*it).virtual_fnc() == Dummy::eVirtual);
45 BOOST_TEST(it->m_n == Dummy::eVar);
46 BOOST_TEST(it->fnc() == Dummy::eFnc);
47 BOOST_TEST(cit->const_fnc() == Dummy::eConst);
48 BOOST_TEST(it->virtual_fnc() == Dummy::eVirtual);
51 void iterator_difference_test() {
53 circular_buffer<MyInteger> cb(5, 1);
55 circular_buffer<MyInteger>::iterator it1 = cb.begin() + 2;
56 circular_buffer<MyInteger>::iterator it2 = cb.begin() + 3;
57 circular_buffer<MyInteger>::const_iterator begin = cb.begin();
58 circular_buffer<MyInteger>::iterator end = cb.end();
60 BOOST_TEST(begin - begin == 0);
61 BOOST_TEST(end - cb.begin() == 5);
62 BOOST_TEST(end - end == 0);
63 BOOST_TEST(begin - cb.end() == -5);
64 BOOST_TEST(it1 - cb.begin() == 2);
65 BOOST_TEST(it1 - begin == 2);
66 BOOST_TEST(end - it1 == 3);
67 BOOST_TEST(it2 - it1 == 1);
68 BOOST_TEST(it1 - it2 == -1);
69 BOOST_TEST(it2 - it2 == 0);
72 void iterator_increment_test() {
74 circular_buffer<MyInteger> cb(10, 1);
76 circular_buffer<MyInteger>::iterator it1 = cb.begin();
77 circular_buffer<MyInteger>::iterator it2 = cb.begin() + 5;
78 circular_buffer<MyInteger>::iterator it3 = cb.begin() + 9;
83 BOOST_TEST(it1 == cb.begin() + 1);
84 BOOST_TEST(it2 == cb.begin() + 6);
85 BOOST_TEST(it3 == cb.end());
88 void iterator_decrement_test() {
90 circular_buffer<MyInteger> cb(10, 1);
92 circular_buffer<MyInteger>::iterator it1= cb.end();
93 circular_buffer<MyInteger>::iterator it2= cb.end() - 5;
94 circular_buffer<MyInteger>::iterator it3= cb.end() - 9;
99 BOOST_TEST(it1 == cb.end() - 1);
100 BOOST_TEST(it2 == cb.end() - 6);
101 BOOST_TEST(it3 == cb.begin());
104 void iterator_addition_test() {
106 circular_buffer<MyInteger> cb(10, 1);
109 circular_buffer<MyInteger>::iterator it1 = cb.begin() + 2;
110 circular_buffer<MyInteger>::iterator it2 = cb.end();
111 circular_buffer<MyInteger>::iterator it3 = cb.begin() + 5;
112 circular_buffer<MyInteger>::iterator it4 = cb.begin() + 9;
118 BOOST_TEST(it1 == 5 + cb.begin());
119 BOOST_TEST(it2 == cb.end());
120 BOOST_TEST(it3 == cb.end());
121 BOOST_TEST(it4 + 3 == cb.end());
122 BOOST_TEST((-3) + it4 == cb.begin() + 4);
123 BOOST_TEST(cb.begin() + 0 == cb.begin());
126 void iterator_subtraction_test() {
128 circular_buffer<MyInteger> cb(10, 1);
132 circular_buffer<MyInteger>::iterator it1 = cb.begin();
133 circular_buffer<MyInteger>::iterator it2 = cb.end();
134 circular_buffer<MyInteger>::iterator it3 = cb.end() - 5;
135 circular_buffer<MyInteger>::iterator it4 = cb.begin() + 7;
140 BOOST_TEST(it1 == cb.begin() + 2);
141 BOOST_TEST(it2 == cb.end());
142 BOOST_TEST(it3 == cb.begin());
143 BOOST_TEST(it4 - 7 == cb.begin());
144 BOOST_TEST(it4 - (-3) == cb.end());
145 BOOST_TEST(cb.begin() - 0 == cb.begin());
148 void iterator_element_access_test() {
150 circular_buffer<MyInteger> cb(10);
157 circular_buffer<MyInteger>::iterator it = cb.begin() + 1;
159 BOOST_TEST(it[0] == 2);
160 BOOST_TEST(it[-1] == 1);
161 BOOST_TEST(it[2] == 4);
164 void iterator_comparison_test() {
166 circular_buffer<MyInteger> cb(5, 1);
168 circular_buffer<MyInteger>::iterator it = cb.begin() + 2;
169 circular_buffer<MyInteger>::const_iterator begin = cb.begin();
170 circular_buffer<MyInteger>::iterator end = cb.end();
172 BOOST_TEST(begin == begin);
173 BOOST_TEST(end > cb.begin());
174 BOOST_TEST(begin < end);
175 BOOST_TEST(end > begin);
176 BOOST_TEST(end == end);
177 BOOST_TEST(begin < cb.end());
178 BOOST_TEST(!(begin + 1 > cb.end()));
179 BOOST_TEST(it > cb.begin());
180 BOOST_TEST(end > it);
181 BOOST_TEST(begin >= begin);
182 BOOST_TEST(end >= cb.begin());
183 BOOST_TEST(end <= end);
184 BOOST_TEST(begin <= cb.end());
185 BOOST_TEST(it >= cb.begin());
186 BOOST_TEST(end >= it);
187 BOOST_TEST(!(begin + 4 < begin + 4));
188 BOOST_TEST(begin + 4 < begin + 5);
189 BOOST_TEST(!(begin + 5 < begin + 4));
190 BOOST_TEST(it < end - 1);
191 BOOST_TEST(!(end - 1 < it));
194 void iterator_invalidation_test() {
196 #if BOOST_CB_ENABLE_DEBUG
198 circular_buffer<MyInteger>::iterator it1;
199 circular_buffer<MyInteger>::const_iterator it2;
200 circular_buffer<MyInteger>::iterator it3;
201 circular_buffer<MyInteger>::const_iterator it4;
202 circular_buffer<MyInteger>::const_iterator it5;
203 circular_buffer<MyInteger>::const_iterator it6;
205 BOOST_TEST(it1.is_valid(0));
206 BOOST_TEST(it2.is_valid(0));
207 BOOST_TEST(it3.is_valid(0));
208 BOOST_TEST(it4.is_valid(0));
209 BOOST_TEST(it5.is_valid(0));
210 BOOST_TEST(it6.is_valid(0));
213 circular_buffer<MyInteger> cb(5, 0);
214 const circular_buffer<MyInteger> ccb(5, 0);
223 BOOST_TEST(it1.is_valid(&cb));
224 BOOST_TEST(it2.is_valid(&ccb));
225 BOOST_TEST(it3.is_valid(&cb));
226 BOOST_TEST(it4.is_valid(&cb));
227 BOOST_TEST(it5.is_valid(&ccb));
228 BOOST_TEST(it6.is_valid(&cb));
231 BOOST_TEST(it1.is_valid(0));
232 BOOST_TEST(it2.is_valid(0));
233 BOOST_TEST(it3.is_valid(0));
234 BOOST_TEST(it4.is_valid(0));
235 BOOST_TEST(it5.is_valid(0));
236 BOOST_TEST(it6.is_valid(0));
238 circular_buffer<MyInteger> cb(10, 0);
241 BOOST_TEST(it1.is_valid(&cb));
246 for (it2 = cb.begin(); it2 != it1; it2++, i++);
249 circular_buffer<MyInteger> cb1(10, 0);
250 circular_buffer<MyInteger> cb2(20, 0);
253 BOOST_TEST(it1.is_valid(&cb1));
254 BOOST_TEST(it2.is_valid(&cb2));
257 BOOST_TEST(!it1.is_valid(&cb1));
258 BOOST_TEST(!it2.is_valid(&cb2));
260 it1 = cb1.begin() + 3;
263 BOOST_TEST(it1.is_valid(&cb1));
264 BOOST_TEST(!it2.is_valid(&cb1));
265 BOOST_TEST(*it2.m_it == 1);
267 circular_buffer<MyInteger> cb3(5);
273 it1 = cb3.begin() + 2;
275 cb3.insert(cb3.begin() + 3, 6);
276 BOOST_TEST(it1.is_valid(&cb3));
277 BOOST_TEST(!it2.is_valid(&cb3));
278 BOOST_TEST(*it2.m_it == 5);
280 it1 = cb3.begin() + 3;
283 BOOST_TEST(it1.is_valid(&cb3));
284 BOOST_TEST(!it2.is_valid(&cb3));
285 BOOST_TEST(*it2.m_it == 7);
287 circular_buffer<MyInteger> cb4(5);
293 it1 = cb4.begin() + 3;
295 cb4.rinsert(cb4.begin() + 2, 6);
296 BOOST_TEST(it1.is_valid(&cb4));
297 BOOST_TEST(!it2.is_valid(&cb4));
298 BOOST_TEST(*it2.m_it == 2);
300 it1 = cb1.begin() + 5;
303 BOOST_TEST(it1.is_valid(&cb1));
304 BOOST_TEST(!it2.is_valid(&cb1));
306 it1 = cb1.begin() + 5;
309 BOOST_TEST(it1.is_valid(&cb1));
310 BOOST_TEST(!it2.is_valid(&cb1));
312 circular_buffer<MyInteger> cb5(20, 0);
313 it1 = cb5.begin() + 5;
314 it2 = it3 = cb5.begin() + 15;
315 cb5.erase(cb5.begin() + 10);
316 BOOST_TEST(it1.is_valid(&cb5));
317 BOOST_TEST(!it2.is_valid(&cb5));
318 BOOST_TEST(!it3.is_valid(&cb5));
320 it1 = cb5.begin() + 1;
321 it2 = it3 = cb5.begin() + 8;
322 cb5.erase(cb5.begin() + 3, cb5.begin() + 7);
323 BOOST_TEST(it1.is_valid(&cb5));
324 BOOST_TEST(!it2.is_valid(&cb5));
325 BOOST_TEST(!it3.is_valid(&cb5));
327 circular_buffer<MyInteger> cb6(20, 0);
328 it4 = it1 = cb6.begin() + 5;
329 it2 = cb6.begin() + 15;
330 cb6.rerase(cb6.begin() + 10);
331 BOOST_TEST(!it1.is_valid(&cb6));
332 BOOST_TEST(!it4.is_valid(&cb6));
333 BOOST_TEST(it2.is_valid(&cb6));
335 it4 = it1 = cb6.begin() + 1;
336 it2 = cb6.begin() + 8;
337 cb6.rerase(cb6.begin() + 3, cb6.begin() + 7);
338 BOOST_TEST(!it1.is_valid(&cb6));
339 BOOST_TEST(!it4.is_valid(&cb6));
340 BOOST_TEST(it2.is_valid(&cb6));
342 circular_buffer<MyInteger> cb7(10, 1);
348 it3 = cb7.begin() + 6;
350 BOOST_TEST(it1.is_valid(&cb7));
351 BOOST_TEST(!it2.is_valid(&cb7));
352 BOOST_TEST(!it3.is_valid(&cb7));
355 it3 = cb7.begin() + 6;
357 BOOST_TEST(it1.is_valid(&cb7));
358 BOOST_TEST(it2.is_valid(&cb7));
359 BOOST_TEST(it3.is_valid(&cb7));
365 it3 = cb7.begin() + 6;
366 cb7.set_capacity(10);
367 BOOST_TEST(it1.is_valid(&cb7));
368 BOOST_TEST(it2.is_valid(&cb7));
369 BOOST_TEST(it3.is_valid(&cb7));
370 cb7.set_capacity(20);
371 BOOST_TEST(it1.is_valid(&cb7));
372 BOOST_TEST(!it2.is_valid(&cb7));
373 BOOST_TEST(!it3.is_valid(&cb7));
377 it3 = cb7.begin() + 6;
378 cb7.set_capacity(10);
379 BOOST_TEST(it1.is_valid(&cb7));
380 BOOST_TEST(!it2.is_valid(&cb7));
381 BOOST_TEST(!it3.is_valid(&cb7));
387 it3 = cb7.begin() + 6;
388 cb7.rset_capacity(10);
389 BOOST_TEST(it1.is_valid(&cb7));
390 BOOST_TEST(it2.is_valid(&cb7));
391 BOOST_TEST(it3.is_valid(&cb7));
392 cb7.rset_capacity(20);
393 BOOST_TEST(it1.is_valid(&cb7));
394 BOOST_TEST(!it2.is_valid(&cb7));
395 BOOST_TEST(!it3.is_valid(&cb7));
399 it3 = cb7.begin() + 6;
400 cb7.rset_capacity(10);
401 BOOST_TEST(it1.is_valid(&cb7));
402 BOOST_TEST(!it2.is_valid(&cb7));
403 BOOST_TEST(!it3.is_valid(&cb7));
405 circular_buffer<MyInteger> cb8(10, 1);
410 it3 = cb8.begin() + 6;
412 BOOST_TEST(it1.is_valid(&cb8));
413 BOOST_TEST(it2.is_valid(&cb8));
414 BOOST_TEST(it3.is_valid(&cb8));
416 BOOST_TEST(it1.is_valid(&cb8));
417 BOOST_TEST(!it2.is_valid(&cb8));
418 BOOST_TEST(!it3.is_valid(&cb8));
422 it3 = cb8.begin() + 6;
423 it4 = cb8.begin() + 12;
425 BOOST_TEST(it1.is_valid(&cb8));
426 BOOST_TEST(it2.is_valid(&cb8));
427 BOOST_TEST(it3.is_valid(&cb8));
428 BOOST_TEST(!it4.is_valid(&cb8));
430 cb8.set_capacity(10);
435 it3 = cb8.begin() + 6;
437 BOOST_TEST(it1.is_valid(&cb8));
438 BOOST_TEST(it2.is_valid(&cb8));
439 BOOST_TEST(it3.is_valid(&cb8));
441 BOOST_TEST(it1.is_valid(&cb8));
442 BOOST_TEST(!it2.is_valid(&cb8));
443 BOOST_TEST(!it3.is_valid(&cb8));
447 it3 = cb8.begin() + 6;
448 it4 = cb8.begin() + 12;
450 BOOST_TEST(it1.is_valid(&cb8));
451 BOOST_TEST(!it2.is_valid(&cb8));
452 BOOST_TEST(!it3.is_valid(&cb8));
453 BOOST_TEST(it4.is_valid(&cb8));
455 circular_buffer<MyInteger> cb9(15, 1);
458 it3 = cb9.begin() + 6;
459 it4 = cb9.begin() + 12;
461 BOOST_TEST(it1.is_valid(&cb9));
462 BOOST_TEST(!it2.is_valid(&cb9));
463 BOOST_TEST(!it3.is_valid(&cb9));
464 BOOST_TEST(!it4.is_valid(&cb9));
466 circular_buffer<MyInteger> cb10(10, 1);
469 it3 = cb10.begin() + 3;
470 it4 = cb10.begin() + 7;
472 BOOST_TEST(it1.is_valid(&cb10));
473 BOOST_TEST(!it2.is_valid(&cb10));
474 BOOST_TEST(!it3.is_valid(&cb10));
475 BOOST_TEST(!it4.is_valid(&cb10));
477 circular_buffer<MyInteger> cb11(10, 1);
480 it3 = cb11.begin() + 3;
481 it4 = cb11.begin() + 7;
482 cb11.assign(15, 5, 2);
483 BOOST_TEST(it1.is_valid(&cb11));
484 BOOST_TEST(!it2.is_valid(&cb11));
485 BOOST_TEST(!it3.is_valid(&cb11));
486 BOOST_TEST(!it4.is_valid(&cb11));
488 circular_buffer<MyInteger> cb12(10, 1);
491 it3 = cb12.begin() + 3;
492 it4 = cb12.begin() + 7;
493 cb12.assign(cb11.begin(), cb11.end());
494 BOOST_TEST(it1.is_valid(&cb12));
495 BOOST_TEST(!it2.is_valid(&cb12));
496 BOOST_TEST(!it3.is_valid(&cb12));
497 BOOST_TEST(!it4.is_valid(&cb12));
499 circular_buffer<MyInteger> cb13(10, 1);
502 it3 = cb13.begin() + 3;
503 it4 = cb13.begin() + 7;
504 cb13.assign(15, cb11.begin(), cb11.end());
505 BOOST_TEST(it1.is_valid(&cb13));
506 BOOST_TEST(!it2.is_valid(&cb13));
507 BOOST_TEST(!it3.is_valid(&cb13));
508 BOOST_TEST(!it4.is_valid(&cb13));
510 circular_buffer<MyInteger> cb14(10);
519 it2 = cb14.begin() + 2;
520 it3 = cb14.begin() + 1;
521 it4 = cb14.begin() + 5;
523 BOOST_TEST(it1.is_valid(&cb14));
524 BOOST_TEST(it2.is_valid(&cb14));
525 BOOST_TEST(!it3.is_valid(&cb14));
526 BOOST_TEST(it4.is_valid(&cb14));
528 circular_buffer<MyInteger> cb15(7);
539 it2 = cb15.begin() + 2;
540 it3 = cb15.begin() + 1;
541 it4 = cb15.begin() + 5;
543 BOOST_TEST(it1.is_valid(&cb15));
544 BOOST_TEST(it2.is_valid(&cb15));
545 BOOST_TEST(it3.is_valid(&cb15));
546 BOOST_TEST(it4.is_valid(&cb15));
548 circular_buffer<MyInteger> cb16(10);
557 it2 = cb16.begin() + 6;
559 it4 = cb16.begin() + 5;
561 BOOST_TEST(it1.is_valid(&cb16));
562 BOOST_TEST(!it2.is_valid(&cb16));
563 BOOST_TEST(it3.is_valid(&cb16));
564 BOOST_TEST(!it4.is_valid(&cb16));
566 #endif // #if BOOST_CB_ENABLE_DEBUG
569 // basic exception safety test (it is useful to use any memory-leak detection tool)
570 void exception_safety_test() {
572 #if !defined(BOOST_NO_EXCEPTIONS)
574 circular_buffer<MyInteger> cb1(3, 5);
575 MyInteger::set_exception_trigger(3);
576 BOOST_TEST_THROWS(cb1.set_capacity(5), std::exception);
577 BOOST_TEST(cb1.capacity() == 3);
578 MyInteger::set_exception_trigger(3);
579 BOOST_TEST_THROWS(cb1.rset_capacity(5), std::exception);
580 BOOST_TEST(cb1.capacity() == 3);
583 MyInteger::set_exception_trigger(3);
584 BOOST_TEST_THROWS(circular_buffer<MyInteger> cb2(5, 10), std::exception);
586 circular_buffer<MyInteger> cb3(5, 10);
587 MyInteger::set_exception_trigger(3);
588 BOOST_TEST_THROWS(circular_buffer<MyInteger> cb4(cb3), std::exception);
590 vector<MyInteger> v(5, MyInteger(10));
591 MyInteger::set_exception_trigger(3);
592 BOOST_TEST_THROWS(circular_buffer<MyInteger> cb5(8, v.begin(), v.end()), std::exception);
594 circular_buffer<MyInteger> cb6(5, 10);
595 circular_buffer<MyInteger> cb7(8, 3);
596 MyInteger::set_exception_trigger(3);
597 BOOST_TEST_THROWS(cb7 = cb6, std::exception);
598 BOOST_TEST(cb7.size() == 8);
599 BOOST_TEST(cb7.capacity() == 8);
600 BOOST_TEST(cb7[0] == 3);
601 BOOST_TEST(cb7[7] == 3);
604 circular_buffer<MyInteger> cb8(5, 10);
605 MyInteger::set_exception_trigger(2);
606 BOOST_TEST_THROWS(cb8.push_front(1), std::exception);
608 circular_buffer<MyInteger> cb9(5);
612 MyInteger::set_exception_trigger(3);
613 BOOST_TEST_THROWS(cb9.insert(cb9.begin() + 1, 4), std::exception);
615 circular_buffer<MyInteger> cb10(5);
619 MyInteger::set_exception_trigger(3);
620 BOOST_TEST_THROWS(cb10.rinsert(cb10.begin() + 1, 4), std::exception);
622 circular_buffer<MyInteger> cb11(5);
625 MyInteger::set_exception_trigger(2);
626 BOOST_TEST_THROWS(cb11.rinsert(cb11.begin(), 1), std::exception);
628 circular_buffer<MyInteger> cb12(5, 1);
629 MyInteger::set_exception_trigger(3);
630 BOOST_TEST_THROWS(cb12.assign(4, 2), std::exception);
632 circular_buffer<MyInteger> cb13(5, 1);
633 MyInteger::set_exception_trigger(3);
634 BOOST_TEST_THROWS(cb13.assign(6, 2), std::exception);
636 circular_buffer<MyInteger> cb14(5);
639 MyInteger::set_exception_trigger(3);
640 BOOST_TEST_THROWS(cb14.insert(cb14.begin(), 10, 3), std::exception);
642 circular_buffer<MyInteger> cb15(5);
645 MyInteger::set_exception_trigger(3);
646 BOOST_TEST_THROWS(cb15.insert(cb15.end(), 10, 3), std::exception);
648 circular_buffer<MyInteger> cb16(5);
651 MyInteger::set_exception_trigger(3);
652 BOOST_TEST_THROWS(cb16.rinsert(cb16.begin(), 10, 3), std::exception);
654 circular_buffer<MyInteger> cb17(5);
657 MyInteger::set_exception_trigger(3);
658 BOOST_TEST_THROWS(cb17.rinsert(cb17.end(), 10, 3), std::exception);
660 circular_buffer<MyInteger> cb18(5, 0);
664 MyInteger::set_exception_trigger(4);
665 BOOST_TEST_THROWS(cb18.linearize(), std::exception);
667 circular_buffer<MyInteger> cb19(5, 0);
670 MyInteger::set_exception_trigger(5);
671 BOOST_TEST_THROWS(cb19.linearize(), std::exception);
673 circular_buffer<MyInteger> cb20(5, 0);
676 MyInteger::set_exception_trigger(6);
677 BOOST_TEST_THROWS(cb20.linearize(), std::exception);
679 circular_buffer<MyInteger> cb21(5);
683 MyInteger::set_exception_trigger(2);
684 BOOST_TEST_THROWS(cb21.insert(cb21.begin() + 1, 4), std::exception);
686 circular_buffer<MyInteger> cb22(5);
690 MyInteger::set_exception_trigger(2);
691 BOOST_TEST_THROWS(cb22.insert(cb22.end(), 4), std::exception);
693 circular_buffer<MyInteger> cb23(5, 0);
694 MyInteger::set_exception_trigger(2);
695 BOOST_TEST_THROWS(cb23.insert(cb23.begin() + 1, 4), std::exception);
697 circular_buffer<MyInteger> cb24(5);
701 MyInteger::set_exception_trigger(2);
702 BOOST_TEST_THROWS(cb24.rinsert(cb24.begin() + 1, 4), std::exception);
704 circular_buffer<MyInteger> cb25(5, 0);
705 MyInteger::set_exception_trigger(2);
706 BOOST_TEST_THROWS(cb25.rinsert(cb25.begin() + 3, 4), std::exception);
708 circular_buffer<MyInteger> cb26(5);
711 MyInteger::set_exception_trigger(5);
712 BOOST_TEST_THROWS(cb26.insert(cb26.begin(), 10, 3), std::exception);
714 circular_buffer<MyInteger> cb27(5);
717 MyInteger::set_exception_trigger(5);
718 BOOST_TEST_THROWS(cb27.insert(cb27.end(), 10, 3), std::exception);
720 circular_buffer<MyInteger> cb28(5);
723 MyInteger::set_exception_trigger(5);
724 BOOST_TEST_THROWS(cb28.rinsert(cb28.begin(), 10, 3), std::exception);
726 circular_buffer<MyInteger> cb29(5);
729 MyInteger::set_exception_trigger(5);
730 BOOST_TEST_THROWS(cb29.rinsert(cb29.end(), 10, 3), std::exception);
732 circular_buffer<MyInteger> cb30(10);
736 MyInteger::set_exception_trigger(2);
737 BOOST_TEST_THROWS(cb30.rinsert(cb30.begin(), 10, 3), std::exception);
739 #endif // #if !defined(BOOST_NO_EXCEPTIONS)
743 void move_container_values_except() {
744 move_container_values_impl<noncopyable_movable_except_t>();
748 void move_container_values_resetting_impl() {
749 typedef T noncopyable_movable_test_t;
750 CB_CONTAINER<noncopyable_movable_test_t> cb1(1);
751 noncopyable_movable_test_t var;
754 cb1.push_back(boost::move(var));
755 BOOST_TEST(!cb1.back().is_moved());
756 BOOST_TEST(var.is_moved());
757 BOOST_TEST(cb1.size() == 1);
758 var = boost::move(cb1.back());
759 BOOST_TEST(cb1.back().is_moved());
761 cb1.push_front(boost::move(var));
762 BOOST_TEST(!cb1.front().is_moved());
763 BOOST_TEST(var.is_moved());
764 BOOST_TEST(cb1.size() == 1);
765 var = boost::move(cb1.back());
766 BOOST_TEST(cb1.back().is_moved());
769 BOOST_TEST(!cb1.back().is_moved());
770 BOOST_TEST(cb1.size() == 1);
771 var = boost::move(cb1.back());
772 BOOST_TEST(cb1.back().is_moved());
775 BOOST_TEST(!cb1.front().is_moved());
776 BOOST_TEST(cb1.size() == 1);
777 var = boost::move(cb1.back());
778 BOOST_TEST(cb1.back().is_moved());
781 cb1.insert(cb1.begin());
782 // If the circular_buffer is full and the pos points to begin(),
783 // then the item will not be inserted.
784 BOOST_TEST(cb1.front().is_moved());
785 BOOST_TEST(cb1.size() == 1);
786 var = boost::move(cb1.back());
787 BOOST_TEST(cb1.back().is_moved());
789 cb1.insert(cb1.begin(), boost::move(var));
790 // If the circular_buffer is full and the pos points to begin(),
791 // then the item will not be inserted.
792 BOOST_TEST(cb1.front().is_moved());
793 BOOST_TEST(cb1.size() == 1);
794 var = boost::move(cb1.back());
795 BOOST_TEST(cb1.back().is_moved());
797 cb1.rinsert(cb1.begin());
798 BOOST_TEST(!cb1.back().is_moved());
799 BOOST_TEST(cb1.size() == 1);
800 var = boost::move(cb1.back());
801 BOOST_TEST(cb1.back().is_moved());
804 cb1.rinsert(cb1.begin(), boost::move(var));
805 BOOST_TEST(!cb1.back().is_moved());
806 BOOST_TEST(cb1.size() == 1);
807 var = boost::move(cb1.back());
808 BOOST_TEST(cb1.back().is_moved());
810 cb1.rinsert(cb1.end());
811 BOOST_TEST(cb1.back().is_moved());
812 BOOST_TEST(cb1.size() == 1);
813 var = boost::move(cb1.back());
814 BOOST_TEST(cb1.back().is_moved());
817 cb1.rinsert(cb1.end(), boost::move(var));
818 BOOST_TEST(cb1.back().is_moved());
819 BOOST_TEST(cb1.size() == 1);
820 var = boost::move(cb1.back());
821 BOOST_TEST(cb1.back().is_moved());
823 BOOST_TEST(!cb1[0].is_moved());
825 const int val = cb1[0].value();
827 BOOST_TEST(!cb1[0].is_moved());
828 BOOST_TEST(cb1[0].value() == val);
830 cb1.rotate(cb1.begin());
831 BOOST_TEST(!cb1[0].is_moved());
832 BOOST_TEST(cb1[0].value() == val);
835 void move_container_values_resetting_except() {
836 move_container_values_resetting_impl<noncopyable_movable_except_t>();
839 void move_container_values_resetting_noexcept() {
840 move_container_values_resetting_impl<noncopyable_movable_noexcept_t>();
847 iterator_constructor_and_assign_test();
848 iterator_reference_test();
849 iterator_difference_test();
850 iterator_increment_test();
851 iterator_decrement_test();
852 iterator_addition_test();
853 iterator_subtraction_test();
854 iterator_element_access_test();
855 iterator_comparison_test();
856 iterator_invalidation_test();
857 exception_safety_test();
858 move_container_values_except();
859 move_container_values_resetting_except();
860 move_container_values_resetting_noexcept();
861 return boost::report_errors();