fix a bug in FEN en passant parsing, handle en passant takes - chess-puzzles - … | |
git clone git://git.codemadness.org/chess-puzzles | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 10e231516543327f556abc8b73c31c1e114ede48 | |
parent f2415a87c11df764bacefa67d70efd1c57bd66ff | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Wed, 20 Dec 2023 23:53:58 +0100 | |
fix a bug in FEN en passant parsing, handle en passant takes | |
Add a few tests for them. | |
Diffstat: | |
M fen.c | 8 ++++++-- | |
M tests.sh | 10 +++++++++- | |
2 files changed, 15 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/fen.c b/fen.c | |
@@ -549,8 +549,7 @@ next: | |
break; | |
case 3: /* en passant square */ | |
if (*s >= 'a' && *s <= 'h' && | |
- *(s + 1) >= '1' && *(s + 1) >= '6') { | |
- | |
+ *(s + 1) >= '1' && *(s + 1) <= '6') { | |
square[0] = *s; | |
square[1] = *(s + 1); | |
square[2] = '\0'; | |
@@ -599,6 +598,7 @@ next: | |
/* process moves */ | |
square[2] = '\0'; | |
x = y = x2 = y2 = -1; | |
+ | |
for (s = moves; *s; s++) { | |
if (*s == ' ') | |
continue; | |
@@ -677,6 +677,10 @@ next: | |
black_can_castle[0] = 0; | |
} | |
+ /* taken en passant? */ | |
+ if (x2 == enpassantsquare[0] && y2 == enpassantsquare[… | |
+ place(0, x2, piece == 'P' ? y2 + 1 : y2 - 1); | |
+ | |
/* the en passant square resets after a move */ | |
enpassantsquare[0] = -1; | |
enpassantsquare[1] = -1; | |
diff --git a/tests.sh b/tests.sh | |
@@ -6,7 +6,7 @@ testfen() { | |
fen="$2" | |
moves="$3" | |
- output=$(./fen_to_fen "$fen" "$moves") | |
+ output=$(./fen -o fen "$fen" "$moves") | |
if test "$output" = "$expect"; then | |
echo "OK" | |
else | |
@@ -78,3 +78,11 @@ testfen 'r4k1r/ppp1p1p1/8/2Pp1p2/6P1/4P2p/PP1P1P1P/R3K2R w -… | |
testfen 'r4k1r/p1ppp1p1/8/1pP2p2/6P1/4P2p/PP1P1P1P/R3K2R w - b6 0 9'\ | |
'r4k1r/ppppp1p1/8/2P2p2/6P1/4P2p/PP1P1P1P/R3K2R b - - 0 8'\ | |
'b7b5' | |
+# white takes en passant | |
+testfen 'rnbqkbnr/pppp1pp1/4P3/7p/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 3'\ | |
+ 'rnbqkbnr/pppp1pp1/8/3Pp2p/8/8/PPP1PPPP/RNBQKBNR w KQkq e6 0 3'\ | |
+ 'd5e6' | |
+# black takes en passant | |
+testfen 'rnbqkbnr/ppppppp1/8/8/3P4/4P1p1/PPP2P1P/RNBQKBNR w KQkq - 0 4'\ | |
+ 'rnbqkbnr/ppppppp1/8/8/3P2Pp/4P3/PPP2P1P/RNBQKBNR b KQkq g3 0 3'\ | |
+ 'h4g3' |