xref: /third_party/benchmark/test/map_test.cc (revision a8c51b3f)
1a8c51b3fSopenharmony_ci#include <cstdlib>
2a8c51b3fSopenharmony_ci#include <map>
3a8c51b3fSopenharmony_ci
4a8c51b3fSopenharmony_ci#include "benchmark/benchmark.h"
5a8c51b3fSopenharmony_ci
6a8c51b3fSopenharmony_cinamespace {
7a8c51b3fSopenharmony_ci
8a8c51b3fSopenharmony_cistd::map<int, int> ConstructRandomMap(int size) {
9a8c51b3fSopenharmony_ci  std::map<int, int> m;
10a8c51b3fSopenharmony_ci  for (int i = 0; i < size; ++i) {
11a8c51b3fSopenharmony_ci    m.insert(std::make_pair(std::rand() % size, std::rand() % size));
12a8c51b3fSopenharmony_ci  }
13a8c51b3fSopenharmony_ci  return m;
14a8c51b3fSopenharmony_ci}
15a8c51b3fSopenharmony_ci
16a8c51b3fSopenharmony_ci}  // namespace
17a8c51b3fSopenharmony_ci
18a8c51b3fSopenharmony_ci// Basic version.
19a8c51b3fSopenharmony_cistatic void BM_MapLookup(benchmark::State& state) {
20a8c51b3fSopenharmony_ci  const int size = static_cast<int>(state.range(0));
21a8c51b3fSopenharmony_ci  std::map<int, int> m;
22a8c51b3fSopenharmony_ci  for (auto _ : state) {
23a8c51b3fSopenharmony_ci    state.PauseTiming();
24a8c51b3fSopenharmony_ci    m = ConstructRandomMap(size);
25a8c51b3fSopenharmony_ci    state.ResumeTiming();
26a8c51b3fSopenharmony_ci    for (int i = 0; i < size; ++i) {
27a8c51b3fSopenharmony_ci      auto it = m.find(std::rand() % size);
28a8c51b3fSopenharmony_ci      benchmark::DoNotOptimize(it);
29a8c51b3fSopenharmony_ci    }
30a8c51b3fSopenharmony_ci  }
31a8c51b3fSopenharmony_ci  state.SetItemsProcessed(state.iterations() * size);
32a8c51b3fSopenharmony_ci}
33a8c51b3fSopenharmony_ciBENCHMARK(BM_MapLookup)->Range(1 << 3, 1 << 12);
34a8c51b3fSopenharmony_ci
35a8c51b3fSopenharmony_ci// Using fixtures.
36a8c51b3fSopenharmony_ciclass MapFixture : public ::benchmark::Fixture {
37a8c51b3fSopenharmony_ci public:
38a8c51b3fSopenharmony_ci  void SetUp(const ::benchmark::State& st) override {
39a8c51b3fSopenharmony_ci    m = ConstructRandomMap(static_cast<int>(st.range(0)));
40a8c51b3fSopenharmony_ci  }
41a8c51b3fSopenharmony_ci
42a8c51b3fSopenharmony_ci  void TearDown(const ::benchmark::State&) override { m.clear(); }
43a8c51b3fSopenharmony_ci
44a8c51b3fSopenharmony_ci  std::map<int, int> m;
45a8c51b3fSopenharmony_ci};
46a8c51b3fSopenharmony_ci
47a8c51b3fSopenharmony_ciBENCHMARK_DEFINE_F(MapFixture, Lookup)(benchmark::State& state) {
48a8c51b3fSopenharmony_ci  const int size = static_cast<int>(state.range(0));
49a8c51b3fSopenharmony_ci  for (auto _ : state) {
50a8c51b3fSopenharmony_ci    for (int i = 0; i < size; ++i) {
51a8c51b3fSopenharmony_ci      auto it = m.find(std::rand() % size);
52a8c51b3fSopenharmony_ci      benchmark::DoNotOptimize(it);
53a8c51b3fSopenharmony_ci    }
54a8c51b3fSopenharmony_ci  }
55a8c51b3fSopenharmony_ci  state.SetItemsProcessed(state.iterations() * size);
56a8c51b3fSopenharmony_ci}
57a8c51b3fSopenharmony_ciBENCHMARK_REGISTER_F(MapFixture, Lookup)->Range(1 << 3, 1 << 12);
58a8c51b3fSopenharmony_ci
59a8c51b3fSopenharmony_ciBENCHMARK_MAIN();
60