add bench for lcm

This commit is contained in:
kageru 2023-12-08 09:49:45 +01:00
parent f873147e3a
commit d136b4bd66
2 changed files with 19 additions and 1 deletions

View File

@ -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)]

View File

@ -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))
}
}