Index: third_party/google_benchmark/test/map_test.cc |
diff --git a/third_party/google_benchmark/test/map_test.cc b/third_party/google_benchmark/test/map_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..83457c9981cde477e74f7a61b06061490f325cdc |
--- /dev/null |
+++ b/third_party/google_benchmark/test/map_test.cc |
@@ -0,0 +1,56 @@ |
+#include "benchmark/benchmark.h" |
+ |
+#include <cstdlib> |
+#include <map> |
+ |
+namespace { |
+ |
+std::map<int, int> ConstructRandomMap(int size) { |
+ std::map<int, int> m; |
+ for (int i = 0; i < size; ++i) { |
+ m.insert(std::make_pair(rand() % size, rand() % size)); |
+ } |
+ return m; |
+} |
+ |
+} // namespace |
+ |
+// Basic version. |
+static void BM_MapLookup(benchmark::State& state) { |
+ const int size = state.range(0); |
+ while (state.KeepRunning()) { |
+ state.PauseTiming(); |
+ std::map<int, int> m = ConstructRandomMap(size); |
+ state.ResumeTiming(); |
+ for (int i = 0; i < size; ++i) { |
+ benchmark::DoNotOptimize(m.find(rand() % size)); |
+ } |
+ } |
+ state.SetItemsProcessed(state.iterations() * size); |
+} |
+BENCHMARK(BM_MapLookup)->Range(1 << 3, 1 << 12); |
+ |
+// Using fixtures. |
+class MapFixture : public ::benchmark::Fixture { |
+ public: |
+ void SetUp(const ::benchmark::State& st) { |
+ m = ConstructRandomMap(st.range(0)); |
+ } |
+ |
+ void TearDown(const ::benchmark::State&) { m.clear(); } |
+ |
+ std::map<int, int> m; |
+}; |
+ |
+BENCHMARK_DEFINE_F(MapFixture, Lookup)(benchmark::State& state) { |
+ const int size = state.range(0); |
+ while (state.KeepRunning()) { |
+ for (int i = 0; i < size; ++i) { |
+ benchmark::DoNotOptimize(m.find(rand() % size)); |
+ } |
+ } |
+ state.SetItemsProcessed(state.iterations() * size); |
+} |
+BENCHMARK_REGISTER_F(MapFixture, Lookup)->Range(1 << 3, 1 << 12); |
+ |
+BENCHMARK_MAIN() |