[position] Plumb capture mask and push mask arguments through all move generators

These masks will help when generating moves that address checks.
Create BitBoard::EMPTY and BitBoard::FULL.
This commit is contained in:
Eryn Wells 2024-01-29 20:11:34 -08:00
parent 9c4360c886
commit b93f8684fa
9 changed files with 111 additions and 46 deletions

View file

@ -17,7 +17,12 @@ impl MoveGeneratorInternal for KingMoveGenerator {
Piece::king(color)
}
fn move_set_for_piece(position: &Position, placed_piece: PlacedPiece) -> MoveSet {
fn move_set_for_piece(
position: &Position,
placed_piece: PlacedPiece,
capture_mask: BitBoard,
push_mask: BitBoard,
) -> MoveSet {
let piece = placed_piece.piece();
let color = piece.color();
let square = placed_piece.square();
@ -61,7 +66,7 @@ mod tests {
fn one_king() {
let pos = position![White King on E4];
let generator = KingMoveGenerator::new(&pos, Color::White);
let generator = KingMoveGenerator::new(&pos, Color::White, BitBoard::FULL, BitBoard::FULL);
assert_eq!(
generator.bitboard(),
@ -88,7 +93,7 @@ mod tests {
fn one_king_corner() {
let pos = position![White King on A1];
let generator = KingMoveGenerator::new(&pos, Color::White);
let generator = KingMoveGenerator::new(&pos, Color::White, BitBoard::FULL, BitBoard::FULL);
let generated_bitboard = generator.bitboard();
let expected_bitboard = bitboard![A2, B2, B1];
@ -132,7 +137,7 @@ mod tests {
assert!(pos.is_king_in_check());
let generator = KingMoveGenerator::new(&pos, Color::Black);
let generator = KingMoveGenerator::new(&pos, Color::Black, BitBoard::FULL, BitBoard::FULL);
let generated_moves = generator.bitboard();
let expected_moves = bitboard![F8, F7, F6, D6, D7, D8];
@ -151,7 +156,7 @@ mod tests {
assert!(pos.player_can_castle(Color::White, Castle::KingSide));
assert!(pos.player_can_castle(Color::White, Castle::QueenSide));
let generator = KingMoveGenerator::new(&pos, Color::White);
let generator = KingMoveGenerator::new(&pos, Color::White, BitBoard::FULL, BitBoard::FULL);
let generated_moves: HashSet<Move> = generator.iter().collect();
let king = piece!(White King);
@ -179,7 +184,7 @@ mod tests {
assert!(pos.player_can_castle(Color::White, Castle::KingSide));
assert!(!pos.player_can_castle(Color::White, Castle::QueenSide));
let generator = KingMoveGenerator::new(&pos, Color::White);
let generator = KingMoveGenerator::new(&pos, Color::White, BitBoard::FULL, BitBoard::FULL);
let generated_moves: HashSet<Move> = generator.iter().collect();
let king = piece!(White King);
@ -207,7 +212,7 @@ mod tests {
assert!(!pos.player_can_castle(Color::White, Castle::KingSide));
assert!(pos.player_can_castle(Color::White, Castle::QueenSide));
let generator = KingMoveGenerator::new(&pos, Color::White);
let generator = KingMoveGenerator::new(&pos, Color::White, BitBoard::FULL, BitBoard::FULL);
let generated_moves: HashSet<Move> = generator.iter().collect();
let king = piece!(White King);