--- /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' + }, +};