diff --git a/board/src/move_generator/move_generator.rs b/board/src/move_generator/move_generator.rs index 6fa44b0..689e47d 100644 --- a/board/src/move_generator/move_generator.rs +++ b/board/src/move_generator/move_generator.rs @@ -40,3 +40,40 @@ impl<'a> Moves<'a> { .cloned() } } + +#[cfg(test)] +mod tests { + use crate::{piece, position, r#move::AlgebraicMoveFormatter, Move, MoveBuilder, Square}; + use std::collections::HashSet; + + #[test] + fn one_king() { + let pos = position![ + White King on D3, + Black King on H6, + ]; + + let expected_moves = HashSet::from_iter([ + MoveBuilder::new(piece!(White King), Square::D3, Square::D4).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::E4).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::E3).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::E2).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::D2).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::C2).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::C3).build(), + MoveBuilder::new(piece!(White King), Square::D3, Square::C4).build(), + ]); + + let generated_moves: HashSet = pos.moves().iter().collect(); + + assert_eq!( + generated_moves, + expected_moves, + "{:?}", + generated_moves + .symmetric_difference(&expected_moves) + .map(|m| format!("{}", AlgebraicMoveFormatter::new(&m, &pos))) + .collect::>() + ); + } +}