blob: d6107f6228ad5de491ae8801b23b917ffca6295b [file] [log] [blame]
Eric Fiselier9e3e1372016-07-19 23:07:03 +00001#ifndef BENCHMARK_CONTAINER_BENCHMARKS_HPP
2#define BENCHMARK_CONTAINER_BENCHMARKS_HPP
3
4#include <cassert>
5
6#include "benchmark/benchmark_api.h"
7
8namespace ContainerBenchmarks {
9
10template <class Container, class GenInputs>
11void BM_InsertValue(benchmark::State& st, Container c, GenInputs gen) {
12 auto in = gen(st.range_x());
13 const auto end = in.end();
14 while (st.KeepRunning()) {
15 c.clear();
16 for (auto it = in.begin(); it != end; ++it) {
17 benchmark::DoNotOptimize(&(*c.insert(*it).first));
18 }
19 benchmark::ClobberMemory();
20 }
21}
22
23template <class Container, class GenInputs>
24void BM_InsertValueRehash(benchmark::State& st, Container c, GenInputs gen) {
25 auto in = gen(st.range_x());
26 const auto end = in.end();
27 while (st.KeepRunning()) {
28 c.clear();
29 c.rehash(16);
30 for (auto it = in.begin(); it != end; ++it) {
31 benchmark::DoNotOptimize(&(*c.insert(*it).first));
32 }
33 benchmark::ClobberMemory();
34 }
35}
36
37template <class Container, class GenInputs>
38static void BM_Find(benchmark::State& st, Container c, GenInputs gen) {
39 auto in = gen(st.range_x());
40 c.insert(in.begin(), in.end());
41 benchmark::DoNotOptimize(&(*c.begin()));
42 const auto end = in.data() + in.size();
43 while (st.KeepRunning()) {
44 for (auto it = in.data(); it != end; ++it) {
45 benchmark::DoNotOptimize(&(*c.find(*it)));
46 }
47 benchmark::ClobberMemory();
48 }
49}
50
51template <class Container, class GenInputs>
52static void BM_FindRehash(benchmark::State& st, Container c, GenInputs gen) {
53 c.rehash(8);
54 auto in = gen(st.range_x());
55 c.insert(in.begin(), in.end());
56 benchmark::DoNotOptimize(&(*c.begin()));
57 const auto end = in.data() + in.size();
58 while (st.KeepRunning()) {
59 for (auto it = in.data(); it != end; ++it) {
60 benchmark::DoNotOptimize(&(*c.find(*it)));
61 }
62 benchmark::ClobberMemory();
63 }
64
65}
66
67} // end namespace ContainerBenchmarks
68
69#endif // BENCHMARK_CONTAINER_BENCHMARKS_HPP