From c241820c41afb16a764cbcab804765060f9f9fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sp=C3=B6ttel?= <1682504+fspoettel@users.noreply.github.com> Date: Wed, 6 Dec 2023 10:08:35 +0100 Subject: [PATCH] feat: use hint::black_box for benchmark evaluation (#47) * this prevents cases where subsequent invocations of a solution fully unroll it, leading to deceivingly low execution times being reported. --- src/template/runner.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/template/runner.rs b/src/template/runner.rs index 00637bb..4b47332 100644 --- a/src/template/runner.rs +++ b/src/template/runner.rs @@ -1,6 +1,7 @@ /// Encapsulates code that interacts with solution functions. use crate::template::{aoc_cli, Day, ANSI_ITALIC, ANSI_RESET}; use std::fmt::Display; +use std::hint::black_box; use std::io::{stdout, Write}; use std::process::Output; use std::time::{Duration, Instant}; @@ -64,7 +65,7 @@ fn bench(func: impl Fn(I) -> T, input: I, base_time: &Duration) -> // need a clone here to make the borrow checker happy. let cloned = input.clone(); let timer = Instant::now(); - func(cloned); + black_box(func(black_box(cloned))); timers.push(timer.elapsed()); }