|
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