Move MoveParameter handling inside make/unmake_move
This commit is contained in:
@@ -5,6 +5,7 @@ use super::{
|
||||
state::{Castle, State},
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct History {
|
||||
pub move_parameters: Vec<MoveParameters>,
|
||||
}
|
||||
@@ -25,6 +26,7 @@ impl History {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct MoveParameters {
|
||||
pub mv: Option<Move>,
|
||||
pub captured_piece: Option<PieceType>,
|
||||
@@ -86,39 +88,35 @@ impl MoveParameters {
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for MoveParameters {
|
||||
fn default() -> Self {
|
||||
MoveParameters::new()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::{
|
||||
board::{fen::from_fen, history::MoveParameters, square::Square},
|
||||
board::{fen::from_fen, square::Square},
|
||||
movegen::r#move::{Move, MoveType, Promote},
|
||||
};
|
||||
|
||||
const FEN: &str = "1r2k2r/2P1p1qp/2npb3/1p3p2/p3P1pP/P2B1Q2/1P1PNPP1/R3K2R w KQk - 0 1";
|
||||
const FEN_2: &str = "1r2k2r/2P1p1qp/2npb3/1p3p2/pP2P1pP/P2B1Q2/3PNPP1/R3K2R b KQk b3 0 1";
|
||||
|
||||
#[test]
|
||||
fn test_unmake_quiet_and_double_push() -> Result<(), String> {
|
||||
let mut game = from_fen(FEN)?;
|
||||
let board_before_make = game.board.clone();
|
||||
|
||||
let mv = Move::new_with_type(Square::B2, Square::B3, MoveType::Quiet);
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
let mv = Move::new_with_type(Square::B2, Square::B4, MoveType::DoublePush);
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
@@ -129,26 +127,15 @@ mod tests {
|
||||
fn test_unmake_capture_and_promotion() -> Result<(), String> {
|
||||
let mut game = from_fen(FEN)?;
|
||||
let board_before_make = game.board.clone();
|
||||
|
||||
let mv = Move::new_with_type(Square::D3, Square::B5, MoveType::Capture);
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
let mv = Move::new_with_type(Square::C7, Square::C8, MoveType::Promotion(Promote::Queen));
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
@@ -157,13 +144,8 @@ mod tests {
|
||||
Square::B8,
|
||||
MoveType::PromotionCapture(Promote::Queen),
|
||||
);
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
@@ -172,19 +154,11 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_unmake_en_passant() -> Result<(), String> {
|
||||
let mut game = from_fen(FEN)?;
|
||||
let mv = Move::new_with_type(Square::B2, Square::B4, MoveType::DoublePush);
|
||||
game.board.make_move(&mv);
|
||||
let mut game = from_fen(FEN_2)?;
|
||||
let board_before_make = game.board.clone();
|
||||
|
||||
let mv = Move::new_with_type(Square::A4, Square::B3, MoveType::EnPassant);
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
@@ -195,15 +169,9 @@ mod tests {
|
||||
fn test_unmake_castle() -> Result<(), String> {
|
||||
let mut game = from_fen(FEN)?;
|
||||
let board_before_make = game.board.clone();
|
||||
|
||||
let mv = Move::new_with_type(Square::E1, Square::C1, MoveType::Castle);
|
||||
let mut move_parameters = MoveParameters::new();
|
||||
move_parameters.add_move(mv);
|
||||
move_parameters.add_irreversible_parameters(game.board.state);
|
||||
move_parameters.add_capture_and_promotion_piece(&game.board, mv, game.current_player());
|
||||
|
||||
game.board.make_move(&mv);
|
||||
game.board.unmake_move(&move_parameters);
|
||||
game.board.unmake_move();
|
||||
|
||||
assert_eq!(board_before_make, game.board);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user