From fbf2256e15fde0d8cb2bf36606668ca1990d087a Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Sun, 24 May 2026 21:15:21 -0600 Subject: [PATCH 1/5] tmp --- src/board.rs | 24 ++++++++---------------- src/board/makemove.rs | 2 +- src/board/parser.rs | 2 +- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/board.rs b/src/board.rs index bb1ae3d09..25abf7ed8 100644 --- a/src/board.rs +++ b/src/board.rs @@ -516,7 +516,13 @@ impl Board { self.state.key ^= ZOBRIST.castling[self.state.castling]; } - fn is_en_passant_valid(&self) -> bool { + /// We verify is self.state.enpassant is valid, and remove it if it is not. + /// This must be called after pinners and checkers have been updated. + fn validate_en_passant(&mut self) { + if self.en_passant() == Square::None { + return; + } + let stm = self.side_to_move(); let king = self.king_square(stm); let pushed_pawn = self.en_passant() ^ 8; @@ -528,24 +534,10 @@ impl Board { let king_attackers = occ & self.attackers_to(king, occ) & self.colors(!stm); if king_attackers.is_empty() { - return true; + return; //return true; } } - false - } - - /// We verify is self.state.enpassant is valid, and remove it if it is not. - /// This must be called after pinners and checkers have been updated. - fn update_en_passant(&mut self) { - if self.en_passant() == Square::None { - return; - } - - if self.is_en_passant_valid() { - return; - } - self.state.key ^= ZOBRIST.en_passant[self.en_passant()]; self.state.en_passant = Square::None; } diff --git a/src/board/makemove.rs b/src/board/makemove.rs index 3fd9c7857..967e5a54a 100644 --- a/src/board/makemove.rs +++ b/src/board/makemove.rs @@ -123,7 +123,7 @@ impl Board { self.state.key ^= ZOBRIST.castling[self.state.castling]; self.update_threats(); - self.update_en_passant(); + self.validate_en_passant(); self.state.repetition = 0; diff --git a/src/board/parser.rs b/src/board/parser.rs index 95ad519a8..816645fa8 100644 --- a/src/board/parser.rs +++ b/src/board/parser.rs @@ -59,7 +59,7 @@ impl Board { board.update_threats(); board.update_hash_keys(); - board.update_en_passant(); + board.validate_en_passant(); Ok(board) } From c00d1f07b9c2d991d1cbf7de328440afe04e0315 Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Sun, 24 May 2026 22:33:28 -0600 Subject: [PATCH 2/5] I break stuff. bench 3466720 --- src/board.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/board.rs b/src/board.rs index 25abf7ed8..24c9d49d0 100644 --- a/src/board.rs +++ b/src/board.rs @@ -530,7 +530,7 @@ impl Board { let pawns = pawn_attacks(self.en_passant(), !stm) & self.colored_pieces(stm, PieceType::Pawn); for attacker in pawns { - let occ = self.en_passant().to_bb() | (self.occupancies() ^ pushed_pawn.to_bb() ^ attacker.to_bb()); + let occ = self.occupancies() ^ pushed_pawn.to_bb() ^ attacker.to_bb(); let king_attackers = occ & self.attackers_to(king, occ) & self.colors(!stm); if king_attackers.is_empty() { From 438762e74399679de547e55689a1ef7385d82c2d Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Sun, 24 May 2026 22:55:07 -0600 Subject: [PATCH 3/5] back to master condition. bench 3466720 --- src/board.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/board.rs b/src/board.rs index 24c9d49d0..25abf7ed8 100644 --- a/src/board.rs +++ b/src/board.rs @@ -530,7 +530,7 @@ impl Board { let pawns = pawn_attacks(self.en_passant(), !stm) & self.colored_pieces(stm, PieceType::Pawn); for attacker in pawns { - let occ = self.occupancies() ^ pushed_pawn.to_bb() ^ attacker.to_bb(); + let occ = self.en_passant().to_bb() | (self.occupancies() ^ pushed_pawn.to_bb() ^ attacker.to_bb()); let king_attackers = occ & self.attackers_to(king, occ) & self.colors(!stm); if king_attackers.is_empty() { From 6f2ce0ad1a6bf97268692d1b3e8d747551ca8318 Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Tue, 26 May 2026 09:19:03 -0600 Subject: [PATCH 4/5] simplify enpassant validation. bench 3479389 --- src/board.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/board.rs b/src/board.rs index e93512ed6..4e024bcd3 100644 --- a/src/board.rs +++ b/src/board.rs @@ -516,11 +516,15 @@ impl Board { let pushed_pawn = self.en_passant() ^ 8; let ep_occ = self.en_passant().to_bb() | (self.occupancies() ^ pushed_pawn.to_bb()); - let pawns = pawn_attacks(self.en_passant(), !stm) & self.colored_pieces(stm, PieceType::Pawn); + let attackers = pawn_attacks(self.en_passant(), !stm) & self.colored_pieces(stm, PieceType::Pawn); - for attacker in pawns { + for attacker in attackers { let occ = ep_occ ^ attacker.to_bb(); - if (occ & self.attackers_to(king, occ) & self.colors(!stm)).is_empty() { + let slide_attackers = + (rook_attacks(king, occ) & self.pieces2(PieceType::Rook, PieceType::Queen)) + | (bishop_attacks(king, occ) & self.pieces2(PieceType::Bishop, PieceType::Queen)); + + if (slide_attackers & self.colors(!stm)).is_empty() { return; } } From 256c243b171c38e88902c9084afa7088dacaf577 Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Tue, 26 May 2026 11:14:07 -0600 Subject: [PATCH 5/5] Cargo format. bench 3479389 --- src/board.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/board.rs b/src/board.rs index 4e024bcd3..77f282e10 100644 --- a/src/board.rs +++ b/src/board.rs @@ -520,9 +520,8 @@ impl Board { for attacker in attackers { let occ = ep_occ ^ attacker.to_bb(); - let slide_attackers = - (rook_attacks(king, occ) & self.pieces2(PieceType::Rook, PieceType::Queen)) - | (bishop_attacks(king, occ) & self.pieces2(PieceType::Bishop, PieceType::Queen)); + let slide_attackers = (rook_attacks(king, occ) & self.pieces2(PieceType::Rook, PieceType::Queen)) + | (bishop_attacks(king, occ) & self.pieces2(PieceType::Bishop, PieceType::Queen)); if (slide_attackers & self.colors(!stm)).is_empty() { return;