use exercism::minesweeper; 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, minesweeper::annotate(&cleaned_strs)); } #[test] fn no_rows() { #[rustfmt::skip] run_test(&[ ]); } #[test] #[ignore] fn no_columns() { #[rustfmt::skip] run_test(&[ "", ]); } #[test] #[ignore] fn no_mines() { #[rustfmt::skip] run_test(&[ " ", " ", " ", ]); } #[test] #[ignore] fn board_with_only_mines() { #[rustfmt::skip] run_test(&[ "***", "***", "***", ]); } #[test] #[ignore] fn mine_surrounded_by_spaces() { #[rustfmt::skip] run_test(&[ "111", "1*1", "111", ]); } #[test] #[ignore] fn space_surrounded_by_mines() { #[rustfmt::skip] run_test(&[ "***", "*8*", "***", ]); } #[test] #[ignore] fn horizontal_line() { #[rustfmt::skip] run_test(&[ "1*2*1", ]); } #[test] #[ignore] fn horizontal_line_mines_at_edges() { #[rustfmt::skip] run_test(&[ "*1 1*", ]); } #[test] #[ignore] fn vertical_line() { #[rustfmt::skip] run_test(&[ "1", "*", "2", "*", "1", ]); } #[test] #[ignore] fn vertical_line_mines_at_edges() { #[rustfmt::skip] run_test(&[ "*", "1", " ", "1", "*", ]); } #[test] #[ignore] fn cross() { #[rustfmt::skip] run_test(&[ " 2*2 ", "25*52", "*****", "25*52", " 2*2 ", ]); } #[test] #[ignore] fn large_board() { #[rustfmt::skip] run_test(&[ "1*22*1", "12*322", " 123*2", "112*4*", "1*22*2", "111111", ]); }