test/test-real-pgn.c

changeset 149
ea2448961441
child 150
7d57a252948e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/test-real-pgn.c	Sun Jul 19 17:13:16 2026 +0200
@@ -0,0 +1,662 @@
+/*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2026 Mike Becker. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "ucxtest.h"
+#include "chess/pgn.h"
+
+#if __STDC_VERSION__ < 202310L
+#error Need C23 compiler to compile this test.
+#endif
+
+const char pgn_data[150][1500];
+
+static CX_TEST(test_real_pgn) {
+    static unsigned index = 0;
+    ++index;
+    GameState gamestate;
+    gamestate_init(&gamestate);
+    CX_TEST_DO {
+        int result = parse_pgn(pgn_data[index-1], &gamestate);
+        char msg[32];
+        sprintf(msg, "failed to parse game%03u.pgn", index);
+        CX_TEST_ASSERTM(result == pgn_no_error, msg);
+    }
+    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);
+    }
+    return suite;
+}
+
+const char pgn_data[150][1500] = {
+    {
+#embed "data/game001.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game002.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game003.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game004.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game005.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game006.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game007.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game008.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game009.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game010.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game011.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game012.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game013.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game014.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game015.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game016.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game017.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game018.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game019.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game020.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game021.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game022.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game023.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game024.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game025.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game026.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game027.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game028.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game029.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game030.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game031.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game032.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game033.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game034.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game035.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game036.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game037.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game038.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game039.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game040.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game041.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game042.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game043.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game044.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game045.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game046.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game047.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game048.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game049.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game050.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game051.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game052.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game053.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game054.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game055.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game056.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game057.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game058.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game059.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game060.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game061.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game062.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game063.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game064.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game065.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game066.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game067.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game068.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game069.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game070.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game071.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game072.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game073.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game074.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game075.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game076.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game077.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game078.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game079.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game080.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game081.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game082.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game083.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game084.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game085.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game086.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game087.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game088.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game089.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game090.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game091.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game092.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game093.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game094.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game095.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game096.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game097.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game098.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game099.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game100.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game101.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game102.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game103.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game104.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game105.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game106.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game107.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game108.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game109.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game110.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game111.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game112.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game113.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game114.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game115.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game116.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game117.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game118.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game119.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game120.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game121.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game122.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game123.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game124.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game125.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game126.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game127.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game128.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game129.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game130.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game131.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game132.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game133.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game134.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game135.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game136.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game137.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game138.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game139.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game140.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game141.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game142.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game143.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game144.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game145.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game146.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game147.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game148.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game149.pgn"
+        , '\0'
+    },
+    {
+#embed "data/game150.pgn"
+        , '\0'
+    },
+};

mercurial