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.
This commit is contained in:
Felix Spöttel 2023-12-06 10:08:35 +01:00 committed by GitHub
parent a9dcd181aa
commit c241820c41
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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<I: Clone, T>(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());
}