aboutsummaryrefslogtreecommitdiff
path: root/libcxx/benchmarks/algorithms/minmax.bench.cpp
blob: b0ff7f91c199394ed13a3cabf537701fbb6a4886 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <algorithm>
#include <cassert>

#include <benchmark/benchmark.h>

void run_sizes(auto benchmark) {
  benchmark->Arg(1)
      ->Arg(2)
      ->Arg(3)
      ->Arg(4)
      ->Arg(5)
      ->Arg(6)
      ->Arg(7)
      ->Arg(8)
      ->Arg(9)
      ->Arg(10)
      ->Arg(11)
      ->Arg(12)
      ->Arg(13)
      ->Arg(14)
      ->Arg(15)
      ->Arg(16)
      ->Arg(17)
      ->Arg(18)
      ->Arg(19)
      ->Arg(20)
      ->Arg(21)
      ->Arg(22)
      ->Arg(23)
      ->Arg(24)
      ->Arg(25)
      ->Arg(26)
      ->Arg(27)
      ->Arg(28)
      ->Arg(29)
      ->Arg(30)
      ->Arg(31)
      ->Arg(32)
      ->Arg(64)
      ->Arg(512)
      ->Arg(1024)
      ->Arg(4000)
      ->Arg(4096)
      ->Arg(5500)
      ->Arg(64000)
      ->Arg(65536)
      ->Arg(70000);
}

template <class T>
static void BM_std_minmax(benchmark::State& state) {
  std::vector<T> vec(state.range(), 3);

  for (auto _ : state) {
    benchmark::DoNotOptimize(vec);
    benchmark::DoNotOptimize(std::ranges::minmax(vec));
  }
}
BENCHMARK(BM_std_minmax<char>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<short>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<int>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<long long>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<unsigned char>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<unsigned short>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<unsigned int>)->Apply(run_sizes);
BENCHMARK(BM_std_minmax<unsigned long long>)->Apply(run_sizes);

BENCHMARK_MAIN();