-int main(int argc, char** argv) {
- testing::InitGoogleTest(&argc, argv);
- gflags::ParseCommandLineFlags(&argc, &argv, true);
- auto r = RUN_ALL_TESTS();
- if (r) {
- return r;
+BENCHMARK(CharVecForRange, iters) {
+ BENCHMARK_SUSPEND {
+ setupCharVecBenchmark(iters);
+ }
+ size_t sum = 0;
+ for (auto& c : vec_char) {
+ sum += c;
+ }
+ doNotOptimizeAway(sum);
+}
+
+BENCHMARK(CharVecForRangeExplicitIndex, iters) {
+ BENCHMARK_SUSPEND {
+ setupCharVecBenchmark(iters);
+ }
+ size_t sum = 0;
+ size_t index = 0;
+ for (auto& c : vec_char) {
+ sum += c * index;
+ ++index;
+ }
+ doNotOptimizeAway(sum);
+}
+
+BENCHMARK(CharVecForEach, iters) {
+ BENCHMARK_SUSPEND {
+ setupCharVecBenchmark(iters);
+ }
+ size_t sum = 0;
+ folly::for_each(vec_char, [&](auto& c) { sum += c; });
+ doNotOptimizeAway(sum);
+}
+
+BENCHMARK(CharVecForEachIndex, iters) {
+ BENCHMARK_SUSPEND {
+ setupCharVecBenchmark(iters);
+ }
+ size_t sum = 0;
+ folly::for_each(vec_char, [&](auto& c, auto index) { sum += c * index; });
+ doNotOptimizeAway(sum);
+}
+
+BENCHMARK(CharVecForRangeEnumerate, iters) {
+ BENCHMARK_SUSPEND {
+ setupCharVecBenchmark(iters);
+ }
+ size_t sum = 0;
+ for (auto it : enumerate(vec_char)) {
+ sum += *it * it.index;