From 591cde86315dc36f6314e3c703ecfb480ed042f9 Mon Sep 17 00:00:00 2001 From: Xiretza Date: Thu, 9 Dec 2021 21:02:04 +0100 Subject: [PATCH] 2021 day8/rust: add test --- 2021/day8/day8_rs/tests/unscramble.rs | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 2021/day8/day8_rs/tests/unscramble.rs diff --git a/2021/day8/day8_rs/tests/unscramble.rs b/2021/day8/day8_rs/tests/unscramble.rs new file mode 100644 index 0000000..1070a6a --- /dev/null +++ b/2021/day8/day8_rs/tests/unscramble.rs @@ -0,0 +1,77 @@ +use std::path::PathBuf; + +use day8_rs::{v1, v2, v3, v4, LineResult}; + +fn test_unscramble_with_input(f: fn(&str) -> LineResult, input: &[&str]) -> LineResult { + let mut result = LineResult { + unique_digits: 0, + number: 0, + }; + + for line in input { + let LineResult { + unique_digits, + number, + } = f(line); + result.unique_digits += unique_digits; + result.number += number; + } + + return result; +} + +fn test_unscramble(f: fn(&str) -> LineResult) { + let test_file = |name| { + let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + path.push("inputs/"); + path.push(name); + + let input = std::fs::read_to_string(path).unwrap(); + let input: Vec<_> = input.lines().collect(); + test_unscramble_with_input(f, &input) + }; + + assert_eq!( + test_file("example.txt"), + LineResult { + unique_digits: 26, + number: 61229 + } + ); + + assert_eq!( + test_file("input.txt"), + LineResult { + unique_digits: 543, + number: 994266 + } + ); + + assert_eq!( + test_file("large.txt"), + LineResult { + unique_digits: 159946, + number: 498570828 + } + ); +} + +#[test] +pub fn test_unscramble_v1() { + test_unscramble(v1::unscramble) +} + +#[test] +pub fn test_unscramble_v2() { + test_unscramble(v2::unscramble) +} + +#[test] +pub fn test_unscramble_v3() { + test_unscramble(v3::unscramble) +} + +#[test] +pub fn test_unscramble_v4() { + test_unscramble(v4::unscramble) +}