Use macros for tests

This commit is contained in:
2020-12-02 22:37:19 +01:00
parent f8adae8dc0
commit b25a4bc1ba
3 changed files with 25 additions and 14 deletions

View File

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

View File

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

View File

@@ -19,3 +19,20 @@ pub fn get_implementation(day: usize) -> Box<dyn Solution> {
_ => 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);
};
}