|
6 | 6 | // |
7 | 7 | //===----------------------------------------------------------------------===// |
8 | 8 |
|
9 | | -// UNSUPPORTED: c++03, c++11, c++14 |
| 9 | +// UNSUPPORTED: c++03, c++11, c++14, c++17 |
10 | 10 |
|
11 | 11 | #include <algorithm> |
| 12 | +#include <vector> |
12 | 13 |
|
13 | | -#include "common.h" |
| 14 | +#include <benchmark/benchmark.h> |
14 | 15 |
|
15 | | -namespace { |
16 | | -template <class ValueType, class Order> |
17 | | -struct MinMaxElement { |
18 | | - size_t Quantity; |
| 16 | +void run_sizes(auto benchmark) { |
| 17 | + benchmark->Arg(1) |
| 18 | + ->Arg(2) |
| 19 | + ->Arg(3) |
| 20 | + ->Arg(4) |
| 21 | + ->Arg(64) |
| 22 | + ->Arg(512) |
| 23 | + ->Arg(1024) |
| 24 | + ->Arg(4000) |
| 25 | + ->Arg(4096) |
| 26 | + ->Arg(5500) |
| 27 | + ->Arg(64000) |
| 28 | + ->Arg(65536) |
| 29 | + ->Arg(70000); |
| 30 | +} |
19 | 31 |
|
20 | | - void run(benchmark::State& state) const { |
21 | | - runOpOnCopies<ValueType>(state, Quantity, Order(), BatchSize::CountElements, [](auto& Copy) { |
22 | | - benchmark::DoNotOptimize(std::minmax_element(Copy.begin(), Copy.end())); |
23 | | - }); |
24 | | - } |
| 32 | +template <class T> |
| 33 | +void BM_std_minmax_element(benchmark::State& state) { |
| 34 | + std::vector<T> vec(state.range(), 3); |
25 | 35 |
|
26 | | - std::string name() const { |
27 | | - return "BM_MinMaxElement" + ValueType::name() + Order::name() + "_" + std::to_string(Quantity); |
| 36 | + for (auto _ : state) { |
| 37 | + benchmark::DoNotOptimize(vec); |
| 38 | + benchmark::DoNotOptimize(std::minmax_element(vec.begin(), vec.end())); |
28 | 39 | } |
29 | | -}; |
30 | | -} // namespace |
31 | | - |
32 | | -int main(int argc, char** argv) { |
33 | | - benchmark::Initialize(&argc, argv); |
34 | | - if (benchmark::ReportUnrecognizedArguments(argc, argv)) |
35 | | - return 1; |
36 | | - makeCartesianProductBenchmark<MinMaxElement, AllValueTypes, AllOrders>(Quantities); |
37 | | - benchmark::RunSpecifiedBenchmarks(); |
38 | 40 | } |
| 41 | + |
| 42 | +BENCHMARK(BM_std_minmax_element<char>)->Apply(run_sizes); |
| 43 | +BENCHMARK(BM_std_minmax_element<short>)->Apply(run_sizes); |
| 44 | +BENCHMARK(BM_std_minmax_element<int>)->Apply(run_sizes); |
| 45 | +BENCHMARK(BM_std_minmax_element<long long>)->Apply(run_sizes); |
| 46 | + |
| 47 | +BENCHMARK_MAIN(); |
0 commit comments