Chess-Challenge icon indicating copy to clipboard operation
Chess-Challenge copied to clipboard

Bug: IsCapture is not set when an en passant move is manually constructed

Open DrBrask opened this issue 2 years ago • 1 comments

IsCapture is not set when an en passant move is manually constructed.

This seems to be because the underlying MoveHelper.CreateMoveFromName(...) method doesn't set the captureType for en passant moves.

Here is an example from the test below.

Since EnPassant is true, IsCapture should also be true but it is not. image

The result is that a manually created EP Move instance does not match what the move generator produces because Move.Equals says they are different.

Here is a xUnit test:

[Fact]
public void EnPassantTest()
{
    var internalBoard = new ChessChallenge.Chess.Board();
    internalBoard.LoadPosition("1q5k/8/8/3pP3/8/6K1/8/8 w - d6 2 4");
    var board = new Board(internalBoard);
    
    var moves = board.GetLegalMoves();

    // Expect to find e5d6 (EP move)
    var expected = new Move("e5d6", board);   // BUG: This constructor fails to set captureType correctly

    // This fails because "IsCapture" is not set correctly in 'expected'
    Assert.Contains(expected, moves);
}

The correctly generated Move from the move generator looks like this: image

Position used: 1q5k/8/8/3pP3/8/6K1/8/8 w - d6 2 4

cc @SebLague

DrBrask avatar Aug 10 '23 19:08 DrBrask

Fixed by #447

DrBrask avatar Aug 13 '23 12:08 DrBrask