Start adding benchmarks for vector
authorEric Fiselier <eric@efcs.ca>
Sun, 24 Jul 2016 06:51:55 +0000 (06:51 +0000)
committerEric Fiselier <eric@efcs.ca>
Sun, 24 Jul 2016 06:51:55 +0000 (06:51 +0000)
llvm-svn: 276552

libcxx/benchmarks/ContainerBenchmarks.hpp
libcxx/benchmarks/vector_operations.bench.cpp [new file with mode: 0644]

index 8321caf..6350e6b 100644 (file)
@@ -7,6 +7,18 @@
 
 namespace ContainerBenchmarks {
 
+
+template <class Container, class GenInputs>
+void BM_ConstructIterIter(benchmark::State& st, Container, GenInputs gen) {
+    auto in = gen(st.range_x());
+    const auto end = in.end();
+    benchmark::DoNotOptimize(&in);
+    while (st.KeepRunning()) {
+        Container c(in.begin(), in.end());
+        benchmark::DoNotOptimize(c.data());
+    }
+}
+
 template <class Container, class GenInputs>
 void BM_InsertValue(benchmark::State& st, Container c, GenInputs gen) {
     auto in = gen(st.range_x());
@@ -93,7 +105,6 @@ static void BM_FindRehash(benchmark::State& st, Container c, GenInputs gen) {
         }
         benchmark::ClobberMemory();
     }
-
 }
 
 } // end namespace ContainerBenchmarks
diff --git a/libcxx/benchmarks/vector_operations.bench.cpp b/libcxx/benchmarks/vector_operations.bench.cpp
new file mode 100644 (file)
index 0000000..004e801
--- /dev/null
@@ -0,0 +1,32 @@
+#include <vector>
+#include <functional>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
+
+#include "benchmark/benchmark_api.h"
+
+#include "ContainerBenchmarks.hpp"
+#include "GenerateInput.hpp"
+
+using namespace ContainerBenchmarks;
+
+constexpr std::size_t TestNumInputs = 1024;
+
+BENCHMARK_CAPTURE(BM_ConstructIterIter,
+  vector_char,
+  std::vector<char>{},
+  getRandomIntegerInputs<char>)->Arg(TestNumInputs);
+
+BENCHMARK_CAPTURE(BM_ConstructIterIter,
+  vector_size_t,
+  std::vector<size_t>{},
+  getRandomIntegerInputs<size_t>)->Arg(TestNumInputs);
+
+BENCHMARK_CAPTURE(BM_ConstructIterIter,
+  vector_string,
+  std::vector<std::string>{},
+  getRandomStringInputs)->Arg(TestNumInputs);
+
+
+BENCHMARK_MAIN()