From d136b4bd66f7550ff0b023ad4f5247eee1e1b188 Mon Sep 17 00:00:00 2001 From: kageru Date: Fri, 8 Dec 2023 09:49:45 +0100 Subject: [PATCH] add bench for lcm --- 2023/src/bin/day08.rs | 2 +- 2023/src/common.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/2023/src/bin/day08.rs b/2023/src/bin/day08.rs index 2426208..25dc7ef 100644 --- a/2023/src/bin/day08.rs +++ b/2023/src/bin/day08.rs @@ -51,7 +51,7 @@ fn part1(parsed: &Parsed) -> usize { // I assume this holds true for other inputs (it can’t have been random), // but I don’t see it anywhere in the task and only found out by experimentation. fn part2(parsed: &Parsed) -> usize { - parsed.1.keys().filter(|start| start.ends_with("A")).map(|start| steps_until(parsed, start, "Z")).fold(1, |acc, n| lcm(acc, n)) + parsed.1.keys().filter(|start| start.ends_with("A")).fold(1, |acc, n| lcm(acc, steps_until(parsed, n, "Z"))) } #[cfg(test)] diff --git a/2023/src/common.rs b/2023/src/common.rs index 6eb97c8..ab83add 100644 --- a/2023/src/common.rs +++ b/2023/src/common.rs @@ -1,3 +1,4 @@ +extern crate test; use std::{ fmt::Display, iter::Step, @@ -82,3 +83,20 @@ fn gcd(mut x: usize, mut y: usize) -> usize { pub fn lcm(x: usize, y: usize) -> usize { x * y / gcd(x, y) } + +#[cfg(test)] +mod benches { + use std::hint::black_box; + + use super::*; + + #[bench] + fn bench_lcm(b: &mut test::Bencher) { + b.iter(|| assert_eq!(lcm(black_box(20513), black_box(18827)), 1374371)) + } + + #[bench] + fn bench_lcm_big(b: &mut test::Bencher) { + b.iter(|| assert_eq!(lcm(black_box(169433831251), black_box(22199)), 13385272668829)) + } +}