diff options
Diffstat (limited to 'libcxx/benchmarks/filesystem.bench.cpp')
| -rw-r--r-- | libcxx/benchmarks/filesystem.bench.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libcxx/benchmarks/filesystem.bench.cpp b/libcxx/benchmarks/filesystem.bench.cpp index 2cea3f69c67..f7949a163a7 100644 --- a/libcxx/benchmarks/filesystem.bench.cpp +++ b/libcxx/benchmarks/filesystem.bench.cpp @@ -2,6 +2,7 @@ #include "benchmark/benchmark_api.h" #include "GenerateInput.hpp" +#include "test_iterators.h" namespace fs = std::experimental::filesystem; @@ -41,6 +42,39 @@ void BM_PathConstructCStr(benchmark::State &st, GenInputs gen) { BENCHMARK_CAPTURE(BM_PathConstructCStr, large_string, getRandomStringInputs)->Arg(TestNumInputs); + +template <template <class...> class ItType, class GenInputs> +void BM_PathConstructIter(benchmark::State &st, GenInputs gen) { + using namespace fs; + using Iter = ItType<std::string::const_iterator>; + const auto in = gen(st.range(0)); + path PP; + for (auto& Part : in) + PP /= Part; + auto Start = Iter(PP.native().begin()); + auto End = Iter(PP.native().end()); + benchmark::DoNotOptimize(PP.native().data()); + benchmark::DoNotOptimize(Start); + benchmark::DoNotOptimize(End); + while (st.KeepRunning()) { + const path P(Start, End); + benchmark::DoNotOptimize(P.native().data()); + } +} +template <class GenInputs> +void BM_PathConstructInputIter(benchmark::State &st, GenInputs gen) { + BM_PathConstructIter<input_iterator>(st, gen); +} +template <class GenInputs> +void BM_PathConstructForwardIter(benchmark::State &st, GenInputs gen) { + BM_PathConstructIter<forward_iterator>(st, gen); +} +BENCHMARK_CAPTURE(BM_PathConstructInputIter, large_string, + getRandomStringInputs)->Arg(TestNumInputs); +BENCHMARK_CAPTURE(BM_PathConstructForwardIter, large_string, + getRandomStringInputs)->Arg(TestNumInputs); + + template <class GenInputs> void BM_PathIterateMultipleTimes(benchmark::State &st, GenInputs gen) { using namespace fs; |

