Skip to content

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

@DrBrask

Description

@DrBrask

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions