1
0

Add run_solver() function for testing

This commit is contained in:
Stefan Müller
2025-12-08 18:08:43 +01:00
parent c03eca490e
commit fd488ac8e4
+18 -14
View File
@@ -23,6 +23,10 @@ pub trait Solver {
fn process_data<R: BufRead>(&self, reader: R) -> (u64, u64);
}
// The "../../data" and "../../../data" paths are useful for running the binary from
// "target/release/" directory with "data/" directory in package root or parent directory.
const DATA_PATHS: &'static [&'static str] = &["./data", "../data", "../../data", "../../../data"];
pub fn run<S: Solver>(solver: S) {
println!(
"--- Day {}: {} ---",
@@ -30,29 +34,29 @@ pub fn run<S: Solver>(solver: S) {
solver.puzzle_name()
);
// TODO: Convert to constant and add "example" paths.
// The "../../data" and "../../../data" paths are useful for running the binary from
// "target/release/" directory with "data/" directory in package root or parent directory.
let paths = vec!["./data", "../data", "../../data", "../../../data"];
match run_solver(solver, &DATA_PATHS) {
Ok(result) => print_result(result),
Err(error) => eprintln!("{}", error),
}
}
let filename = sanitise_file_name::sanitise(solver.puzzle_name())
pub fn run_solver<S: Solver>(solver: S, paths: &[&str]) -> Result<(u64, u64), String> {
let reader = read_data_file(input_filename(solver.puzzle_name()), paths)?;
Ok(solver.process_data(reader))
}
fn input_filename(puzzle_name: &str) -> String {
sanitise_file_name::sanitise(puzzle_name)
.to_lowercase()
.replace(" ", "_")
+ ".txt";
match read_data_file(filename, &paths) {
Ok(reader) => {
let result = solver.process_data(reader);
print_result(result);
}
Err(error) => eprintln!("{}", error),
};
+ ".txt"
}
fn print_result(result: (u64, u64)) {
println!("Part 1: {:?}\nPart 2: {:?}\n", result.0, result.1);
}
fn read_data_file<T>(filename: String, search_paths: &Vec<T>) -> Result<io::BufReader<File>, String>
fn read_data_file<T>(filename: String, search_paths: &[T]) -> Result<io::BufReader<File>, String>
where
T: AsRef<Path>,
{