add bench for lcm
This commit is contained in:
parent
f873147e3a
commit
d136b4bd66
|
@ -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)]
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user