Add run_solver() function for testing
This commit is contained in:
+18
-14
@@ -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>,
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user