|
8 | 8 |
|
9 | 9 | // UNSUPPORTED: c++03, c++11, c++14, c++17
|
10 | 10 |
|
| 11 | +#include <algorithm> |
11 | 12 | #include <cstddef>
|
12 | 13 | #include <deque>
|
13 | 14 | #include <iterator>
|
|
19 | 20 | int main(int argc, char** argv) {
|
20 | 21 | auto std_distance = [](auto first, auto last) { return std::distance(first, last); };
|
21 | 22 |
|
22 |
| - // {std,ranges}::distance |
| 23 | + // {std,ranges}::distance(std::deque) |
| 24 | + { |
| 25 | + auto bm = [](std::string name, auto distance) { |
| 26 | + benchmark::RegisterBenchmark( |
| 27 | + name, |
| 28 | + [distance](auto& st) { |
| 29 | + std::size_t const size = st.range(0); |
| 30 | + std::deque<int> c(size, 1); |
| 31 | + |
| 32 | + for ([[maybe_unused]] auto _ : st) { |
| 33 | + benchmark::DoNotOptimize(c); |
| 34 | + auto result = distance(c.begin(), c.end()); |
| 35 | + benchmark::DoNotOptimize(result); |
| 36 | + } |
| 37 | + }) |
| 38 | + ->Arg(50) // non power-of-two |
| 39 | + ->Arg(1024) |
| 40 | + ->Arg(4096) |
| 41 | + ->Arg(8192); |
| 42 | + }; |
| 43 | + bm.operator()("std::distance(deque<int>)", std_distance); |
| 44 | + bm.operator()("rng::distance(deque<int>)", std::ranges::distance); |
| 45 | + } |
| 46 | + |
| 47 | + // {std,ranges}::distance(std::join_view) |
23 | 48 | {
|
24 | 49 | auto bm = []<class Container>(std::string name, auto distance, std::size_t seg_size) {
|
25 | 50 | benchmark::RegisterBenchmark(
|
@@ -48,18 +73,8 @@ int main(int argc, char** argv) {
|
48 | 73 | ->Arg(8192);
|
49 | 74 | };
|
50 | 75 | bm.operator()<std::vector<std::vector<int>>>("std::distance(join_view(vector<vector<int>>))", std_distance, 256);
|
51 |
| - bm.operator()<std::deque<std::deque<int>>>("std::distance(join_view(deque<deque<int>>))", std_distance, 256); |
52 | 76 | bm.operator()<std::vector<std::vector<int>>>(
|
53 | 77 | "rng::distance(join_view(vector<vector<int>>)", std::ranges::distance, 256);
|
54 |
| - bm.operator()<std::deque<std::deque<int>>>( |
55 |
| - "rng::distance(join_view(deque<deque<int>>)", std::ranges::distance, 256); |
56 |
| - |
57 |
| - bm.operator()<std::vector<std::vector<int>>>("std::distance(join_view(vector<vector<int>>))", std_distance, 1024); |
58 |
| - bm.operator()<std::deque<std::deque<int>>>("std::distance(join_view(deque<deque<int>>))", std_distance, 1024); |
59 |
| - bm.operator()<std::vector<std::vector<int>>>( |
60 |
| - "rng::distance(join_view(vector<vector<int>>)", std::ranges::distance, 1024); |
61 |
| - bm.operator()<std::deque<std::deque<int>>>( |
62 |
| - "rng::distance(join_view(deque<deque<int>>)", std::ranges::distance, 1024); |
63 | 78 | }
|
64 | 79 |
|
65 | 80 | benchmark::Initialize(&argc, argv);
|
|
0 commit comments