| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | 
							- /*
 
-  *  Created by Joachim on 16/04/2019.
 
-  *  Adapted from donated nonius code.
 
-  *
 
-  *  Distributed under the Boost Software License, Version 1.0. (See accompanying
 
-  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-  */
 
-  // Execution plan
 
- #ifndef TWOBLUECUBES_CATCH_EXECUTION_PLAN_HPP_INCLUDED
 
- #define TWOBLUECUBES_CATCH_EXECUTION_PLAN_HPP_INCLUDED
 
- #include "../catch_config.hpp"
 
- #include "catch_clock.hpp"
 
- #include "catch_environment.hpp"
 
- #include "detail/catch_benchmark_function.hpp"
 
- #include "detail/catch_repeat.hpp"
 
- #include "detail/catch_run_for_at_least.hpp"
 
- #include <algorithm>
 
- namespace Catch {
 
-     namespace Benchmark {
 
-         template <typename Duration>
 
-         struct ExecutionPlan {
 
-             int iterations_per_sample;
 
-             Duration estimated_duration;
 
-             Detail::BenchmarkFunction benchmark;
 
-             Duration warmup_time;
 
-             int warmup_iterations;
 
-             template <typename Duration2>
 
-             operator ExecutionPlan<Duration2>() const {
 
-                 return { iterations_per_sample, estimated_duration, benchmark, warmup_time, warmup_iterations };
 
-             }
 
-             template <typename Clock>
 
-             std::vector<FloatDuration<Clock>> run(const IConfig &cfg, Environment<FloatDuration<Clock>> env) const {
 
-                 // warmup a bit
 
-                 Detail::run_for_at_least<Clock>(std::chrono::duration_cast<ClockDuration<Clock>>(warmup_time), warmup_iterations, Detail::repeat(now<Clock>{}));
 
-                 std::vector<FloatDuration<Clock>> times;
 
-                 times.reserve(cfg.benchmarkSamples());
 
-                 std::generate_n(std::back_inserter(times), cfg.benchmarkSamples(), [this, env] {
 
-                     Detail::ChronometerModel<Clock> model;
 
-                     this->benchmark(Chronometer(model, iterations_per_sample));
 
-                     auto sample_time = model.elapsed() - env.clock_cost.mean;
 
-                     if (sample_time < FloatDuration<Clock>::zero()) sample_time = FloatDuration<Clock>::zero();
 
-                     return sample_time / iterations_per_sample;
 
-                 });
 
-                 return times;
 
-             }
 
-         };
 
-     } // namespace Benchmark
 
- } // namespace Catch
 
- #endif // TWOBLUECUBES_CATCH_EXECUTION_PLAN_HPP_INCLUDED
 
 
  |