78 lines
1.6 KiB
Rust
78 lines
1.6 KiB
Rust
|
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)
|
||
|
}
|