diff --git a/2020/src/day01.rs b/2020/src/day01.rs index 3f14adc..37377af 100644 --- a/2020/src/day01.rs +++ b/2020/src/day01.rs @@ -47,21 +47,19 @@ impl Solution for Day01 { #[cfg(test)] mod tests { + use crate::test_implementation; + use super::*; const SAMPLE: &[u8] = include_bytes!("../samples/01.txt"); #[test] fn sample_part1() { - let mut day = Day01::default(); - let result = day.part1(&mut SAMPLE.as_ref()); - assert_eq!("514579", &result); + test_implementation!(Day01, 1, SAMPLE, 514579); } #[test] fn sample_part2() { - let mut day = Day01::default(); - let result = day.part2(&mut SAMPLE.as_ref()); - assert_eq!("241861950", &result); + test_implementation!(Day01, 2, SAMPLE, 241861950); } } diff --git a/2020/src/day02.rs b/2020/src/day02.rs index 6a167f0..2db8d39 100644 --- a/2020/src/day02.rs +++ b/2020/src/day02.rs @@ -67,23 +67,19 @@ impl Solution for Day02 { #[cfg(test)] mod tests { + use crate::test_implementation; + use super::*; const SAMPLE: &[u8] = include_bytes!("../samples/02.txt"); #[test] fn sample_part1() { - let mut implementation = Day02; - - let result = implementation.part1(&mut SAMPLE.as_ref()); - assert_eq!("2", &result); + test_implementation!(Day02, 1, SAMPLE, 2); } #[test] fn sample_part2() { - let mut implementation = Day02; - - let result = implementation.part2(&mut SAMPLE.as_ref()); - assert_eq!("1", &result); + test_implementation!(Day02, 2, SAMPLE, 1); } } diff --git a/2020/src/lib.rs b/2020/src/lib.rs index 1a5969a..9d642fc 100644 --- a/2020/src/lib.rs +++ b/2020/src/lib.rs @@ -19,3 +19,20 @@ pub fn get_implementation(day: usize) -> Box { _ => panic!("Unsupported day {}", day), } } + +#[macro_export] +macro_rules! test_implementation { + ($impl:ident, 1, $source:ident, $output:expr) => { + let mut implementation = $impl::default(); + + let result = implementation.part1(&mut $source.as_ref()); + assert_eq!($output.to_string(), result); + }; + + ($impl:ident, 2, $source:ident, $output:expr) => { + let mut implementation = $impl::default(); + + let result = implementation.part2(&mut $source.as_ref()); + assert_eq!($output.to_string(), result); + }; +}