diff --git a/include/nonius/detail/timing.h++ b/include/nonius/detail/timing.h++ index 79557d1..12c1b91 100644 --- a/include/nonius/detail/timing.h++ +++ b/include/nonius/detail/timing.h++ @@ -23,9 +23,22 @@ namespace nonius { template struct timing { - Duration elapsed; + Duration elapsed = {}; Result result; - int iterations; + int iterations = 0; + + timing() = default; + + timing(Duration elapsed, Result result, int iterations) + : elapsed(elapsed) + , result(result) + , iterations(iterations) + {} + + template + operator timing() const { + return timing{ chrono::duration_cast(elapsed), result, iterations }; + } }; template using TimingOf = timing, detail::CompleteType>>; diff --git a/include/nonius/environment.h++ b/include/nonius/environment.h++ index d92e6d0..4c5acb4 100644 --- a/include/nonius/environment.h++ +++ b/include/nonius/environment.h++ @@ -20,9 +20,16 @@ namespace nonius { template struct environment_estimate { - Duration mean; + Duration mean = {}; outlier_classification outliers; + environment_estimate() = default; + + environment_estimate(Duration mean, outlier_classification outliers) + : mean(mean) + , outliers(outliers) + {} + template operator environment_estimate() const { return { mean, outliers }; diff --git a/include/nonius/estimate.h++ b/include/nonius/estimate.h++ index ab4cd65..290df42 100644 --- a/include/nonius/estimate.h++ +++ b/include/nonius/estimate.h++ @@ -17,14 +17,23 @@ namespace nonius { template struct estimate { - Duration point; - Duration lower_bound; - Duration upper_bound; - double confidence_interval; + Duration point = {}; + Duration lower_bound = {}; + Duration upper_bound = {}; + double confidence_interval = 0.0; + + estimate() = default; + + estimate(Duration point, Duration lower_bound, Duration upper_bound, double confidence_interval) + : point(point) + , lower_bound(lower_bound) + , upper_bound(upper_bound) + , confidence_interval(confidence_interval) + {} template operator estimate() const { - return { point, lower_bound, upper_bound, confidence_interval }; + return estimate{ point, lower_bound, upper_bound, confidence_interval }; } }; } // namespace nonius diff --git a/include/nonius/execution_plan.h++ b/include/nonius/execution_plan.h++ index 5c24197..9c63aae 100644 --- a/include/nonius/execution_plan.h++ +++ b/include/nonius/execution_plan.h++ @@ -24,16 +24,27 @@ namespace nonius { template struct execution_plan { - int iterations_per_sample; - Duration estimated_duration; + int iterations_per_sample = 0; + Duration estimated_duration = {}; parameters params; detail::benchmark_function benchmark; - Duration warmup_time; - int warmup_iterations; + Duration warmup_time = {}; + int warmup_iterations = 0; + + execution_plan() = default; + + execution_plan(int iterations_per_sample, Duration estimated_duration, parameters params, detail::benchmark_function benchmark, Duration warmup_time, int warmup_iterations) + : iterations_per_sample(iterations_per_sample) + , estimated_duration(estimated_duration) + , params(params) + , benchmark(benchmark) + , warmup_time(warmup_time) + , warmup_iterations(warmup_iterations) + {} template operator execution_plan() const { - return { iterations_per_sample, estimated_duration, params, benchmark, warmup_time, warmup_iterations }; + return execution_plan{ iterations_per_sample, estimated_duration, params, benchmark, warmup_time, warmup_iterations }; } template