@@ -50,37 +50,37 @@ int main(int argc, char** argv) {
5050 ->Arg (1024 )
5151 ->Arg (8192 );
5252 };
53- #define BENCH (generate_data, name ) \
54- do { \
55- auto gen1 = [](auto size) { return generate_data<int >(size); }; \
56- auto gen2 = [](auto size) { \
57- auto data = generate_data<int >(size); \
58- std::vector<support::NonIntegral> real_data (data.begin (), data.end ()); \
59- return real_data; \
60- }; \
61- bm.operator ()<std::vector<int >>(" std::partial_sort_copy(vector<int>) (" #name " )" , std_partial_sort_copy, gen1); \
62- bm.operator ()<std::vector<support::NonIntegral>>( \
63- " std::partial_sort_copy(vector<NonIntegral>) (" #name " )" , std_partial_sort_copy, gen2); \
64- bm.operator ()<std::deque<int >>(" std::partial_sort_copy(deque<int>) (" #name " )" , std_partial_sort_copy, gen1); \
65- bm.operator ()<std::list<int >>(" std::partial_sort_copy(list<int>) (" #name " )" , std_partial_sort_copy, gen1); \
66- \
67- bm.operator ()<std::vector<int >>( \
68- " rng::partial_sort_copy(vector<int>) (" #name " )" , std::ranges::partial_sort_copy, gen1); \
69- bm.operator ()<std::vector<support::NonIntegral>>( \
70- " rng::partial_sort_copy(vector<NonIntegral>) (" #name " )" , std::ranges::partial_sort_copy, gen2); \
71- bm.operator ()<std::deque<int >>( \
72- " rng::partial_sort_copy(deque<int>) (" #name " )" , std::ranges::partial_sort_copy, gen1); \
73- bm.operator ()<std::list<int >>( \
74- " rng::partial_sort_copy(list<int>) (" #name " )" , std::ranges::partial_sort_copy, gen1); \
75- } while (false )
7653
77- BENCH (support::quicksort_adversarial_data, " qsort adversarial" );
78- BENCH (support::ascending_sorted_data, " ascending" );
79- BENCH (support::descending_sorted_data, " descending" );
80- BENCH (support::pipe_organ_data, " pipe-organ" );
81- BENCH (support::heap_data, " heap" );
82- BENCH (support::shuffled_data, " shuffled" );
83- BENCH (support::single_element_data, " repeated" );
54+ auto register_bm = [&](auto generate, std::string variant) {
55+ auto gen2 = [generate](auto size) {
56+ std::vector<int > data = generate (size);
57+ std::vector<support::NonIntegral> real_data (data.begin (), data.end ());
58+ return real_data;
59+ };
60+ auto name = [variant](std::string op) { return op + " (" + variant + " )" ; };
61+ bm.operator ()<std::vector<int >>(name (" std::partial_sort_copy(vector<int>)" ), std_partial_sort_copy, generate);
62+ bm.operator ()<std::vector<support::NonIntegral>>(
63+ name (" std::partial_sort_copy(vector<NonIntegral>)" ), std_partial_sort_copy, gen2);
64+ bm.operator ()<std::deque<int >>(name (" std::partial_sort_copy(deque<int>)" ), std_partial_sort_copy, generate);
65+ bm.operator ()<std::list<int >>(name (" std::partial_sort_copy(list<int>)" ), std_partial_sort_copy, generate);
66+
67+ bm.operator ()<std::vector<int >>(
68+ name (" rng::partial_sort_copy(vector<int>)" ), std::ranges::partial_sort_copy, generate);
69+ bm.operator ()<std::vector<support::NonIntegral>>(
70+ name (" rng::partial_sort_copy(vector<NonIntegral>)" ), std::ranges::partial_sort_copy, gen2);
71+ bm.operator ()<std::deque<int >>(
72+ name (" rng::partial_sort_copy(deque<int>)" ), std::ranges::partial_sort_copy, generate);
73+ bm.operator ()<std::list<int >>(
74+ name (" rng::partial_sort_copy(list<int>)" ), std::ranges::partial_sort_copy, generate);
75+ };
76+
77+ register_bm (support::quicksort_adversarial_data<int >, " qsort adversarial" );
78+ register_bm (support::ascending_sorted_data<int >, " ascending" );
79+ register_bm (support::descending_sorted_data<int >, " descending" );
80+ register_bm (support::pipe_organ_data<int >, " pipe-organ" );
81+ register_bm (support::heap_data<int >, " heap" );
82+ register_bm (support::shuffled_data<int >, " shuffled" );
83+ register_bm (support::single_element_data<int >, " repeated" );
8484 }
8585
8686 benchmark::Initialize (&argc, argv);
0 commit comments