48#define RUN_RESERVE_BENCHMARK 0
49#define RUN_INDEXED_BENCHMARK 0
58 printf(
"\nContainer Type %s (a darray, a cow %d):\n - Uses memmove %d (trivially_copyable %d); realloc %d; base_of jau::callocator %d; secmem %d; size %d bytes\n",
61 std::is_trivially_copyable<typename Cont::value_type>::value,
72 printf(
"\nContainer Type %s (!darray, a cow %d); size %d bytes\n",
79static uint8_t
start_addr_b[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
85template<
class T,
typename Size_type>
87 const Size_type size = data.size();
88 for (Size_type i = 0; i < size; ++i) {
97template<
class T,
typename Size_type>
100 const Size_type size = data.size();
101 for (Size_type i = 0; i < size; ++i) {
103 some_number += e.
nop();
105 REQUIRE(some_number > 0);
109template<
class T,
typename Size_type>
113 typename T::const_iterator first = data.cbegin();
114 for (; !first.is_end(); ++first) {
115 if (*first == elem) {
121template<
class T,
typename Size_type>
125 typename T::const_iterator first = data.cbegin();
126 typename T::const_iterator last = data.cend();
127 for (; first != last; ++first) {
128 if (*first == elem) {
140 typename T::const_iterator first = data.cbegin();
141 for (; !first.is_end(); ++first) {
142 some_number += (*first).nop();
144 REQUIRE(some_number > 0);
153 typename T::const_iterator first = data.cbegin();
154 typename T::const_iterator last = data.cend();
155 for (; first != last; ++first) {
156 some_number += (*first).nop();
158 REQUIRE(some_number > 0);
163template<
class T,
typename Size_type>
166 const Size_type size = data.size();
167 Size_type fi = 0, i=0;
169 for(; i<size && a0.
next(); ++i) {
171 const DataType01 *found = findDataSet01_idx<T, Size_type>(data, elem);
172 if(
nullptr != found ) {
180template<
class T,
typename Size_type>
183 const Size_type size = data.size();
184 Size_type fi = 0, i=0;
186 for(; i<size && a0.
next(); ++i) {
188 const DataType01 *found = findDataSet01_itr<T, Size_type>(data, elem);
189 if(
nullptr != found ) {
197template<
class T,
typename Size_type>
202 for(; i<size && a0.
next(); ++i) {
203 data.emplace_back( a0,
static_cast<uint8_t
>(1) );
205 REQUIRE(i == data.size());
208template<
class T,
typename Size_type>
213 for(; i<size && a0.
next(); ++i) {
215 const DataType01* exist = findDataSet01_idx<T, Size_type>(data, elem);
216 if(
nullptr == exist ) {
217 data.push_back( std::move( elem ) );
221 REQUIRE(i == data.size());
225template<
class value_type>
230template<
class T,
typename Size_type>
238 typename T::iterator first = data.begin();
240 for(; i<size && a0.
next(); ++i, first.to_begin()) {
242 for (; !first.is_end(); ++first) {
243 if (*first == elem) {
247 if( first.is_end() ) {
248 first.push_back( std::move( elem ) );
254 for(; i<size && a0.
next(); ++i) {
255 if( data.push_back_unique(
DataType01(a0,
static_cast<uint8_t
>(1)),
256 equal_comparator<typename T::value_type> ) ) {
261 REQUIRE(i == data.size());
265template<
class T,
typename Size_type>
272 for(; i<size && a0.
next(); ++i) {
274 typename T::const_iterator first = data.cbegin();
275 typename T::const_iterator last = data.cend();
276 for (; first != last; ++first) {
277 if (*first == elem) {
281 if( first == last ) {
282 data.push_back( std::move( elem ) );
286 REQUIRE(i == data.size());
291static void print_mem(
const std::string& pre,
const T& data) {
292 std::size_t bytes_element =
sizeof(
DataType01);
293 std::size_t elements = data.size();
294 std::size_t bytes_net = elements * bytes_element;
295 std::size_t bytes_total = data.get_allocator().memory_usage;
296 double overhead = 0 == bytes_total ? 0.0 : ( 0 == bytes_net ? 10.0 : (double)bytes_total / (
double)bytes_net );
297 printf(
"Mem: %s: Elements %s x %zu bytes; %s, %lf ratio\n",
299 bytes_element, data.get_allocator().toString(10, 5).c_str(), overhead);
308template<
class T,
typename Size_type>
312 REQUIRE(data.size() == 0);
315 data.reserve(reserve0);
316 REQUIRE(data.size() == 0);
317 REQUIRE(data.capacity() == reserve0);
320 test_00_seq_fill<T, Size_type>(data, size0);
321 REQUIRE(data.size() == size0);
322 REQUIRE(data.capacity() >= size0);
324 test_00_list_idx<T, Size_type>(data);
325 REQUIRE(data.size() == size0);
326 REQUIRE(data.capacity() >= size0);
329 REQUIRE(data.size() == 0);
330 return data.size() == 0;
333template<
class T,
typename Size_type>
336 REQUIRE(0 == data.get_allocator().memory_usage);
337 REQUIRE(data.size() == 0);
341 data.reserve(reserve0);
342 REQUIRE(data.size() == 0);
343 REQUIRE(0 != data.get_allocator().memory_usage);
344 REQUIRE(data.capacity() == reserve0);
347 test_00_seq_fill<T, Size_type>(data, size0);
348 REQUIRE(0 != data.get_allocator().memory_usage);
349 REQUIRE(data.size() == size0);
350 REQUIRE(data.capacity() >= size0);
352 test_00_list_itr<T>(data);
353 REQUIRE(0 != data.get_allocator().memory_usage);
354 REQUIRE(data.size() == size0);
355 REQUIRE(data.capacity() >= size0);
356 if( do_print_mem ) {
print_mem(type_id+
" 01 (full_)", data); }
359 REQUIRE(data.size() == 0);
362 return data.size() == 0;
365template<
class T,
typename Size_type>
369 REQUIRE(data.size() == 0);
372 data.reserve(reserve0);
373 REQUIRE(data.size() == 0);
374 REQUIRE(data.capacity() == reserve0);
377 test_00_seq_fill<T, Size_type>(data, size0);
378 REQUIRE(data.size() == size0);
379 REQUIRE(data.capacity() >= size0);
381 test_00_list_itr<T>(data);
382 REQUIRE(data.size() == size0);
383 REQUIRE(data.capacity() >= size0);
386 REQUIRE(data.size() == 0);
387 return data.size() == 0;
390template<
class T,
typename Size_type>
394 REQUIRE(data.size() == 0);
397 data.reserve(reserve0);
398 REQUIRE(data.size() == 0);
399 REQUIRE(data.capacity() == reserve0);
402 test_00_seq_fill_unique_idx<T, Size_type>(data, size0);
403 REQUIRE(data.size() == size0);
404 REQUIRE(data.capacity() >= size0);
406 test_00_seq_find_idx<T, Size_type>(data);
407 REQUIRE(data.size() == size0);
408 REQUIRE(data.capacity() >= size0);
411 REQUIRE(data.size() == 0);
412 return data.size() == 0;
414template<
class T,
typename Size_type>
418 REQUIRE(data.size() == 0);
421 data.reserve(reserve0);
422 REQUIRE(data.size() == 0);
423 REQUIRE(data.capacity() == reserve0);
426 test_00_seq_fill_unique_itr<T, Size_type>(data, size0);
427 REQUIRE(data.size() == size0);
428 REQUIRE(data.capacity() >= size0);
430 test_00_seq_find_itr<T, Size_type>(data);
431 REQUIRE(data.size() == size0);
432 REQUIRE(data.capacity() >= size0);
435 REQUIRE(data.size() == 0);
436 return data.size() == 0;
442template<
class T,
typename Size_type>
449 test_01_seq_fill_list_footprint<T, Size_type>(type_id, 50, do_rserv? 50 : 0,
true);
451 test_01_seq_fill_list_footprint<T, Size_type>(type_id, 100, do_rserv? 100 : 0,
true);
452 test_01_seq_fill_list_footprint<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0,
true);
457template<
class T,
typename Size_type>
459 const bool do_rserv) {
460#if RUN_INDEXED_BENCHMARK
466 BENCHMARK(title_pre+
" FillSeq_List 1000") {
467 return test_01_seq_fill_list_idx<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
472 test_01_seq_fill_list_idx<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
478 BENCHMARK(title_pre+
" FillSeq_List 50") {
479 return test_01_seq_fill_list_idx<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
481 BENCHMARK(title_pre+
" FillSeq_List 100") {
482 return test_01_seq_fill_list_idx<T, Size_type>(type_id, 100, do_rserv? 100 : 0);
484 BENCHMARK(title_pre+
" FillSeq_List 1000") {
485 return test_01_seq_fill_list_idx<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
494template<
class T,
typename Size_type>
496 const bool do_rserv) {
502 BENCHMARK(title_pre+
" FillSeq_List 1000") {
503 return test_01_seq_fill_list_itr<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
509 test_01_seq_fill_list_itr<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
515 BENCHMARK(title_pre+
" FillSeq_List 50") {
516 return test_01_seq_fill_list_itr<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
518 BENCHMARK(title_pre+
" FillSeq_List 100") {
519 return test_01_seq_fill_list_itr<T, Size_type>(type_id, 100, do_rserv? 100 : 0);
521 BENCHMARK(title_pre+
" FillSeq_List 1000") {
522 return test_01_seq_fill_list_itr<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
527template<
class T,
typename Size_type>
529 const bool do_rserv) {
530#if RUN_INDEXED_BENCHMARK
536 BENCHMARK(title_pre+
" FillUni_List 1000") {
537 return test_02_seq_fillunique_find_idx<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
542 test_02_seq_fillunique_find_idx<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
548 BENCHMARK(title_pre+
" FillUni_List 50") {
549 return test_02_seq_fillunique_find_idx<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
551 BENCHMARK(title_pre+
" FillUni_List 100") {
552 return test_02_seq_fillunique_find_idx<T, Size_type>(type_id, 100, do_rserv? 100 : 0);
554 BENCHMARK(title_pre+
" FillUni_List 1000") {
555 return test_02_seq_fillunique_find_idx<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
564template<
class T,
typename Size_type>
566 const bool do_rserv) {
572 BENCHMARK(title_pre+
" FillUni_List 1000") {
573 return test_02_seq_fillunique_find_itr<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
579 test_02_seq_fillunique_find_itr<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
585 BENCHMARK(title_pre+
" FillUni_List 50") {
586 return test_02_seq_fillunique_find_itr<T, Size_type>(type_id, 50, do_rserv? 50 : 0);
588 BENCHMARK(title_pre+
" FillUni_List 100") {
589 return test_02_seq_fillunique_find_itr<T, Size_type>(type_id, 100, do_rserv? 100 : 0);
591 BENCHMARK(title_pre+
" FillUni_List 1000") {
592 return test_02_seq_fillunique_find_itr<T, Size_type>(type_id, 1000, do_rserv? 1000 : 0);
600TEST_CASE(
"Memory Footprint 01 - Fill Sequential and List",
"[datatype][footprint]" ) {
606 footprint_fillseq_list_itr< std::vector<DataType01, counting_allocator<DataType01>>, std::size_t>(
"stdvec_def_empty_",
false);
607 footprint_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, counting_callocator<DataType01>>,
jau::nsize_t>(
"darray_def_empty_",
false);
608 footprint_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, counting_callocator<DataType01>,
true >,
jau::nsize_t>(
"darray_mmm_empty_",
false);
609 footprint_fillseq_list_itr< jau::cow_vector<DataType01, counting_allocator<DataType01>>, std::size_t>(
"cowstdvec_def_empty_",
false);
610 footprint_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, counting_callocator<DataType01>>,
jau::nsize_t>(
"cowdarray_def_empty_",
false);
611 footprint_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, counting_callocator<DataType01>,
true >,
jau::nsize_t>(
"cowdarray_mmm_empty_",
false);
613#if RUN_RESERVE_BENCHMARK
614 footprint_fillseq_list_itr< std::vector<DataType01, counting_allocator<DataType01>>, std::size_t>(
"stdvec_def_rserv",
true);
615 footprint_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, counting_callocator<DataType01>>,
jau::nsize_t>(
"darray_def_rserv",
true);
616 footprint_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, counting_callocator<DataType01>,
true >,
jau::nsize_t>(
"darray_mmm_rserv",
true);
617 footprint_fillseq_list_itr< jau::cow_vector<DataType01, counting_allocator<DataType01>>, std::size_t>(
"cowstdvec_def_rserv",
true);
618 footprint_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, counting_callocator<DataType01>>,
jau::nsize_t>(
"cowdarray_def_rserv",
true);
619 footprint_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, counting_callocator<DataType01>,
true >,
jau::nsize_t>(
"cowdarray_mmm_rserv",
true);
623TEST_CASE(
"Perf Test 01 - Fill Sequential and List, empty and reserve",
"[datatype][sequential]" ) {
627 benchmark_fillseq_list_itr< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_empty_itr",
"stdvec_empty_",
false);
628 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_empty_itr",
"darray_empty_",
false);
629 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_empty_itr",
"darray_empty_",
false);
630#if RUN_RESERVE_BENCHMARK
631 benchmark_fillseq_list_itr< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_rserv_itr",
"stdvec_rserv",
true);
632 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_rserv_itr",
"darray_rserv",
true);
633 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_rserv_itr",
"darray_rserv",
true);
637 benchmark_fillseq_list_idx< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_empty_idx",
"stdvec_empty_",
false);
638 benchmark_fillseq_list_itr< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_empty_itr",
"stdvec_empty_",
false);
640 benchmark_fillseq_list_idx< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_empty_idx",
"darray_empty_",
false);
641 benchmark_fillseq_list_idx< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_empty_idx",
"darray_empty_",
false);
642 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_empty_itr",
"darray_empty_",
false);
643 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_empty_itr",
"darray_empty_",
false);
645 benchmark_fillseq_list_itr< jau::cow_vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"COW_Vector_def_empty_itr",
"cowstdvec_empty_",
false);
647 benchmark_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"COW_DArray_def_empty_itr",
"cowdarray_empty_",
false);
648 benchmark_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"COW_DArray_mmm_empty_itr",
"cowdarray_empty_",
false);
650#if RUN_RESERVE_BENCHMARK
651 benchmark_fillseq_list_itr< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_rserv_itr",
"stdvec_rserv",
true);
652 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_rserv_itr",
"darray_rserv",
true);
653 benchmark_fillseq_list_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_rserv_itr",
"darray_rserv",
true);
654 benchmark_fillseq_list_itr< jau::cow_vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"COW_Vector_def_rserv_itr",
"cowstdvec_rserv",
true);
655 benchmark_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>, std::size_t>(
"COW_DArray_def_rserv_itr",
"cowdarray_rserv",
true);
656 benchmark_fillseq_list_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >, std::size_t>(
"COW_DArray_mmm_rserv_itr",
"cowdarray_rserv",
true);
660TEST_CASE(
"Perf Test 02 - Fill Unique and List, empty and reserve",
"[datatype][unique]" ) {
662 benchmark_fillunique_find_itr< jau::cow_vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"COW_Vector_def_empty_itr",
"cowstdvec_empty_",
false);
663 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"COW_DArray_def_empty_itr",
"cowdarray_empty_",
false);
664 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"COW_DArray_mmm_empty_itr",
"cowdarray_empty_",
false);
665#if RUN_RESERVE_BENCHMARK
666 benchmark_fillunique_find_itr< jau::cow_vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"COW_Vector_def_rserv_itr",
"cowstdvec_rserv",
true);
667 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"COW_DArray_def_rserv_itr",
"cowdarray_rserv",
true);
668 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"COW_DArray_mmm_rserv_itr",
"cowdarray_rserv",
true);
672 benchmark_fillunique_find_idx< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_empty_idx",
"stdvec_empty_",
false);
673 benchmark_fillunique_find_itr< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_empty_itr",
"stdvec_empty_",
false);
675 benchmark_fillunique_find_idx< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_empty_idx",
"darray_empty_",
false);
676 benchmark_fillunique_find_idx< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_empty_idx",
"darray_empty_",
false);
677 benchmark_fillunique_find_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_empty_itr",
"darray_empty_",
false);
678 benchmark_fillunique_find_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_empty_itr",
"darray_empty_",
false);
680 benchmark_fillunique_find_itr< jau::cow_vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"COW_Vector_def_empty_itr",
"cowstdvec_empty_",
false);
682 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"COW_DArray_def_empty_itr",
"cowdarray_empty_",
false);
683 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"COW_DArray_mmm_empty_itr",
"cowdarray_empty_",
false);
685#if RUN_RESERVE_BENCHMARK
686 benchmark_fillunique_find_itr< std::vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"STD_Vector_def_rserv_itr",
"stdvec_rserv",
true);
687 benchmark_fillunique_find_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"JAU_DArray_def_rserv_itr",
"darray_rserv",
true);
688 benchmark_fillunique_find_itr< jau::darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"JAU_DArray_mmm_rserv_itr",
"darray_rserv",
true);
689 benchmark_fillunique_find_itr< jau::cow_vector<DataType01, std::allocator<DataType01>>, std::size_t>(
"COW_Vector_def_rserv_itr",
"cowstdvec_rserv",
true);
690 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>>,
jau::nsize_t>(
"COW_DArray_def_rserv_itr",
"cowdarray_rserv",
true);
691 benchmark_fillunique_find_itr< jau::cow_darray<DataType01, jau::nsize_t, jau::callocator<DataType01>,
true >,
jau::nsize_t>(
"COW_DArray_mmm_rserv_itr",
"cowdarray_rserv",
true);
bool catch_perf_analysis
Run w/ command-line arg '–perf_analysis'.
bool catch_auto_run
Run w/o command-line args, i.e.
uint_fast32_t nsize_t
Natural 'size_t' alternative using uint_fast32_t as its natural sized type.
std::string to_decstring(const value_type &v, const char separator=',', const nsize_t width=0) noexcept
Produce a decimal string representation of an integral integer value.
__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros.
A simple allocator using POSIX C functions: ::malloc(), ::free() and ::realloc().
template< class T > is_cow_type<T>::value compile-time Type Trait, determining whether the given temp...
template< class T > is_darray_type<T>::value compile-time Type Trait, determining whether the given t...
static void test_00_seq_fill_unique_idx(T &data, const Size_type size)
static bool equal_comparator(const value_type &a, const value_type &b)
static bool test_01_seq_fill_list_footprint(const std::string &type_id, const Size_type size0, const Size_type reserve0, const bool do_print_mem)
static bool test_02_seq_fillunique_find_itr(const std::string &type_id, const Size_type size0, const Size_type reserve0)
static void print_mem(const std::string &pre, const T &data)
static void print_container_info(const std::string &type_id, const Cont &c, std::enable_if_t< jau::is_darray_type< Cont >::value, bool >=true)
static bool benchmark_fillseq_list_itr(const std::string &title_pre, const std::string &type_id, const bool do_rserv)
static bool benchmark_fillseq_list_idx(const std::string &title_pre, const std::string &type_id, const bool do_rserv)
const DataType01 * findDataSet01_idx(T &data, DataType01 const &elem) noexcept
static void test_00_seq_fill_unique_itr(T &data, const Size_type size, std::enable_if_t< is_cow_type< T >::value, bool >=true)
static bool test_01_seq_fill_list_idx(const std::string &type_id, const Size_type size0, const Size_type reserve0)
static void test_00_seq_fill(T &data, const Size_type size)
const DataType01 * findDataSet01_itr(T &data, DataType01 const &elem, std::enable_if_t< is_cow_type< T >::value, bool >=true) noexcept
static int test_00_list_idx(T &data)
static bool benchmark_fillunique_find_itr(const std::string &title_pre, const std::string &type_id, const bool do_rserv)
static uint8_t start_addr_b[]
static void test_00_seq_find_idx(T &data)
static bool test_01_seq_fill_list_itr(const std::string &type_id, const Size_type size0, const Size_type reserve0)
static bool benchmark_fillunique_find_idx(const std::string &title_pre, const std::string &type_id, const bool do_rserv)
static bool footprint_fillseq_list_itr(const std::string &type_id, const bool do_rserv)
static int test_00_list_itr(T &data, std::enable_if_t< is_cow_type< T >::value, bool >=true)
static bool test_02_seq_fillunique_find_idx(const std::string &type_id, const Size_type size0, const Size_type reserve0)
static void test_00_seq_find_itr(T &data)
static Addr48Bit start_addr(start_addr_b)
TEST_CASE("Memory Footprint 01 - Fill Sequential and List", "[datatype][footprint]")
int printf(const char *format,...)
Operating Systems predefined macros.