diff --git a/src/board/bitboard.rs b/src/board/bitboard.rs index 24d5b78..9ac832c 100644 --- a/src/board/bitboard.rs +++ b/src/board/bitboard.rs @@ -1,7 +1,6 @@ use u64 as Bitboard; pub const EMPTY: Bitboard = 0x0; -pub const FULL: Bitboard = 0xffffffffffffffff; pub const NOT_FILE_A: Bitboard = 0xfefefefefefefefe; pub const NOT_FILE_H: Bitboard = 0x7f7f7f7f7f7f7f7f; pub const NOT_FILE_AB: Bitboard = 0xfcfcfcfcfcfcfcfc; diff --git a/src/board/board.rs b/src/board/board.rs index 3282110..8f071e4 100644 --- a/src/board/board.rs +++ b/src/board/board.rs @@ -153,7 +153,7 @@ impl Board { } } - pub fn set_piece(&mut self, piece: Piece) { + pub fn set_piece(&mut self, piece: &Piece) { match piece.color { Color::Black => self.black_pieces[piece.piece_type].bitboard |= piece.bitboard, Color::White => self.white_pieces[piece.piece_type].bitboard |= piece.bitboard, @@ -211,7 +211,7 @@ pub enum PieceType { } impl PieceType { - const fn idx(&self) -> usize { + const fn idx(self) -> usize { match self { Self::Pawn => 0, Self::Knight => 1, @@ -247,7 +247,7 @@ pub enum Color { } impl Color { - pub const fn opponent(&self) -> Self { + pub const fn opponent(self) -> Self { match self { Self::White => Self::Black, Self::Black => Self::White, diff --git a/src/board/fen.rs b/src/board/fen.rs index 90e5e04..ea18c19 100644 --- a/src/board/fen.rs +++ b/src/board/fen.rs @@ -62,7 +62,7 @@ pub fn piece_placement(pieces: &str) -> Result { )) } } { - board.set_piece(Piece::new(1 << square, piece_type, color)); + board.set_piece(&Piece::new(1 << square, piece_type, color)); file += 1; }; } diff --git a/src/board/game.rs b/src/board/game.rs index 3aa5e0b..203bb8f 100644 --- a/src/board/game.rs +++ b/src/board/game.rs @@ -19,7 +19,7 @@ impl Game { from_fen(fen) } - pub const fn run(&self) { + pub const fn run() { Board::new(); } diff --git a/src/board/history.rs b/src/board/history.rs index 735820c..6759d27 100644 --- a/src/board/history.rs +++ b/src/board/history.rs @@ -17,7 +17,7 @@ impl History { } pub fn push_move_parameters(&mut self, move_parameters: MoveParameters) { - self.move_parameters.push(move_parameters) + self.move_parameters.push(move_parameters); } pub fn pop_move_parameters(&mut self) -> Option { @@ -56,7 +56,7 @@ impl MoveParameters { } fn add_move(&mut self, mv: Move) { - self.mv = Some(mv) + self.mv = Some(mv); } fn add_captured_piece(&mut self, board: &Board, dst: usize, color: Color) { @@ -64,13 +64,13 @@ impl MoveParameters { } fn add_promoted_piece(&mut self, promote: Promote) { - self.promoted_piece = Some(promote.into_piece_type()) + self.promoted_piece = Some(promote.into_piece_type()); } pub fn add_irreversible_parameters(&mut self, state: State) { self.castling_ability = Some(state.castling_ability); self.en_passant_square = state.en_passant_square; - self.halfmove_clock = Some(state.halfmove_clock) + self.halfmove_clock = Some(state.halfmove_clock); } pub fn add_capture_and_promotion_piece(&mut self, board: &Board, mv: Move, color: Color) { @@ -107,7 +107,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); @@ -118,7 +118,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); @@ -137,7 +137,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); @@ -148,7 +148,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); @@ -163,7 +163,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); @@ -184,7 +184,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); @@ -203,7 +203,7 @@ mod tests { 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(&move_parameters); assert_eq!(board_before_make, game.board); diff --git a/src/board/state.rs b/src/board/state.rs index d86cfaf..ca8e0b6 100644 --- a/src/board/state.rs +++ b/src/board/state.rs @@ -62,8 +62,9 @@ impl State { self.update_castling_state_capture(src, color); match (src, color) { - (4, Color::White) => self.set_castling_ability(color, Castle::None), - (60, Color::Black) => self.set_castling_ability(color, Castle::None), + (4, Color::White) | (60, Color::Black) => { + self.set_castling_ability(color, Castle::None) + } _ => (), } } diff --git a/src/interface/uci.rs b/src/interface/uci.rs index 63b1687..a346f33 100644 --- a/src/interface/uci.rs +++ b/src/interface/uci.rs @@ -39,8 +39,8 @@ pub enum Response { Info(String), } -fn write_response(handle_out: &mut impl Write, response: Response) -> Result<(), String> { - writeln!(handle_out, "{}", response).map_err(|e| e.to_string())?; +fn write_response(handle_out: &mut impl Write, response: &Response) -> Result<(), String> { + writeln!(handle_out, "{response}").map_err(|e| e.to_string())?; handle_out.flush().map_err(|e| e.to_string())?; Ok(()) } @@ -52,8 +52,8 @@ impl fmt::Display for Response { match self { Self::UciOk => write!(f, "id name ippos\nid author stefiosif\nuciok"), Self::ReadyOk => write!(f, "readyok"), - Self::BestMove(best_move) => write!(f, "bestmove {}", best_move), - Self::Info(info) => write!(f, "{}", info), + Self::BestMove(best_move) => write!(f, "bestmove {best_move}"), + Self::Info(info) => write!(f, "{info}"), } } } @@ -174,7 +174,7 @@ pub fn uci_loop(input: R, mut output: W) -> Result<(), Str Command::Quit => break, }; - write_response(&mut output, response)?; + write_response(&mut output, &response)?; output.flush().map_err(|e| e.to_string())?; } diff --git a/src/main.rs b/src/main.rs index 9c20fa2..c3dd3a6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,7 +30,7 @@ fn main() { Mode::Uci => { let input = io::stdin().lock(); let output = io::stdout().lock(); - uci::uci_loop(input, output).unwrap_or_else(|e| println!("{}", e)); + uci::uci_loop(input, output).unwrap_or_else(|e| println!("{e}")); } } } diff --git a/src/movegen/move.rs b/src/movegen/move.rs index 8b5d33c..e331d2e 100644 --- a/src/movegen/move.rs +++ b/src/movegen/move.rs @@ -61,7 +61,7 @@ impl fmt::Debug for Move { Promote::Rook => 'r', Promote::Queen => 'q', }; - write!(f, "{}", promote_char)?; + write!(f, "{promote_char}")?; } Ok(()) @@ -115,7 +115,7 @@ impl Move { } pub fn parse_into_str(&self) -> String { - format!("{:?}", self) + format!("{self:?}") } } @@ -156,22 +156,22 @@ impl Board { } MoveType::Promotion(promote) => { Self::remove_piece(mv.src, own_pieces); - Self::promote_piece(mv.dst, own_pieces, promote); + Self::promote_piece(mv.dst, own_pieces, *promote); } MoveType::PromotionCapture(promote) => { Self::remove_piece(mv.src, own_pieces); Self::remove_piece(mv.dst, opponent_pieces); - Self::promote_piece(mv.dst, own_pieces, promote); + Self::promote_piece(mv.dst, own_pieces, *promote); } MoveType::Castle => { Self::move_piece(mv.src, mv.dst, own_pieces); Self::move_rook_castle(mv.dst, own_pieces); - self.state.set_castling_ability(color, Castle::None) + self.state.set_castling_ability(color, Castle::None); } } } - pub fn unmake_move(&mut self, move_parameters: MoveParameters) { + pub fn unmake_move(&mut self, move_parameters: &MoveParameters) { let color_before_move = self.state.change_side(); self.state.revert_full_move(color_before_move); self.state.en_passant_square = move_parameters.en_passant_square; @@ -216,7 +216,7 @@ impl Board { Color::White => mv.dst - 8, Color::Black => mv.dst + 8, }; - opponent_pieces[PieceType::Pawn].bitboard |= square_to_bitboard(enemy_pawn_square) + opponent_pieces[PieceType::Pawn].bitboard |= square_to_bitboard(enemy_pawn_square); } MoveType::Castle => { Self::move_piece(mv.dst, mv.src, own_pieces); @@ -260,7 +260,7 @@ impl Board { Self::move_piece(rook_src, rook_dst, pieces); } - fn promote_piece(square: usize, pieces: &mut [Piece; 6], promote: &Promote) { + fn promote_piece(square: usize, pieces: &mut [Piece; 6], promote: Promote) { match promote { Promote::Knight => pieces[PieceType::Knight].bitboard |= square_to_bitboard(square), Promote::Bishop => pieces[PieceType::Bishop].bitboard |= square_to_bitboard(square), diff --git a/src/movegen/movegen.rs b/src/movegen/movegen.rs index 3dd4445..f521315 100644 --- a/src/movegen/movegen.rs +++ b/src/movegen/movegen.rs @@ -349,7 +349,7 @@ fn king_castling_moves(board: &Board, color: Color, all_occupancies: Bitboard) - let mut add_move_if_empty_path = |path_mask, king_dst| { if !have_common_bit(all_occupancies, path_mask) { - moves.push(Move::new_with_type(king_src, king_dst, MoveType::Castle)) + moves.push(Move::new_with_type(king_src, king_dst, MoveType::Castle)); } }; @@ -362,14 +362,10 @@ fn king_castling_moves(board: &Board, color: Color, all_occupancies: Bitboard) - add_move_if_empty_path(path_long, king_dst_long); } - (Castle::Both, Castle::Short) - | (Castle::Short, Castle::Short) - | (Castle::Short, Castle::Both) => { + (Castle::Both | Castle::Short, Castle::Short) | (Castle::Short, Castle::Both) => { add_move_if_empty_path(path_short, king_dst_short); } - (Castle::Both, Castle::Long) - | (Castle::Long, Castle::Long) - | (Castle::Long, Castle::Both) => { + (Castle::Both | Castle::Long, Castle::Long) | (Castle::Long, Castle::Both) => { add_move_if_empty_path(path_long, king_dst_long); } _ => (), diff --git a/src/search/negamax.rs b/src/search/negamax.rs index fbe234e..4ac8b67 100644 --- a/src/search/negamax.rs +++ b/src/search/negamax.rs @@ -27,17 +27,17 @@ pub fn negamax( game.board.make_move(&mv); if game.board.king_under_check(color) { - game.board.unmake_move(move_parameters); + game.board.unmake_move(&move_parameters); continue; } legal_moves += 1; let move_score = -negamax(game, -beta, -alpha, depth - 1, plies + 1).1; - game.board.unmake_move(move_parameters); + game.board.unmake_move(&move_parameters); if move_score > best_score { best_score = move_score; - best_move = Some(mv) + best_move = Some(mv); } if move_score >= beta { @@ -50,9 +50,8 @@ pub fn negamax( if legal_moves == 0 { if game.board.king_under_check(color) { return (None, mate_score); - } else { - return (None, 0); } + return (None, 0); } (best_move, best_score) } diff --git a/src/search/quiescence.rs b/src/search/quiescence.rs index 9ac8846..f6e5c61 100644 --- a/src/search/quiescence.rs +++ b/src/search/quiescence.rs @@ -27,12 +27,12 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32) -> (Option, game.board.make_move(&mv); if game.board.king_under_check(color) { - game.board.unmake_move(move_parameters); + game.board.unmake_move(&move_parameters); continue; } let move_score = -quiescence(game, -beta, -alpha).1; - game.board.unmake_move(move_parameters); + game.board.unmake_move(&move_parameters); if move_score >= beta { return (Some(mv), beta);