From 6875c88c3d5a4b699d588bdf95befaec0c9a18e1 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 13 Jul 2022 13:18:30 +0100 Subject: [rust] Minesweeper --- rust/minesweeper/tests/minesweeper.rs | 141 ++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 rust/minesweeper/tests/minesweeper.rs (limited to 'rust/minesweeper/tests/minesweeper.rs') diff --git a/rust/minesweeper/tests/minesweeper.rs b/rust/minesweeper/tests/minesweeper.rs new file mode 100644 index 0000000..c27bbd5 --- /dev/null +++ b/rust/minesweeper/tests/minesweeper.rs @@ -0,0 +1,141 @@ +use minesweeper::annotate; + +fn remove_annotations(board: &[&str]) -> Vec { + board.iter().map(|r| remove_annotations_in_row(r)).collect() +} + +fn remove_annotations_in_row(row: &str) -> String { + row.chars() + .map(|ch| match ch { + '*' => '*', + _ => ' ', + }) + .collect() +} + +fn run_test(test_case: &[&str]) { + let cleaned = remove_annotations(test_case); + let cleaned_strs = cleaned.iter().map(|r| &r[..]).collect::>(); + let expected = test_case.iter().map(|&r| r.to_string()).collect::>(); + assert_eq!(expected, annotate(&cleaned_strs)); +} + +#[test] +fn no_rows() { + #[rustfmt::skip] + run_test(&[ + ]); +} + +#[test] +fn no_columns() { + #[rustfmt::skip] + run_test(&[ + "", + ]); +} + +#[test] +fn no_mines() { + #[rustfmt::skip] + run_test(&[ + " ", + " ", + " ", + ]); +} + +#[test] +fn board_with_only_mines() { + #[rustfmt::skip] + run_test(&[ + "***", + "***", + "***", + ]); +} + +#[test] +fn mine_surrounded_by_spaces() { + #[rustfmt::skip] + run_test(&[ + "111", + "1*1", + "111", + ]); +} + +#[test] +fn space_surrounded_by_mines() { + #[rustfmt::skip] + run_test(&[ + "***", + "*8*", + "***", + ]); +} + +#[test] +fn horizontal_line() { + #[rustfmt::skip] + run_test(&[ + "1*2*1", + ]); +} + +#[test] +fn horizontal_line_mines_at_edges() { + #[rustfmt::skip] + run_test(&[ + "*1 1*", + ]); +} + +#[test] +fn vertical_line() { + #[rustfmt::skip] + run_test(&[ + "1", + "*", + "2", + "*", + "1", + ]); +} + +#[test] +fn vertical_line_mines_at_edges() { + #[rustfmt::skip] + run_test(&[ + "*", + "1", + " ", + "1", + "*", + ]); +} + +#[test] +fn cross() { + #[rustfmt::skip] + run_test(&[ + " 2*2 ", + "25*52", + "*****", + "25*52", + " 2*2 ", + ]); +} + +#[test] +fn large_board() { + #[rustfmt::skip] + run_test(&[ + "1*22*1", + "12*322", + " 123*2", + "112*4*", + "1*22*2", + "111111", + ]); +} -- cgit v1.2.3