60 exp_memmove, exp_memcpy, exp_secmem,
70 ringbuffer_t createFull(
const std::vector<Value_type> & source) {
72 REQUIRE_MSG(
"full "+rb.toString(), rb.isFull());
77 std::vector<Value_type> array(capacity);
86 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
87 REQUIRE_MSG(
"capacity at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), capacity >= dest_len);
88 REQUIRE_MSG(
"size at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), preSize >= dest_len);
89 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
93 REQUIRE_MSG(
"not empty at read #"+std::to_string(i)+
": "+rb.toString(), rb.get(svI));
97 REQUIRE_MSG(
"size "+rb.toString(), preSize-dest_len == rb.size());
98 REQUIRE_MSG(
"free slots after reading "+std::to_string(dest_len)+
": "+rb.toString(), rb.freeSlots()>= dest_len);
99 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
103 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
104 REQUIRE_MSG(
"capacity at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), capacity >= dest_len);
108 REQUIRE_MSG(
"not empty at read #"+std::to_string(i)+
" / "+std::to_string(dest_len), rb.getBlocking(svI, 0_s));
111 REQUIRE_MSG(
"free slots after reading "+std::to_string(dest_len)+
": "+rb.toString(), rb.freeSlots()>= dest_len);
112 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
117 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
118 REQUIRE_MSG(
"capacity at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), capacity >= dest_len);
119 REQUIRE_MSG(
"size at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), preSize >= dest_len);
120 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
122 std::vector<Value_type> array(dest_len);
123 REQUIRE_MSG(
"get-range of "+std::to_string(array.size())+
" elem in "+rb.toString(), dest_len==rb.get( &(*array.begin()), dest_len, dest_len) );
125 REQUIRE_MSG(
"size "+rb.toString(), preSize-dest_len == rb.size());
126 REQUIRE_MSG(
"free slots after reading "+std::to_string(dest_len)+
": "+rb.toString(), rb.freeSlots()>= dest_len);
127 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
137 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
138 REQUIRE_MSG(
"capacity at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), capacity >= dest_len);
139 REQUIRE_MSG(
"size at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), preSize >= dest_len);
140 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
142 std::vector<Value_type> array(dest_len);
143 REQUIRE_MSG(
"get-range of "+std::to_string(array.size())+
" elem in "+rb.toString(), dest_len==rb.get( &(*array.begin()), dest_len, min_count) );
145 REQUIRE_MSG(
"size "+rb.toString(), preSize-dest_len == rb.size());
146 REQUIRE_MSG(
"free slots after reading "+std::to_string(dest_len)+
": "+rb.toString(), rb.freeSlots()>= dest_len);
147 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
156 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
157 REQUIRE_MSG(
"capacity at read "+std::to_string(dest_len)+
" elems: "+rb.toString(), capacity >= dest_len);
159 std::vector<Value_type> array(dest_len);
160 const jau::nsize_t count = rb.getBlocking( &(*array.begin()), dest_len, min_count, 0_s);
161 REQUIRE_MSG(
"get-range >= min_count / "+std::to_string(array.size())+
" of "+rb.toString(), min_count <= count);
173 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
174 REQUIRE_MSG(
"capacity at write "+std::to_string(len)+
" elems: "+rb.toString(), capacity >= len);
175 REQUIRE_MSG(
"size at write "+std::to_string(len)+
" elems: "+rb.toString(), preSize+len <= capacity);
176 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
179 std::string m =
"buffer put #"+std::to_string(i)+
": "+rb.toString();
183 REQUIRE_MSG(
"size "+rb.toString(), preSize+len == rb.size());
184 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
188 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
189 REQUIRE_MSG(
"capacity at write "+std::to_string(len)+
" elems: "+rb.toString(), capacity >= len);
190 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
193 std::string m =
"buffer put #"+std::to_string(i)+
": "+rb.toString();
195 std::this_thread::sleep_for(std::chrono::milliseconds(period));
203 REQUIRE_MSG(
"capacity "+rb.toString(), capacity == rb.capacity());
204 REQUIRE_MSG(
"capacity at write "+std::to_string(data.size())+
" elems: "+rb.toString(), capacity >= data.size());
205 REQUIRE_MSG(
"size at write "+std::to_string(data.size())+
" elems: "+rb.toString(), postSize<= capacity);
206 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
207 REQUIRE_MSG(
"data fits in RB capacity "+rb.toString(), rb.capacity() >= data.size());
208 REQUIRE_MSG(
"data fits in RB free-slots "+rb.toString(), rb.freeSlots() >= data.size());
210 REQUIRE_MSG(
"put-range of "+std::to_string(data.size())+
" elem in "+rb.toString(), rb.put( &(*data.begin()), &(*data.end()) ) );
212 REQUIRE_MSG(
"size "+rb.toString(), postSize == rb.size());
213 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
217 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
220 REQUIRE_MSG(
"moveFull.get "+rb.toString(), rb.get(svI));
227 REQUIRE_MSG(
"RB is full "+rb.toString(), !rb.isFull());
231 REQUIRE_MSG(
"moveEmpty.get "+rb.toString(), rb.get(svI));
242 ", trivially_copyable "+std::to_string(std::is_trivially_copyable<typename ringbuffer_t::value_type>::value)+
243 ", size "+std::to_string(
sizeof(rb))+
" bytes");
244 fprintf(stderr,
"%s\n", msg.c_str());
245 fprintf(stderr,
"%s\n", rb.
get_info().c_str());
253 std::vector<Value_type> source = createIntArray(capacity, 0);
255 INFO_STR(
"testS01_FullRead: Created / "+ rb.
toString());
256 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
259 readTestImpl(rb, capacity, capacity, 0);
260 INFO_STR(
"testS01_FullRead: PostRead / " + rb.
toString());
267 INFO( std::string(
"testS02_SingleRW01: Created / ") + rb.
toString().c_str());
268 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
271 writeTestImpl(rb, capacity, capacity, 0);
272 INFO( std::string(
"testS02_SingleRW01: PostWrite / ") + rb.
toString().c_str());
273 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
276 readTestImpl(rb, capacity, capacity, 0);
277 INFO( std::string(
"testS02_SingleRW01: PostRead / ") + rb.
toString().c_str());
291 INFO( std::string(
"testM02_SingleRW01: Created / ") + rb.
toString().c_str());
292 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
299 std::thread producer01(&test_ringbuffer_t::mtWriteTestImpl,
this, std::ref(rb), capacity, element_count, 0 , sleep_period);
301 mtReadTestImpl(rb, capacity, element_count, 0);
302 if( producer01.joinable() ) {
305 INFO( std::string(
"testM02_SingleRW01: PostRead / ") + rb.
toString().c_str());
318 INFO( std::string(
"testM03a_RangeRW01: Created.1 / ") + rb1.
toString().c_str());
319 REQUIRE_MSG(
"zero size.1 "+rb1.
toString(), 0 == rb1.
size());
323 INFO( std::string(
"testM03a_RangeRW01: Created.2 / ") + rb2.
toString().c_str());
324 REQUIRE_MSG(
"zero size.2 "+rb2.
toString(), 0 == rb2.
size());
331 std::thread producer01(&test_ringbuffer_t::mtWriteTestImpl,
this, std::ref(rb1), capacity, element_count, 0 , sleep_period);
332 std::thread producer02(&test_ringbuffer_t::mtWriteTestImpl,
this, std::ref(rb2), capacity, element_count, 0 , sleep_period);
338 while(count1 < element_count || count2 < element_count) {
340 if( count1 < element_count ) {
341 REQUIRE_MSG(
"not empty at read.1 #"+std::to_string(count1)+
" / "+std::to_string(element_count), rb1.
getBlocking(svI, 0_s));
345 if( count2 < element_count ) {
346 REQUIRE_MSG(
"not empty at read.2 #"+std::to_string(count2)+
" / "+std::to_string(element_count), rb2.
getBlocking(svI, 0_s));
350 if( 0 == ( ++loop % 4 ) ) {
351 std::this_thread::sleep_for(std::chrono::milliseconds(5*sleep_period));
354 if( producer01.joinable() ) {
357 if( producer02.joinable() ) {
360 INFO( std::string(
"testM03a_RangeRW01: PostRead.1 / ") + rb1.
toString().c_str());
361 INFO( std::string(
"testM03a_RangeRW01: PostRead.2 / ") + rb2.
toString().c_str());
362 REQUIRE_MSG(
"got all elements count.1 == element_count "+rb1.
toString(), count1 == element_count);
363 REQUIRE_MSG(
"got all elements count.2 == element_count "+rb1.
toString(), count2 == element_count);
373 INFO( std::string(
"testS03a_RangeRW01: Created / ") + rb.
toString().c_str());
374 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
383 writeTestImpl(rb, capacity, capacity, 0);
385 INFO( std::string(
"testS03a_RangeRW01: PostWrite / ") + rb.
toString().c_str());
386 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
389 readRangeTestImpl(rb, capacity, capacity/2, 0);
390 INFO( std::string(
"testS03a_RangeRW01: PostRead-1 / ") + rb.
toString().c_str());
393 readRangeTestImpl(rb, capacity, capacity/2, capacity/2);
394 INFO( std::string(
"testS03a_RangeRW01: PostRead-2 / ") + rb.
toString().c_str());
400 INFO( std::string(
"testS03a_RangeRW01: Created / ") + rb.
toString().c_str());
401 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
410 writeTestImpl(rb, capacity, capacity, 0);
412 INFO( std::string(
"testS03a_RangeRW01: PostWrite / ") + rb.
toString().c_str());
413 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
416 readRangeTestImpl2(rb, capacity, capacity/2, 1, 0);
417 INFO( std::string(
"testS03a_RangeRW01: PostRead-1 / ") + rb.
toString().c_str());
420 readRangeTestImpl2(rb, capacity, capacity/2, 1, capacity/2);
421 INFO( std::string(
"testS03a_RangeRW01: PostRead-2 / ") + rb.
toString().c_str());
436 INFO( std::string(
"testM03a_RangeRW01: Created / ") + rb.
toString().c_str());
437 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
444 std::thread producer01(&test_ringbuffer_t::mtWriteTestImpl,
this, std::ref(rb), capacity, element_count, 0 , sleep_period);
449 while(count < element_count) {
451 REQUIRE_MSG(
"got elements >= min_count "+rb.
toString(), c >= min_count);
454 if( producer01.joinable() ) {
457 INFO( std::string(
"testM03a_RangeRW01: PostRead / ") + rb.
toString().c_str());
458 REQUIRE_MSG(
"got all elements count == element_count "+rb.
toString(), count == element_count);
471 INFO( std::string(
"testM03a_RangeRW01: Created.1 / ") + rb1.
toString().c_str());
472 REQUIRE_MSG(
"zero size.1 "+rb1.
toString(), 0 == rb1.
size());
476 INFO( std::string(
"testM03a_RangeRW01: Created.2 / ") + rb2.
toString().c_str());
477 REQUIRE_MSG(
"zero size.2 "+rb2.
toString(), 0 == rb2.
size());
484 std::thread producer01(&test_ringbuffer_t::mtWriteTestImpl,
this, std::ref(rb1), capacity, element_count, 0 , sleep_period);
485 std::thread producer02(&test_ringbuffer_t::mtWriteTestImpl,
this, std::ref(rb2), capacity, element_count, 0 , sleep_period);
491 while(count1 < element_count || count2 < element_count) {
492 if( count1 < element_count ) {
494 REQUIRE_MSG(
"got elements.1 >= min_count "+rb1.
toString(), c >= min_count);
497 if( count2 < element_count ) {
499 REQUIRE_MSG(
"got elements.2 >= min_count "+rb2.
toString(), c >= min_count);
502 std::this_thread::sleep_for(std::chrono::milliseconds(5*sleep_period));
504 if( producer01.joinable() ) {
507 if( producer02.joinable() ) {
510 INFO( std::string(
"testM03a_RangeRW01: PostRead.1 / ") + rb1.
toString().c_str());
511 INFO( std::string(
"testM03a_RangeRW01: PostRead.2 / ") + rb2.
toString().c_str());
512 REQUIRE_MSG(
"got all elements count.1 == element_count "+rb1.
toString(), count1 == element_count);
513 REQUIRE_MSG(
"got all elements count.2 == element_count "+rb1.
toString(), count2 == element_count);
523 INFO( std::string(
"testS03b_RangeRW02: Created / ") + rb.
toString().c_str());
524 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
531 std::vector<Value_type> new_data = createIntArray(capacity, 0);
532 writeRangeTestImpl(rb, capacity, new_data);
534 INFO( std::string(
"testS03b_RangeRW02: PostWrite / ") + rb.
toString().c_str());
535 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
538 readRangeTestImpl(rb, capacity, capacity/2, 0);
539 INFO( std::string(
"testS03b_RangeRW02: PostRead-1 / ") + rb.
toString().c_str());
542 readRangeTestImpl(rb, capacity, capacity/2, capacity/2);
543 INFO( std::string(
"testS03b_RangeRW02: PostRead-2 / ") + rb.
toString().c_str());
550 INFO( std::string(
"testS03b_RangeRW02: Created / ") + rb.
toString().c_str());
551 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
560 REQUIRE(
true == rb.
put(dummy) );
561 REQUIRE(
true == rb.
put(dummy) );
562 REQUIRE(
true == rb.
put(dummy) );
563 REQUIRE( 3 == rb.
drop(3) );
565 std::vector<Value_type> new_data = createIntArray(capacity, 0);
566 writeRangeTestImpl(rb, capacity, new_data);
569 INFO( std::string(
"testS03b_RangeRW02: PostWrite / ") + rb.
toString().c_str());
570 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
573 readRangeTestImpl(rb, capacity, capacity/2, 0);
574 INFO( std::string(
"testS03b_RangeRW02: PostRead-1 / ") + rb.
toString().c_str());
577 readRangeTestImpl(rb, capacity, capacity/2, capacity/2);
578 INFO( std::string(
"testS03b_RangeRW02: PostRead-2 / ") + rb.
toString().c_str());
585 INFO( std::string(
"testS03b_RangeRW02: Created / ") + rb.
toString().c_str());
586 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
595 REQUIRE(
true == rb.
put(dummy) );
596 REQUIRE(
true == rb.
put(dummy) );
597 REQUIRE(
true == rb.
put(dummy) );
598 REQUIRE(
true == rb.
put(dummy) );
599 REQUIRE( 2 == rb.
drop(2) );
605 std::vector<Value_type> new_data = createIntArray(capacity-2, 0);
606 writeRangeTestImpl(rb, capacity, new_data);
609 INFO( std::string(
"testS03b_RangeRW02: PostWrite / ") + rb.
toString().c_str());
610 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
614 REQUIRE( 2 == rb.
drop(2) );
615 REQUIRE_MSG(
"size capacity-2 "+rb.
toString(), capacity-2 == rb.
size());
617 readRangeTestImpl(rb, capacity, capacity/2-2, 0);
618 INFO( std::string(
"testS03b_RangeRW02: PostRead-1 / ") + rb.
toString().c_str());
621 readRangeTestImpl(rb, capacity, capacity/2, capacity/2-2);
622 INFO( std::string(
"testS03b_RangeRW02: PostRead-2 / ") + rb.
toString().c_str());
629 INFO( std::string(
"testS03b_RangeRW02: Created / ") + rb.
toString().c_str());
630 REQUIRE_MSG(
"zero size "+rb.
toString(), 0 == rb.
size());
639 for(
jau::nsize_t i=0; i<capacity; i++) { REQUIRE(
true == rb.
put(dummy) ); }
643 REQUIRE( capacity-1 == rb.
drop(capacity-1) );
646 for(
int i=0; i<2; i++) { REQUIRE(
true == rb.
put(dummy) ); }
652 std::vector<Value_type> new_data = createIntArray(capacity-3, 0);
653 writeRangeTestImpl(rb, capacity, new_data);
656 INFO( std::string(
"testS03b_RangeRW02: PostWrite / ") + rb.
toString().c_str());
657 REQUIRE_MSG(
"full size "+rb.
toString(), capacity == rb.
size());
661 REQUIRE( 3 == rb.
drop(3) );
663 REQUIRE_MSG(
"size capacity-3 "+rb.
toString(), capacity-3 == rb.
size());
665 readRangeTestImpl(rb, capacity, capacity/2-3, 0);
666 INFO( std::string(
"testS03b_RangeRW02: PostRead-1 / ") + rb.
toString().c_str());
669 readRangeTestImpl(rb, capacity, capacity/2, capacity/2-3);
670 INFO( std::string(
"testS03b_RangeRW02: PostRead-2 / ") + rb.
toString().c_str());
678 std::vector<Value_type> source = createIntArray(capacity, 0);
680 INFO_STR(
"testS04_FullReadReset: Created / " + rb.
toString());
684 INFO_STR(
"testS04_FullReadReset: Post Reset w/ source / " + rb.
toString());
687 readTestImpl(rb, capacity, capacity, 0);
688 INFO_STR(
"testS04_FullReadReset: Post Read / " + rb.
toString());
692 INFO_STR(
"testS04_FullReadReset: Post Reset w/ source / " + rb.
toString());
695 readTestImpl(rb, capacity, capacity, 0);
696 INFO_STR(
"testS04_FullReadReset: Post Read / " + rb.
toString());
708 writeTestImpl(rb, capacity, capacity, 0);
711 readTestImpl(rb, capacity, capacity, 0);
717 writeTestImpl(rb, capacity, capacity, 0);
720 readTestImpl(rb, capacity, capacity, 0);
726 std::vector<Value_type> source = createIntArray(capacity, 0);
733 readTestImpl(rb, capacity, 5, 0);
740 readTestImpl(rb, capacity, capacity, 0);
746 std::vector<Value_type> source = createIntArray(capacity, 0);
753 moveGetPutImpl(rb, 5);
754 readTestImpl(rb, capacity, 5, 5);
761 readTestImpl(rb, capacity, capacity, 0);
769 jau::nsize_t grownCapacity = initialCapacity+growAmount;
770 std::vector<Value_type> source = createIntArray(initialCapacity, 0);
775 REQUIRE_MSG(
"not empty at read #"+std::to_string(i)+
": "+rb.toString(), rb.get(svI));
778 REQUIRE_MSG(
"zero size "+rb.toString(), 0 == rb.size());
781 REQUIRE_MSG(
"orig size "+rb.toString(), initialCapacity == rb.size());
783 moveGetPutImpl(rb, pos);
787 rb.recapacity(grownCapacity);
788 REQUIRE_MSG(
"capacity "+rb.toString(), grownCapacity == rb.capacity());
789 REQUIRE_MSG(
"orig size "+rb.toString(), initialCapacity == rb.size());
790 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
791 REQUIRE_MSG(
"not empty "+rb.toString(), !rb.isEmpty());
798 REQUIRE_MSG(
"new size "+rb.toString(), grownCapacity == rb.size());
799 REQUIRE_MSG(
"full "+rb.toString(), rb.isFull());
803 REQUIRE_MSG(
"not empty at read #"+std::to_string(i)+
": "+rb.toString(), rb.get(svI));
809 REQUIRE_MSG(
"not empty at read #"+std::to_string(i)+
": "+rb.toString(), rb.get(svI));
813 REQUIRE_MSG(
"zero size "+rb.toString(), 0 == rb.size());
814 REQUIRE_MSG(
"empty "+rb.toString(), rb.isEmpty());
816 REQUIRE_MSG(
"not full "+rb.toString(), !rb.isFull());
822 test_GrowFullImpl(11, 0);
825 test_GrowFullImpl(11, 0+1);
828 test_GrowFullImpl(11, 0+2);
831 test_GrowFullImpl(11, 0+3);
834 test_GrowFullImpl(11, 11-1);
837 test_GrowFullImpl(11, 11-1-1);
840 test_GrowFullImpl(11, 11-1-2);
843 test_GrowFullImpl(11, 11-1-3);
856 exp_memmove, exp_memcpy, exp_secmem,
857 use_memmove, use_memcpy, use_secmem> TestRingbuffer;
861 SECTION(
"testS00_PrintInfo",
"[ringbuffer]") {
862 trb.testS00_PrintInfo();
864 SECTION(
"testS01_FullRead",
"[ringbuffer]") {
865 trb.testS01_FullRead();
867 SECTION(
"testS02",
"[ringbuffer]") {
868 trb.testS02_SingleRW01();
870 SECTION(
"testM02",
"[ringbuffer]") {
871 if( catch_auto_run ) {
872 trb.testM02_SingleRW01(100 , 1 );
874 trb.testM02_SingleRW01(100 , 5 );
877 SECTION(
"testS03a",
"[ringbuffer]") {
878 trb.testS03a_RangeRW01();
880 SECTION(
"testM03a",
"[ringbuffer]") {
881 if( catch_auto_run ) {
882 trb.testM03a_RangeRW01(100 , 1 );
884 trb.testM03a_RangeRW01(100 , 5 );
887 SECTION(
"testS03b",
"[ringbuffer]") {
888 trb.testS03b_RangeRW02();
890 SECTION(
"testS04",
"[ringbuffer]") {
891 trb.testS04_FullReadReset();
893 SECTION(
"testS05",
"[ringbuffer]") {
894 trb.testS05_EmptyWriteClear();
896 SECTION(
"testS06",
"[ringbuffer]") {
897 trb.testS06_ReadResetMid01();
899 SECTION(
"testS07",
"[ringbuffer]") {
900 trb.testS07_ReadResetMid02();
902 SECTION(
"testS20",
"[ringbuffer]") {
903 trb.testS20_GrowFull01_Begin();
905 SECTION(
"testS21",
"[ringbuffer]") {
906 trb.testS21_GrowFull02_Begin1();
908 SECTION(
"testS22",
"[ringbuffer]") {
909 trb.testS22_GrowFull03_Begin2();
911 SECTION(
"testS23",
"[ringbuffer]") {
912 trb.testS23_GrowFull04_Begin3();
914 SECTION(
"testS24",
"[ringbuffer]") {
915 trb.testS24_GrowFull05_End();
917 SECTION(
"testS25",
"[ringbuffer]") {
918 trb.testS25_GrowFull11_End1();
920 SECTION(
"testS26",
"[ringbuffer]") {
921 trb.testS26_GrowFull12_End2();
923 SECTION(
"testS27",
"[ringbuffer]") {
924 trb.testS27_GrowFull13_End3();