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();