[board, moves] Make Board::castling_rights and Board::en_passant_target private
Make the struct fields private and export getters and various setters for manipulating the data. Update all the references to these fields to use the getters and setters instead.
This commit is contained in:
parent
eaab34587c
commit
404212363e
10 changed files with 96 additions and 51 deletions
|
@ -48,7 +48,7 @@ impl PawnMoveGenerator {
|
|||
|
||||
let (single_pushes, double_pushes) = Self::pushes(pawns, color, empty);
|
||||
let (left_captures, right_captures) = Self::captures(pawns, color, enemies);
|
||||
let en_passant: BitBoard = board.en_passant_target.into();
|
||||
let en_passant: BitBoard = board.en_passant_target().into();
|
||||
|
||||
Self {
|
||||
color,
|
||||
|
|
|
@ -169,11 +169,11 @@ impl<T: BoardProvider> MakeMoveInternal for T {
|
|||
// board state before the change is preserved.
|
||||
let record = MoveRecord::new(board, ply, None);
|
||||
|
||||
board.en_passant_target = match target.rank() {
|
||||
Rank::FOUR => Some(Square::from_file_rank(target.file(), Rank::THREE)),
|
||||
Rank::FIVE => Some(Square::from_file_rank(target.file(), Rank::SIX)),
|
||||
board.set_en_passant_target(match target.rank() {
|
||||
Rank::FOUR => Square::from_file_rank(target.file(), Rank::THREE),
|
||||
Rank::FIVE => Square::from_file_rank(target.file(), Rank::SIX),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
});
|
||||
|
||||
self.advance_clocks(HalfMoveClock::Advance);
|
||||
|
||||
|
@ -192,7 +192,7 @@ impl<T: BoardProvider> MakeMoveInternal for T {
|
|||
|
||||
if ply.is_en_passant() {
|
||||
let en_passant_square = board
|
||||
.en_passant_target
|
||||
.en_passant_target()
|
||||
.ok_or(MakeMoveError::NoCaptureSquare)?;
|
||||
if target_square != en_passant_square {
|
||||
return Err(MakeMoveError::InvalidEnPassantCapture(target_square));
|
||||
|
@ -240,7 +240,7 @@ impl<T: BoardProvider> MakeMoveInternal for T {
|
|||
// original board state is preserved.
|
||||
let record = MoveRecord::new(board, ply, None);
|
||||
|
||||
board.castling_rights.revoke(active_color, wing);
|
||||
board.revoke_castling_right(active_color, wing);
|
||||
|
||||
self.advance_clocks(HalfMoveClock::Advance);
|
||||
|
||||
|
@ -446,7 +446,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::E2), None);
|
||||
assert_eq!(board.get_piece(Square::E4), Some(piece!(White Pawn)));
|
||||
assert_eq!(
|
||||
board.en_passant_target,
|
||||
board.en_passant_target(),
|
||||
Some(Square::E3),
|
||||
"en passant square not set"
|
||||
);
|
||||
|
@ -518,9 +518,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::H1), None);
|
||||
assert_eq!(board.get_piece(Square::G1), Some(piece!(White King)));
|
||||
assert_eq!(board.get_piece(Square::F1), Some(piece!(White Rook)));
|
||||
assert!(!board
|
||||
.castling_rights
|
||||
.color_has_right(Color::White, Wing::KingSide));
|
||||
assert!(!board.color_has_castling_right(Color::White, Wing::KingSide));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -540,9 +538,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::A1), None);
|
||||
assert_eq!(board.get_piece(Square::C1), Some(piece!(White King)));
|
||||
assert_eq!(board.get_piece(Square::D1), Some(piece!(White Rook)));
|
||||
assert!(!board
|
||||
.castling_rights
|
||||
.color_has_right(Color::White, Wing::QueenSide));
|
||||
assert!(!board.color_has_castling_right(Color::White, Wing::QueenSide));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -34,8 +34,8 @@ impl MoveRecord {
|
|||
Self {
|
||||
color: board.active_color(),
|
||||
ply,
|
||||
en_passant_target: board.en_passant_target,
|
||||
castling_rights: board.castling_rights,
|
||||
en_passant_target: board.en_passant_target(),
|
||||
castling_rights: board.castling_rights(),
|
||||
half_move_clock: board.half_move_clock,
|
||||
captured_piece: capture,
|
||||
}
|
||||
|
|
|
@ -70,8 +70,8 @@ impl<T: BoardProvider> UnmakeMove for T {
|
|||
|
||||
let board = self.board_mut();
|
||||
board.set_active_color(record.color);
|
||||
board.en_passant_target = record.en_passant_target;
|
||||
board.castling_rights = record.castling_rights;
|
||||
board.set_en_passant_target_option(record.en_passant_target);
|
||||
board.set_castling_rights(record.castling_rights);
|
||||
board.half_move_clock = record.half_move_clock;
|
||||
|
||||
Ok(())
|
||||
|
@ -260,7 +260,7 @@ mod tests {
|
|||
// Verify move was made
|
||||
assert_eq!(board.get_piece(Square::E2), None);
|
||||
assert_eq!(board.get_piece(Square::E4), Some(piece!(White Pawn)));
|
||||
assert_eq!(board.en_passant_target, Some(Square::E3));
|
||||
assert_eq!(board.en_passant_target(), Some(Square::E3));
|
||||
assert_eq!(board.active_color(), Color::Black);
|
||||
|
||||
board.unmake_move(&record)?;
|
||||
|
@ -268,7 +268,7 @@ mod tests {
|
|||
// Verify original state restored
|
||||
assert_eq!(board.get_piece(Square::E2), Some(piece!(White Pawn)));
|
||||
assert_eq!(board.get_piece(Square::E4), None);
|
||||
assert_eq!(board.en_passant_target, None);
|
||||
assert_eq!(board.en_passant_target(), None);
|
||||
assert_eq!(board.active_color(), Color::White);
|
||||
|
||||
Ok(())
|
||||
|
@ -396,7 +396,7 @@ mod tests {
|
|||
White Rook on H1,
|
||||
];
|
||||
|
||||
let original_castling_rights = board.castling_rights;
|
||||
let original_castling_rights = board.castling_rights();
|
||||
|
||||
let ply = Move::castle(Wing::KingSide);
|
||||
let record = board.make_move(ply, ValidateMove::Yes)?;
|
||||
|
@ -406,9 +406,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::H1), None);
|
||||
assert_eq!(board.get_piece(Square::G1), Some(piece!(White King)));
|
||||
assert_eq!(board.get_piece(Square::F1), Some(piece!(White Rook)));
|
||||
assert!(!board
|
||||
.castling_rights
|
||||
.color_has_right(Color::White, Wing::KingSide));
|
||||
assert!(!board.color_has_castling_right(Color::White, Wing::KingSide));
|
||||
|
||||
board.unmake_move(&record)?;
|
||||
|
||||
|
@ -417,7 +415,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::H1), Some(piece!(White Rook)));
|
||||
assert_eq!(board.get_piece(Square::G1), None);
|
||||
assert_eq!(board.get_piece(Square::F1), None);
|
||||
assert_eq!(board.castling_rights, original_castling_rights);
|
||||
assert_eq!(board.castling_rights(), original_castling_rights);
|
||||
assert_eq!(board.active_color(), Color::White);
|
||||
|
||||
Ok(())
|
||||
|
@ -430,7 +428,7 @@ mod tests {
|
|||
White Rook on A1,
|
||||
];
|
||||
|
||||
let original_castling_rights = board.castling_rights;
|
||||
let original_castling_rights = board.castling_rights();
|
||||
|
||||
let ply = Move::castle(Wing::QueenSide);
|
||||
let record = board.make_move(ply, ValidateMove::Yes)?;
|
||||
|
@ -440,9 +438,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::A1), None);
|
||||
assert_eq!(board.get_piece(Square::C1), Some(piece!(White King)));
|
||||
assert_eq!(board.get_piece(Square::D1), Some(piece!(White Rook)));
|
||||
assert!(!board
|
||||
.castling_rights
|
||||
.color_has_right(Color::White, Wing::QueenSide));
|
||||
assert!(!board.color_has_castling_right(Color::White, Wing::QueenSide));
|
||||
|
||||
board.unmake_move(&record)?;
|
||||
|
||||
|
@ -451,7 +447,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::A1), Some(piece!(White Rook)));
|
||||
assert_eq!(board.get_piece(Square::C1), None);
|
||||
assert_eq!(board.get_piece(Square::D1), None);
|
||||
assert_eq!(board.castling_rights, original_castling_rights);
|
||||
assert_eq!(board.castling_rights(), original_castling_rights);
|
||||
assert_eq!(board.active_color(), Color::White);
|
||||
|
||||
Ok(())
|
||||
|
@ -465,7 +461,7 @@ mod tests {
|
|||
];
|
||||
board.set_active_color(Color::Black);
|
||||
|
||||
let original_castling_rights = board.castling_rights;
|
||||
let original_castling_rights = board.castling_rights();
|
||||
|
||||
let ply = Move::castle(Wing::KingSide);
|
||||
let record = board.make_move(ply, ValidateMove::Yes)?;
|
||||
|
@ -483,7 +479,7 @@ mod tests {
|
|||
assert_eq!(board.get_piece(Square::H8), Some(piece!(Black Rook)));
|
||||
assert_eq!(board.get_piece(Square::G8), None);
|
||||
assert_eq!(board.get_piece(Square::F8), None);
|
||||
assert_eq!(board.castling_rights, original_castling_rights);
|
||||
assert_eq!(board.castling_rights(), original_castling_rights);
|
||||
assert_eq!(board.active_color(), Color::Black);
|
||||
|
||||
Ok(())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue