--- 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; }