test/test-real-pgn.c

changeset 159
07c7be5661f4
parent 150
7d57a252948e
--- a/test/test-real-pgn.c	Tue Jul 28 13:37:19 2026 +0200
+++ b/test/test-real-pgn.c	Tue Jul 28 13:44:10 2026 +0200
@@ -40,6 +40,7 @@
     static unsigned index = 0;
     ++index;
     GameState gamestate;
+    // TODO: fix that we need an initialized game state for parsing PGNs
     gamestate_init(&gamestate);
     CX_TEST_DO {
         int result = parse_pgn(pgn_data[index-1], &gamestate);
@@ -51,11 +52,36 @@
     gamestate_cleanup(&gamestate);
 }
 
+static CX_TEST_SUBROUTINE(test_real_pgn_stalemate_sub,
+        GameState *gamestate, int game) {
+    // TODO: fix that we need an initialized game state for parsing PGNs
+    gamestate_init(gamestate);
+    CX_TEST_ASSERT(0 == parse_pgn(pgn_data[game], gamestate));
+    CX_TEST_ASSERT(gamestate->stalemate);
+    CX_TEST_ASSERT(!gamestate->wresign);
+    CX_TEST_ASSERT(!gamestate->bresign);
+    CX_TEST_ASSERT(!gamestate->checkmate);
+    CX_TEST_ASSERT(!gamestate->remis);
+    CX_TEST_ASSERT(!gamestate->threefold);
+    gamestate_cleanup(gamestate);
+}
+
+static CX_TEST(test_real_pgn_stalemate) {
+    GameState gamestate;
+    CX_TEST_DO {
+        /* the below mentioned games end in stalemate position */
+        CX_TEST_CALL_SUBROUTINE(test_real_pgn_stalemate_sub, &gamestate, 128);
+        CX_TEST_CALL_SUBROUTINE(test_real_pgn_stalemate_sub, &gamestate, 146);
+    }
+    gamestate_cleanup(&gamestate);
+}
+
 CxTestSuite* test_real_pgn_suite(void) {
     CxTestSuite* suite = cx_test_suite_new("Real PGN Files");
     for (unsigned i = 0 ; i < 150 ; i++) {
         cx_test_register(suite, test_real_pgn);
     }
+    cx_test_register(suite, test_real_pgn_stalemate);
     return suite;
 }
 

mercurial