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
>::const_iterator cit2
= cb
.cbegin();
21 circular_buffer
<MyInteger
>::iterator itCopy
;
24 circular_buffer
<MyInteger
>::const_iterator cit
;
26 circular_buffer
<MyInteger
>::const_iterator end1
= cb
.end();
27 circular_buffer
<MyInteger
>::const_iterator end2
= end1
;
28 circular_buffer
<MyInteger
>::const_iterator end3
= cb
.cend();
30 BOOST_TEST(itCopy
== it
);
31 BOOST_TEST(cit
== it
);
32 BOOST_TEST(end1
== end2
);
33 BOOST_TEST(it
!= end1
);
34 BOOST_TEST(cit
!= end2
);
35 BOOST_TEST(cit2
== it
);
36 BOOST_TEST(end3
== end1
);
39 void iterator_reference_test() {
41 circular_buffer
<Dummy
> cb(3, Dummy());
42 circular_buffer
<Dummy
>::iterator it
= cb
.begin();
43 circular_buffer
<Dummy
>::const_iterator cit
= cb
.begin() + 1;
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
);
49 BOOST_TEST(it
->m_n
== Dummy::eVar
);
50 BOOST_TEST(it
->fnc() == Dummy::eFnc
);
51 BOOST_TEST(cit
->const_fnc() == Dummy::eConst
);
52 BOOST_TEST(it
->virtual_fnc() == Dummy::eVirtual
);
55 void iterator_difference_test() {
57 circular_buffer
<MyInteger
> cb(5, 1);
59 circular_buffer
<MyInteger
>::iterator it1
= cb
.begin() + 2;
60 circular_buffer
<MyInteger
>::iterator it2
= cb
.begin() + 3;
61 circular_buffer
<MyInteger
>::const_iterator begin
= cb
.begin();
62 circular_buffer
<MyInteger
>::iterator end
= cb
.end();
64 BOOST_TEST(begin
- begin
== 0);
65 BOOST_TEST(end
- cb
.begin() == 5);
66 BOOST_TEST(end
- end
== 0);
67 BOOST_TEST(begin
- cb
.end() == -5);
68 BOOST_TEST(it1
- cb
.begin() == 2);
69 BOOST_TEST(it1
- begin
== 2);
70 BOOST_TEST(end
- it1
== 3);
71 BOOST_TEST(it2
- it1
== 1);
72 BOOST_TEST(it1
- it2
== -1);
73 BOOST_TEST(it2
- it2
== 0);
76 void iterator_increment_test() {
78 circular_buffer
<MyInteger
> cb(10, 1);
80 circular_buffer
<MyInteger
>::iterator it1
= cb
.begin();
81 circular_buffer
<MyInteger
>::iterator it2
= cb
.begin() + 5;
82 circular_buffer
<MyInteger
>::iterator it3
= cb
.begin() + 9;
87 BOOST_TEST(it1
== cb
.begin() + 1);
88 BOOST_TEST(it2
== cb
.begin() + 6);
89 BOOST_TEST(it3
== cb
.end());
92 void iterator_decrement_test() {
94 circular_buffer
<MyInteger
> cb(10, 1);
96 circular_buffer
<MyInteger
>::iterator it1
= cb
.end();
97 circular_buffer
<MyInteger
>::iterator it2
= cb
.end() - 5;
98 circular_buffer
<MyInteger
>::iterator it3
= cb
.end() - 9;
103 BOOST_TEST(it1
== cb
.end() - 1);
104 BOOST_TEST(it2
== cb
.end() - 6);
105 BOOST_TEST(it3
== cb
.begin());
108 void iterator_addition_test() {
110 circular_buffer
<MyInteger
> cb(10, 1);
113 circular_buffer
<MyInteger
>::iterator it1
= cb
.begin() + 2;
114 circular_buffer
<MyInteger
>::iterator it2
= cb
.end();
115 circular_buffer
<MyInteger
>::iterator it3
= cb
.begin() + 5;
116 circular_buffer
<MyInteger
>::iterator it4
= cb
.begin() + 9;
122 BOOST_TEST(it1
== 5 + cb
.begin());
123 BOOST_TEST(it2
== cb
.end());
124 BOOST_TEST(it3
== cb
.end());
125 BOOST_TEST(it4
+ 3 == cb
.end());
126 BOOST_TEST((-3) + it4
== cb
.begin() + 4);
127 BOOST_TEST(cb
.begin() + 0 == cb
.begin());
130 void iterator_subtraction_test() {
132 circular_buffer
<MyInteger
> cb(10, 1);
136 circular_buffer
<MyInteger
>::iterator it1
= cb
.begin();
137 circular_buffer
<MyInteger
>::iterator it2
= cb
.end();
138 circular_buffer
<MyInteger
>::iterator it3
= cb
.end() - 5;
139 circular_buffer
<MyInteger
>::iterator it4
= cb
.begin() + 7;
144 BOOST_TEST(it1
== cb
.begin() + 2);
145 BOOST_TEST(it2
== cb
.end());
146 BOOST_TEST(it3
== cb
.begin());
147 BOOST_TEST(it4
- 7 == cb
.begin());
148 BOOST_TEST(it4
- (-3) == cb
.end());
149 BOOST_TEST(cb
.begin() - 0 == cb
.begin());
152 void iterator_element_access_test() {
154 circular_buffer
<MyInteger
> cb(10);
161 circular_buffer
<MyInteger
>::iterator it
= cb
.begin() + 1;
163 BOOST_TEST(it
[0] == 2);
164 BOOST_TEST(it
[-1] == 1);
165 BOOST_TEST(it
[2] == 4);
168 void iterator_comparison_test() {
170 circular_buffer
<MyInteger
> cb(5, 1);
172 circular_buffer
<MyInteger
>::iterator it
= cb
.begin() + 2;
173 circular_buffer
<MyInteger
>::const_iterator begin
= cb
.begin();
174 circular_buffer
<MyInteger
>::iterator end
= cb
.end();
176 BOOST_TEST(begin
== begin
);
177 BOOST_TEST(end
> cb
.begin());
178 BOOST_TEST(begin
< end
);
179 BOOST_TEST(end
> begin
);
180 BOOST_TEST(end
== end
);
181 BOOST_TEST(begin
< cb
.end());
182 BOOST_TEST(!(begin
+ 1 > cb
.end()));
183 BOOST_TEST(it
> cb
.begin());
184 BOOST_TEST(end
> it
);
185 BOOST_TEST(begin
>= begin
);
186 BOOST_TEST(end
>= cb
.begin());
187 BOOST_TEST(end
<= end
);
188 BOOST_TEST(begin
<= cb
.end());
189 BOOST_TEST(it
>= cb
.begin());
190 BOOST_TEST(end
>= it
);
191 BOOST_TEST(!(begin
+ 4 < begin
+ 4));
192 BOOST_TEST(begin
+ 4 < begin
+ 5);
193 BOOST_TEST(!(begin
+ 5 < begin
+ 4));
194 BOOST_TEST(it
< end
- 1);
195 BOOST_TEST(!(end
- 1 < it
));
198 void iterator_invalidation_test() {
200 #if BOOST_CB_ENABLE_DEBUG
202 circular_buffer
<MyInteger
>::iterator it1
;
203 circular_buffer
<MyInteger
>::const_iterator it2
;
204 circular_buffer
<MyInteger
>::iterator it3
;
205 circular_buffer
<MyInteger
>::const_iterator it4
;
206 circular_buffer
<MyInteger
>::const_iterator it5
;
207 circular_buffer
<MyInteger
>::const_iterator it6
;
209 BOOST_TEST(it1
.is_valid(0));
210 BOOST_TEST(it2
.is_valid(0));
211 BOOST_TEST(it3
.is_valid(0));
212 BOOST_TEST(it4
.is_valid(0));
213 BOOST_TEST(it5
.is_valid(0));
214 BOOST_TEST(it6
.is_valid(0));
217 circular_buffer
<MyInteger
> cb(5, 0);
218 const circular_buffer
<MyInteger
> ccb(5, 0);
227 BOOST_TEST(it1
.is_valid(&cb
));
228 BOOST_TEST(it2
.is_valid(&ccb
));
229 BOOST_TEST(it3
.is_valid(&cb
));
230 BOOST_TEST(it4
.is_valid(&cb
));
231 BOOST_TEST(it5
.is_valid(&ccb
));
232 BOOST_TEST(it6
.is_valid(&cb
));
235 BOOST_TEST(it1
.is_valid(0));
236 BOOST_TEST(it2
.is_valid(0));
237 BOOST_TEST(it3
.is_valid(0));
238 BOOST_TEST(it4
.is_valid(0));
239 BOOST_TEST(it5
.is_valid(0));
240 BOOST_TEST(it6
.is_valid(0));
242 circular_buffer
<MyInteger
> cb(10, 0);
245 BOOST_TEST(it1
.is_valid(&cb
));
250 for (it2
= cb
.begin(); it2
!= it1
; it2
++, i
++);
253 circular_buffer
<MyInteger
> cb1(10, 0);
254 circular_buffer
<MyInteger
> cb2(20, 0);
257 BOOST_TEST(it1
.is_valid(&cb1
));
258 BOOST_TEST(it2
.is_valid(&cb2
));
261 BOOST_TEST(!it1
.is_valid(&cb1
));
262 BOOST_TEST(!it2
.is_valid(&cb2
));
264 it1
= cb1
.begin() + 3;
267 BOOST_TEST(it1
.is_valid(&cb1
));
268 BOOST_TEST(!it2
.is_valid(&cb1
));
269 BOOST_TEST(*it2
.m_it
== 1);
271 circular_buffer
<MyInteger
> cb3(5);
277 it1
= cb3
.begin() + 2;
279 cb3
.insert(cb3
.begin() + 3, 6);
280 BOOST_TEST(it1
.is_valid(&cb3
));
281 BOOST_TEST(!it2
.is_valid(&cb3
));
282 BOOST_TEST(*it2
.m_it
== 5);
284 it1
= cb3
.begin() + 3;
287 BOOST_TEST(it1
.is_valid(&cb3
));
288 BOOST_TEST(!it2
.is_valid(&cb3
));
289 BOOST_TEST(*it2
.m_it
== 7);
291 circular_buffer
<MyInteger
> cb4(5);
297 it1
= cb4
.begin() + 3;
299 cb4
.rinsert(cb4
.begin() + 2, 6);
300 BOOST_TEST(it1
.is_valid(&cb4
));
301 BOOST_TEST(!it2
.is_valid(&cb4
));
302 BOOST_TEST(*it2
.m_it
== 2);
304 it1
= cb1
.begin() + 5;
307 BOOST_TEST(it1
.is_valid(&cb1
));
308 BOOST_TEST(!it2
.is_valid(&cb1
));
310 it1
= cb1
.begin() + 5;
313 BOOST_TEST(it1
.is_valid(&cb1
));
314 BOOST_TEST(!it2
.is_valid(&cb1
));
316 circular_buffer
<MyInteger
> cb5(20, 0);
317 it1
= cb5
.begin() + 5;
318 it2
= it3
= cb5
.begin() + 15;
319 cb5
.erase(cb5
.begin() + 10);
320 BOOST_TEST(it1
.is_valid(&cb5
));
321 BOOST_TEST(!it2
.is_valid(&cb5
));
322 BOOST_TEST(!it3
.is_valid(&cb5
));
324 it1
= cb5
.begin() + 1;
325 it2
= it3
= cb5
.begin() + 8;
326 cb5
.erase(cb5
.begin() + 3, cb5
.begin() + 7);
327 BOOST_TEST(it1
.is_valid(&cb5
));
328 BOOST_TEST(!it2
.is_valid(&cb5
));
329 BOOST_TEST(!it3
.is_valid(&cb5
));
331 circular_buffer
<MyInteger
> cb6(20, 0);
332 it4
= it1
= cb6
.begin() + 5;
333 it2
= cb6
.begin() + 15;
334 cb6
.rerase(cb6
.begin() + 10);
335 BOOST_TEST(!it1
.is_valid(&cb6
));
336 BOOST_TEST(!it4
.is_valid(&cb6
));
337 BOOST_TEST(it2
.is_valid(&cb6
));
339 it4
= it1
= cb6
.begin() + 1;
340 it2
= cb6
.begin() + 8;
341 cb6
.rerase(cb6
.begin() + 3, cb6
.begin() + 7);
342 BOOST_TEST(!it1
.is_valid(&cb6
));
343 BOOST_TEST(!it4
.is_valid(&cb6
));
344 BOOST_TEST(it2
.is_valid(&cb6
));
346 circular_buffer
<MyInteger
> cb7(10, 1);
352 it3
= cb7
.begin() + 6;
354 BOOST_TEST(it1
.is_valid(&cb7
));
355 BOOST_TEST(!it2
.is_valid(&cb7
));
356 BOOST_TEST(!it3
.is_valid(&cb7
));
359 it3
= cb7
.begin() + 6;
361 BOOST_TEST(it1
.is_valid(&cb7
));
362 BOOST_TEST(it2
.is_valid(&cb7
));
363 BOOST_TEST(it3
.is_valid(&cb7
));
369 it3
= cb7
.begin() + 6;
370 cb7
.set_capacity(10);
371 BOOST_TEST(it1
.is_valid(&cb7
));
372 BOOST_TEST(it2
.is_valid(&cb7
));
373 BOOST_TEST(it3
.is_valid(&cb7
));
374 cb7
.set_capacity(20);
375 BOOST_TEST(it1
.is_valid(&cb7
));
376 BOOST_TEST(!it2
.is_valid(&cb7
));
377 BOOST_TEST(!it3
.is_valid(&cb7
));
381 it3
= cb7
.begin() + 6;
382 cb7
.set_capacity(10);
383 BOOST_TEST(it1
.is_valid(&cb7
));
384 BOOST_TEST(!it2
.is_valid(&cb7
));
385 BOOST_TEST(!it3
.is_valid(&cb7
));
391 it3
= cb7
.begin() + 6;
392 cb7
.rset_capacity(10);
393 BOOST_TEST(it1
.is_valid(&cb7
));
394 BOOST_TEST(it2
.is_valid(&cb7
));
395 BOOST_TEST(it3
.is_valid(&cb7
));
396 cb7
.rset_capacity(20);
397 BOOST_TEST(it1
.is_valid(&cb7
));
398 BOOST_TEST(!it2
.is_valid(&cb7
));
399 BOOST_TEST(!it3
.is_valid(&cb7
));
403 it3
= cb7
.begin() + 6;
404 cb7
.rset_capacity(10);
405 BOOST_TEST(it1
.is_valid(&cb7
));
406 BOOST_TEST(!it2
.is_valid(&cb7
));
407 BOOST_TEST(!it3
.is_valid(&cb7
));
409 circular_buffer
<MyInteger
> cb8(10, 1);
414 it3
= cb8
.begin() + 6;
416 BOOST_TEST(it1
.is_valid(&cb8
));
417 BOOST_TEST(it2
.is_valid(&cb8
));
418 BOOST_TEST(it3
.is_valid(&cb8
));
420 BOOST_TEST(it1
.is_valid(&cb8
));
421 BOOST_TEST(!it2
.is_valid(&cb8
));
422 BOOST_TEST(!it3
.is_valid(&cb8
));
426 it3
= cb8
.begin() + 6;
427 it4
= cb8
.begin() + 12;
429 BOOST_TEST(it1
.is_valid(&cb8
));
430 BOOST_TEST(it2
.is_valid(&cb8
));
431 BOOST_TEST(it3
.is_valid(&cb8
));
432 BOOST_TEST(!it4
.is_valid(&cb8
));
434 cb8
.set_capacity(10);
439 it3
= cb8
.begin() + 6;
441 BOOST_TEST(it1
.is_valid(&cb8
));
442 BOOST_TEST(it2
.is_valid(&cb8
));
443 BOOST_TEST(it3
.is_valid(&cb8
));
445 BOOST_TEST(it1
.is_valid(&cb8
));
446 BOOST_TEST(!it2
.is_valid(&cb8
));
447 BOOST_TEST(!it3
.is_valid(&cb8
));
451 it3
= cb8
.begin() + 6;
452 it4
= cb8
.begin() + 12;
454 BOOST_TEST(it1
.is_valid(&cb8
));
455 BOOST_TEST(!it2
.is_valid(&cb8
));
456 BOOST_TEST(!it3
.is_valid(&cb8
));
457 BOOST_TEST(it4
.is_valid(&cb8
));
459 circular_buffer
<MyInteger
> cb9(15, 1);
462 it3
= cb9
.begin() + 6;
463 it4
= cb9
.begin() + 12;
465 BOOST_TEST(it1
.is_valid(&cb9
));
466 BOOST_TEST(!it2
.is_valid(&cb9
));
467 BOOST_TEST(!it3
.is_valid(&cb9
));
468 BOOST_TEST(!it4
.is_valid(&cb9
));
470 circular_buffer
<MyInteger
> cb10(10, 1);
473 it3
= cb10
.begin() + 3;
474 it4
= cb10
.begin() + 7;
476 BOOST_TEST(it1
.is_valid(&cb10
));
477 BOOST_TEST(!it2
.is_valid(&cb10
));
478 BOOST_TEST(!it3
.is_valid(&cb10
));
479 BOOST_TEST(!it4
.is_valid(&cb10
));
481 circular_buffer
<MyInteger
> cb11(10, 1);
484 it3
= cb11
.begin() + 3;
485 it4
= cb11
.begin() + 7;
486 cb11
.assign(15, 5, 2);
487 BOOST_TEST(it1
.is_valid(&cb11
));
488 BOOST_TEST(!it2
.is_valid(&cb11
));
489 BOOST_TEST(!it3
.is_valid(&cb11
));
490 BOOST_TEST(!it4
.is_valid(&cb11
));
492 circular_buffer
<MyInteger
> cb12(10, 1);
495 it3
= cb12
.begin() + 3;
496 it4
= cb12
.begin() + 7;
497 cb12
.assign(cb11
.begin(), cb11
.end());
498 BOOST_TEST(it1
.is_valid(&cb12
));
499 BOOST_TEST(!it2
.is_valid(&cb12
));
500 BOOST_TEST(!it3
.is_valid(&cb12
));
501 BOOST_TEST(!it4
.is_valid(&cb12
));
503 circular_buffer
<MyInteger
> cb13(10, 1);
506 it3
= cb13
.begin() + 3;
507 it4
= cb13
.begin() + 7;
508 cb13
.assign(15, cb11
.begin(), cb11
.end());
509 BOOST_TEST(it1
.is_valid(&cb13
));
510 BOOST_TEST(!it2
.is_valid(&cb13
));
511 BOOST_TEST(!it3
.is_valid(&cb13
));
512 BOOST_TEST(!it4
.is_valid(&cb13
));
514 circular_buffer
<MyInteger
> cb14(10);
523 it2
= cb14
.begin() + 2;
524 it3
= cb14
.begin() + 1;
525 it4
= cb14
.begin() + 5;
527 BOOST_TEST(it1
.is_valid(&cb14
));
528 BOOST_TEST(it2
.is_valid(&cb14
));
529 BOOST_TEST(!it3
.is_valid(&cb14
));
530 BOOST_TEST(it4
.is_valid(&cb14
));
532 circular_buffer
<MyInteger
> cb15(7);
543 it2
= cb15
.begin() + 2;
544 it3
= cb15
.begin() + 1;
545 it4
= cb15
.begin() + 5;
547 BOOST_TEST(it1
.is_valid(&cb15
));
548 BOOST_TEST(it2
.is_valid(&cb15
));
549 BOOST_TEST(it3
.is_valid(&cb15
));
550 BOOST_TEST(it4
.is_valid(&cb15
));
552 circular_buffer
<MyInteger
> cb16(10);
561 it2
= cb16
.begin() + 6;
563 it4
= cb16
.begin() + 5;
565 BOOST_TEST(it1
.is_valid(&cb16
));
566 BOOST_TEST(!it2
.is_valid(&cb16
));
567 BOOST_TEST(it3
.is_valid(&cb16
));
568 BOOST_TEST(!it4
.is_valid(&cb16
));
570 #endif // #if BOOST_CB_ENABLE_DEBUG
573 // basic exception safety test (it is useful to use any memory-leak detection tool)
574 void exception_safety_test() {
576 #if !defined(BOOST_NO_EXCEPTIONS)
578 circular_buffer
<MyInteger
> cb1(3, 5);
579 MyInteger::set_exception_trigger(3);
580 BOOST_TEST_THROWS(cb1
.set_capacity(5), std::exception
);
581 BOOST_TEST(cb1
.capacity() == 3);
582 MyInteger::set_exception_trigger(3);
583 BOOST_TEST_THROWS(cb1
.rset_capacity(5), std::exception
);
584 BOOST_TEST(cb1
.capacity() == 3);
587 MyInteger::set_exception_trigger(3);
588 BOOST_TEST_THROWS(circular_buffer
<MyInteger
> cb2(5, 10), std::exception
);
590 circular_buffer
<MyInteger
> cb3(5, 10);
591 MyInteger::set_exception_trigger(3);
592 BOOST_TEST_THROWS(circular_buffer
<MyInteger
> cb4(cb3
), std::exception
);
594 vector
<MyInteger
> v(5, MyInteger(10));
595 MyInteger::set_exception_trigger(3);
596 BOOST_TEST_THROWS(circular_buffer
<MyInteger
> cb5(8, v
.begin(), v
.end()), std::exception
);
598 circular_buffer
<MyInteger
> cb6(5, 10);
599 circular_buffer
<MyInteger
> cb7(8, 3);
600 MyInteger::set_exception_trigger(3);
601 BOOST_TEST_THROWS(cb7
= cb6
, std::exception
);
602 BOOST_TEST(cb7
.size() == 8);
603 BOOST_TEST(cb7
.capacity() == 8);
604 BOOST_TEST(cb7
[0] == 3);
605 BOOST_TEST(cb7
[7] == 3);
608 circular_buffer
<MyInteger
> cb8(5, 10);
609 MyInteger::set_exception_trigger(2);
610 BOOST_TEST_THROWS(cb8
.push_front(1), std::exception
);
612 circular_buffer
<MyInteger
> cb9(5);
616 MyInteger::set_exception_trigger(3);
617 BOOST_TEST_THROWS(cb9
.insert(cb9
.begin() + 1, 4), std::exception
);
619 circular_buffer
<MyInteger
> cb10(5);
623 MyInteger::set_exception_trigger(3);
624 BOOST_TEST_THROWS(cb10
.rinsert(cb10
.begin() + 1, 4), std::exception
);
626 circular_buffer
<MyInteger
> cb11(5);
629 MyInteger::set_exception_trigger(2);
630 BOOST_TEST_THROWS(cb11
.rinsert(cb11
.begin(), 1), std::exception
);
632 circular_buffer
<MyInteger
> cb12(5, 1);
633 MyInteger::set_exception_trigger(3);
634 BOOST_TEST_THROWS(cb12
.assign(4, 2), std::exception
);
636 circular_buffer
<MyInteger
> cb13(5, 1);
637 MyInteger::set_exception_trigger(3);
638 BOOST_TEST_THROWS(cb13
.assign(6, 2), std::exception
);
640 circular_buffer
<MyInteger
> cb14(5);
643 MyInteger::set_exception_trigger(3);
644 BOOST_TEST_THROWS(cb14
.insert(cb14
.begin(), 10, 3), std::exception
);
646 circular_buffer
<MyInteger
> cb15(5);
649 MyInteger::set_exception_trigger(3);
650 BOOST_TEST_THROWS(cb15
.insert(cb15
.end(), 10, 3), std::exception
);
652 circular_buffer
<MyInteger
> cb16(5);
655 MyInteger::set_exception_trigger(3);
656 BOOST_TEST_THROWS(cb16
.rinsert(cb16
.begin(), 10, 3), std::exception
);
658 circular_buffer
<MyInteger
> cb17(5);
661 MyInteger::set_exception_trigger(3);
662 BOOST_TEST_THROWS(cb17
.rinsert(cb17
.end(), 10, 3), std::exception
);
664 circular_buffer
<MyInteger
> cb18(5, 0);
668 MyInteger::set_exception_trigger(4);
669 BOOST_TEST_THROWS(cb18
.linearize(), std::exception
);
671 circular_buffer
<MyInteger
> cb19(5, 0);
674 MyInteger::set_exception_trigger(5);
675 BOOST_TEST_THROWS(cb19
.linearize(), std::exception
);
677 circular_buffer
<MyInteger
> cb20(5, 0);
680 MyInteger::set_exception_trigger(6);
681 BOOST_TEST_THROWS(cb20
.linearize(), std::exception
);
683 circular_buffer
<MyInteger
> cb21(5);
687 MyInteger::set_exception_trigger(2);
688 BOOST_TEST_THROWS(cb21
.insert(cb21
.begin() + 1, 4), std::exception
);
690 circular_buffer
<MyInteger
> cb22(5);
694 MyInteger::set_exception_trigger(2);
695 BOOST_TEST_THROWS(cb22
.insert(cb22
.end(), 4), std::exception
);
697 circular_buffer
<MyInteger
> cb23(5, 0);
698 MyInteger::set_exception_trigger(2);
699 BOOST_TEST_THROWS(cb23
.insert(cb23
.begin() + 1, 4), std::exception
);
701 circular_buffer
<MyInteger
> cb24(5);
705 MyInteger::set_exception_trigger(2);
706 BOOST_TEST_THROWS(cb24
.rinsert(cb24
.begin() + 1, 4), std::exception
);
708 circular_buffer
<MyInteger
> cb25(5, 0);
709 MyInteger::set_exception_trigger(2);
710 BOOST_TEST_THROWS(cb25
.rinsert(cb25
.begin() + 3, 4), std::exception
);
712 circular_buffer
<MyInteger
> cb26(5);
715 MyInteger::set_exception_trigger(5);
716 BOOST_TEST_THROWS(cb26
.insert(cb26
.begin(), 10, 3), std::exception
);
718 circular_buffer
<MyInteger
> cb27(5);
721 MyInteger::set_exception_trigger(5);
722 BOOST_TEST_THROWS(cb27
.insert(cb27
.end(), 10, 3), std::exception
);
724 circular_buffer
<MyInteger
> cb28(5);
727 MyInteger::set_exception_trigger(5);
728 BOOST_TEST_THROWS(cb28
.rinsert(cb28
.begin(), 10, 3), std::exception
);
730 circular_buffer
<MyInteger
> cb29(5);
733 MyInteger::set_exception_trigger(5);
734 BOOST_TEST_THROWS(cb29
.rinsert(cb29
.end(), 10, 3), std::exception
);
736 circular_buffer
<MyInteger
> cb30(10);
740 MyInteger::set_exception_trigger(2);
741 BOOST_TEST_THROWS(cb30
.rinsert(cb30
.begin(), 10, 3), std::exception
);
743 #endif // #if !defined(BOOST_NO_EXCEPTIONS)
747 void move_container_values_except() {
748 move_container_values_impl
<noncopyable_movable_except_t
>();
752 void move_container_values_resetting_impl() {
753 typedef T noncopyable_movable_test_t
;
754 CB_CONTAINER
<noncopyable_movable_test_t
> cb1(1);
755 noncopyable_movable_test_t var
;
758 cb1
.push_back(boost::move(var
));
759 BOOST_TEST(!cb1
.back().is_moved());
760 BOOST_TEST(var
.is_moved());
761 BOOST_TEST(cb1
.size() == 1);
762 var
= boost::move(cb1
.back());
763 BOOST_TEST(cb1
.back().is_moved());
765 cb1
.push_front(boost::move(var
));
766 BOOST_TEST(!cb1
.front().is_moved());
767 BOOST_TEST(var
.is_moved());
768 BOOST_TEST(cb1
.size() == 1);
769 var
= boost::move(cb1
.back());
770 BOOST_TEST(cb1
.back().is_moved());
773 BOOST_TEST(!cb1
.back().is_moved());
774 BOOST_TEST(cb1
.size() == 1);
775 var
= boost::move(cb1
.back());
776 BOOST_TEST(cb1
.back().is_moved());
779 BOOST_TEST(!cb1
.front().is_moved());
780 BOOST_TEST(cb1
.size() == 1);
781 var
= boost::move(cb1
.back());
782 BOOST_TEST(cb1
.back().is_moved());
785 cb1
.insert(cb1
.begin());
786 // If the circular_buffer is full and the pos points to begin(),
787 // then the item will not be inserted.
788 BOOST_TEST(cb1
.front().is_moved());
789 BOOST_TEST(cb1
.size() == 1);
790 var
= boost::move(cb1
.back());
791 BOOST_TEST(cb1
.back().is_moved());
793 cb1
.insert(cb1
.begin(), boost::move(var
));
794 // If the circular_buffer is full and the pos points to begin(),
795 // then the item will not be inserted.
796 BOOST_TEST(cb1
.front().is_moved());
797 BOOST_TEST(cb1
.size() == 1);
798 var
= boost::move(cb1
.back());
799 BOOST_TEST(cb1
.back().is_moved());
801 cb1
.rinsert(cb1
.begin());
802 BOOST_TEST(!cb1
.back().is_moved());
803 BOOST_TEST(cb1
.size() == 1);
804 var
= boost::move(cb1
.back());
805 BOOST_TEST(cb1
.back().is_moved());
808 cb1
.rinsert(cb1
.begin(), boost::move(var
));
809 BOOST_TEST(!cb1
.back().is_moved());
810 BOOST_TEST(cb1
.size() == 1);
811 var
= boost::move(cb1
.back());
812 BOOST_TEST(cb1
.back().is_moved());
814 cb1
.rinsert(cb1
.end());
815 BOOST_TEST(cb1
.back().is_moved());
816 BOOST_TEST(cb1
.size() == 1);
817 var
= boost::move(cb1
.back());
818 BOOST_TEST(cb1
.back().is_moved());
821 cb1
.rinsert(cb1
.end(), boost::move(var
));
822 BOOST_TEST(cb1
.back().is_moved());
823 BOOST_TEST(cb1
.size() == 1);
824 var
= boost::move(cb1
.back());
825 BOOST_TEST(cb1
.back().is_moved());
827 BOOST_TEST(!cb1
[0].is_moved());
829 const int val
= cb1
[0].value();
831 BOOST_TEST(!cb1
[0].is_moved());
832 BOOST_TEST(cb1
[0].value() == val
);
834 cb1
.rotate(cb1
.begin());
835 BOOST_TEST(!cb1
[0].is_moved());
836 BOOST_TEST(cb1
[0].value() == val
);
839 void move_container_values_resetting_except() {
840 move_container_values_resetting_impl
<noncopyable_movable_except_t
>();
843 void move_container_values_resetting_noexcept() {
844 move_container_values_resetting_impl
<noncopyable_movable_noexcept_t
>();
851 iterator_constructor_and_assign_test();
852 iterator_reference_test();
853 iterator_difference_test();
854 iterator_increment_test();
855 iterator_decrement_test();
856 iterator_addition_test();
857 iterator_subtraction_test();
858 iterator_element_access_test();
859 iterator_comparison_test();
860 iterator_invalidation_test();
861 exception_safety_test();
862 move_container_values_except();
863 move_container_values_resetting_except();
864 move_container_values_resetting_noexcept();
865 return boost::report_errors();