-
feat: NCS-9 En passant implementation (#8)
released this
2026-03-29 17:06:50 +02:00 | 154 commits to main since this release-
Add EnPassantCalculator to derive the en passant target square from GameHistory, detect en passant captures, and
compute the captured pawn's square- Extend MoveValidator.legalTargets to include the en passant diagonal square in pawn legal targets
- Extend GameController.processMove to remove the captured pawn from the board when an en passant capture is played
Details
En passant is derived purely from the last HistoryMove — no new state is introduced. If the last move was a double
pawn push, the target square is the square the pawn passed through. The board mutation follows the same pattern as
castling: board.withMove moves the capturing pawn, then board.removed removes the captured pawn from its actual square
(which differs from the destination square).Test Plan
- EnPassantCalculatorTest — 14 unit tests covering target derivation, captured square calculation, and capture
detection for both colors - MoveValidatorTest — 5 new tests: ep target included/excluded based on history, adjacency filter, both colors, case _
branch coverage - GameControllerTest — 2 integration tests: white and black en passant capture removes pawn from board and returns
correct captured piece - 100% scoverage (line/branch/method) confirmed
Co-authored-by: LQ63 lkhermann@web.de
Reviewed-on: #8
Reviewed-by: Janis janis-e@gmx.de
Co-authored-by: Leon Hermann lq@blackhole.local
Co-committed-by: Leon Hermann lq@blackhole.localDownloads
-