From: Fabian Fichter Date: Wed, 11 Dec 2024 20:39:30 +0000 (+0100) Subject: Fix duck chess en passant FEN setup X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=e6ee6666087499fd21bef64efb44fb7e656a0497;p=fairystockfish.git Fix duck chess en passant FEN setup Closes #832. --- diff --git a/src/position.cpp b/src/position.cpp index 5278c01..81fa3c7 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -438,14 +438,14 @@ Position& Position::set(const Variant* v, const string& fenStr, bool isChess960, // 2) // a) side to move have a pawn threatening epSquare // b) there is an enemy pawn one or two (for triple steps) squares in front of epSquare - // c) there is no piece on epSquare or behind epSquare + // c) there is no (non-wall) piece on epSquare or behind epSquare if ( (var->enPassantRegion & epSquare) && ( !var->fastAttacks || (var->enPassantTypes[sideToMove] & ~piece_set(PAWN)) || ( pawn_attacks_bb(~sideToMove, epSquare) & pieces(sideToMove, PAWN) && ( (pieces(~sideToMove, PAWN) & (epSquare + pawn_push(~sideToMove))) || (pieces(~sideToMove, PAWN) & (epSquare + 2 * pawn_push(~sideToMove)))) - && !(pieces() & (epSquare | (epSquare + pawn_push(sideToMove))))))) + && !((pieces(WHITE) | pieces(BLACK)) & (epSquare | (epSquare + pawn_push(sideToMove))))))) st->epSquares |= epSquare; } } diff --git a/test.py b/test.py index bef4e5f..03f656b 100644 --- a/test.py +++ b/test.py @@ -470,6 +470,11 @@ class TestPyffish(unittest.TestCase): result = sf.get_fen("pocketknight", "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[Nn] w KQkq - 0 1", ["N@e4"]) self.assertEqual(result, "rnbqkbnr/pppppppp/8/8/4N3/8/PPPPPPPP/RNBQKBNR[n] b KQkq - 0 1") + # duck chess en passant + fen = "r1b1k3/pp3pb1/4p3/2p2p2/2PpP2q/1P1P1P2/P1K1*3/RN1Q2N1 b q e3 0 17" + result = sf.get_fen("duck", fen, []) + self.assertEqual(result, fen) + # SFEN result = sf.get_fen("shogi", SHOGI, [], False, True) self.assertEqual(result, SHOGI_SFEN)