| |
1 /* |
| |
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
| |
3 * |
| |
4 * Copyright 2026 Mike Becker. All rights reserved. |
| |
5 * |
| |
6 * Redistribution and use in source and binary forms, with or without |
| |
7 * modification, are permitted provided that the following conditions are met: |
| |
8 * |
| |
9 * 1. Redistributions of source code must retain the above copyright |
| |
10 * notice, this list of conditions and the following disclaimer. |
| |
11 * |
| |
12 * 2. Redistributions in binary form must reproduce the above copyright |
| |
13 * notice, this list of conditions and the following disclaimer in the |
| |
14 * documentation and/or other materials provided with the distribution. |
| |
15 * |
| |
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| |
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| |
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| |
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| |
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| |
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| |
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| |
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| |
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| |
26 * POSSIBILITY OF SUCH DAMAGE. |
| |
27 * |
| |
28 */ |
| |
29 |
| |
30 #include "ucxtest.h" |
| |
31 #include "chess/pgn.h" |
| |
32 |
| |
33 #if __STDC_VERSION__ < 202310L |
| |
34 #error Need C23 compiler to compile this test. |
| |
35 #endif |
| |
36 |
| |
37 const char pgn_data[150][1500]; |
| |
38 |
| |
39 static CX_TEST(test_real_pgn) { |
| |
40 static unsigned index = 0; |
| |
41 ++index; |
| |
42 GameState gamestate; |
| |
43 gamestate_init(&gamestate); |
| |
44 CX_TEST_DO { |
| |
45 int result = parse_pgn(pgn_data[index-1], &gamestate); |
| |
46 char msg[32]; |
| |
47 sprintf(msg, "failed to parse game%03u.pgn", index); |
| |
48 CX_TEST_ASSERTM(result == pgn_no_error, msg); |
| |
49 } |
| |
50 gamestate_cleanup(&gamestate); |
| |
51 } |
| |
52 |
| |
53 CxTestSuite* test_real_pgn_suite(void) { |
| |
54 CxTestSuite* suite = cx_test_suite_new("Real PGN Files"); |
| |
55 for (unsigned i = 0 ; i < 150 ; i++) { |
| |
56 cx_test_register(suite, test_real_pgn); |
| |
57 } |
| |
58 return suite; |
| |
59 } |
| |
60 |
| |
61 const char pgn_data[150][1500] = { |
| |
62 { |
| |
63 #embed "data/game001.pgn" |
| |
64 , '\0' |
| |
65 }, |
| |
66 { |
| |
67 #embed "data/game002.pgn" |
| |
68 , '\0' |
| |
69 }, |
| |
70 { |
| |
71 #embed "data/game003.pgn" |
| |
72 , '\0' |
| |
73 }, |
| |
74 { |
| |
75 #embed "data/game004.pgn" |
| |
76 , '\0' |
| |
77 }, |
| |
78 { |
| |
79 #embed "data/game005.pgn" |
| |
80 , '\0' |
| |
81 }, |
| |
82 { |
| |
83 #embed "data/game006.pgn" |
| |
84 , '\0' |
| |
85 }, |
| |
86 { |
| |
87 #embed "data/game007.pgn" |
| |
88 , '\0' |
| |
89 }, |
| |
90 { |
| |
91 #embed "data/game008.pgn" |
| |
92 , '\0' |
| |
93 }, |
| |
94 { |
| |
95 #embed "data/game009.pgn" |
| |
96 , '\0' |
| |
97 }, |
| |
98 { |
| |
99 #embed "data/game010.pgn" |
| |
100 , '\0' |
| |
101 }, |
| |
102 { |
| |
103 #embed "data/game011.pgn" |
| |
104 , '\0' |
| |
105 }, |
| |
106 { |
| |
107 #embed "data/game012.pgn" |
| |
108 , '\0' |
| |
109 }, |
| |
110 { |
| |
111 #embed "data/game013.pgn" |
| |
112 , '\0' |
| |
113 }, |
| |
114 { |
| |
115 #embed "data/game014.pgn" |
| |
116 , '\0' |
| |
117 }, |
| |
118 { |
| |
119 #embed "data/game015.pgn" |
| |
120 , '\0' |
| |
121 }, |
| |
122 { |
| |
123 #embed "data/game016.pgn" |
| |
124 , '\0' |
| |
125 }, |
| |
126 { |
| |
127 #embed "data/game017.pgn" |
| |
128 , '\0' |
| |
129 }, |
| |
130 { |
| |
131 #embed "data/game018.pgn" |
| |
132 , '\0' |
| |
133 }, |
| |
134 { |
| |
135 #embed "data/game019.pgn" |
| |
136 , '\0' |
| |
137 }, |
| |
138 { |
| |
139 #embed "data/game020.pgn" |
| |
140 , '\0' |
| |
141 }, |
| |
142 { |
| |
143 #embed "data/game021.pgn" |
| |
144 , '\0' |
| |
145 }, |
| |
146 { |
| |
147 #embed "data/game022.pgn" |
| |
148 , '\0' |
| |
149 }, |
| |
150 { |
| |
151 #embed "data/game023.pgn" |
| |
152 , '\0' |
| |
153 }, |
| |
154 { |
| |
155 #embed "data/game024.pgn" |
| |
156 , '\0' |
| |
157 }, |
| |
158 { |
| |
159 #embed "data/game025.pgn" |
| |
160 , '\0' |
| |
161 }, |
| |
162 { |
| |
163 #embed "data/game026.pgn" |
| |
164 , '\0' |
| |
165 }, |
| |
166 { |
| |
167 #embed "data/game027.pgn" |
| |
168 , '\0' |
| |
169 }, |
| |
170 { |
| |
171 #embed "data/game028.pgn" |
| |
172 , '\0' |
| |
173 }, |
| |
174 { |
| |
175 #embed "data/game029.pgn" |
| |
176 , '\0' |
| |
177 }, |
| |
178 { |
| |
179 #embed "data/game030.pgn" |
| |
180 , '\0' |
| |
181 }, |
| |
182 { |
| |
183 #embed "data/game031.pgn" |
| |
184 , '\0' |
| |
185 }, |
| |
186 { |
| |
187 #embed "data/game032.pgn" |
| |
188 , '\0' |
| |
189 }, |
| |
190 { |
| |
191 #embed "data/game033.pgn" |
| |
192 , '\0' |
| |
193 }, |
| |
194 { |
| |
195 #embed "data/game034.pgn" |
| |
196 , '\0' |
| |
197 }, |
| |
198 { |
| |
199 #embed "data/game035.pgn" |
| |
200 , '\0' |
| |
201 }, |
| |
202 { |
| |
203 #embed "data/game036.pgn" |
| |
204 , '\0' |
| |
205 }, |
| |
206 { |
| |
207 #embed "data/game037.pgn" |
| |
208 , '\0' |
| |
209 }, |
| |
210 { |
| |
211 #embed "data/game038.pgn" |
| |
212 , '\0' |
| |
213 }, |
| |
214 { |
| |
215 #embed "data/game039.pgn" |
| |
216 , '\0' |
| |
217 }, |
| |
218 { |
| |
219 #embed "data/game040.pgn" |
| |
220 , '\0' |
| |
221 }, |
| |
222 { |
| |
223 #embed "data/game041.pgn" |
| |
224 , '\0' |
| |
225 }, |
| |
226 { |
| |
227 #embed "data/game042.pgn" |
| |
228 , '\0' |
| |
229 }, |
| |
230 { |
| |
231 #embed "data/game043.pgn" |
| |
232 , '\0' |
| |
233 }, |
| |
234 { |
| |
235 #embed "data/game044.pgn" |
| |
236 , '\0' |
| |
237 }, |
| |
238 { |
| |
239 #embed "data/game045.pgn" |
| |
240 , '\0' |
| |
241 }, |
| |
242 { |
| |
243 #embed "data/game046.pgn" |
| |
244 , '\0' |
| |
245 }, |
| |
246 { |
| |
247 #embed "data/game047.pgn" |
| |
248 , '\0' |
| |
249 }, |
| |
250 { |
| |
251 #embed "data/game048.pgn" |
| |
252 , '\0' |
| |
253 }, |
| |
254 { |
| |
255 #embed "data/game049.pgn" |
| |
256 , '\0' |
| |
257 }, |
| |
258 { |
| |
259 #embed "data/game050.pgn" |
| |
260 , '\0' |
| |
261 }, |
| |
262 { |
| |
263 #embed "data/game051.pgn" |
| |
264 , '\0' |
| |
265 }, |
| |
266 { |
| |
267 #embed "data/game052.pgn" |
| |
268 , '\0' |
| |
269 }, |
| |
270 { |
| |
271 #embed "data/game053.pgn" |
| |
272 , '\0' |
| |
273 }, |
| |
274 { |
| |
275 #embed "data/game054.pgn" |
| |
276 , '\0' |
| |
277 }, |
| |
278 { |
| |
279 #embed "data/game055.pgn" |
| |
280 , '\0' |
| |
281 }, |
| |
282 { |
| |
283 #embed "data/game056.pgn" |
| |
284 , '\0' |
| |
285 }, |
| |
286 { |
| |
287 #embed "data/game057.pgn" |
| |
288 , '\0' |
| |
289 }, |
| |
290 { |
| |
291 #embed "data/game058.pgn" |
| |
292 , '\0' |
| |
293 }, |
| |
294 { |
| |
295 #embed "data/game059.pgn" |
| |
296 , '\0' |
| |
297 }, |
| |
298 { |
| |
299 #embed "data/game060.pgn" |
| |
300 , '\0' |
| |
301 }, |
| |
302 { |
| |
303 #embed "data/game061.pgn" |
| |
304 , '\0' |
| |
305 }, |
| |
306 { |
| |
307 #embed "data/game062.pgn" |
| |
308 , '\0' |
| |
309 }, |
| |
310 { |
| |
311 #embed "data/game063.pgn" |
| |
312 , '\0' |
| |
313 }, |
| |
314 { |
| |
315 #embed "data/game064.pgn" |
| |
316 , '\0' |
| |
317 }, |
| |
318 { |
| |
319 #embed "data/game065.pgn" |
| |
320 , '\0' |
| |
321 }, |
| |
322 { |
| |
323 #embed "data/game066.pgn" |
| |
324 , '\0' |
| |
325 }, |
| |
326 { |
| |
327 #embed "data/game067.pgn" |
| |
328 , '\0' |
| |
329 }, |
| |
330 { |
| |
331 #embed "data/game068.pgn" |
| |
332 , '\0' |
| |
333 }, |
| |
334 { |
| |
335 #embed "data/game069.pgn" |
| |
336 , '\0' |
| |
337 }, |
| |
338 { |
| |
339 #embed "data/game070.pgn" |
| |
340 , '\0' |
| |
341 }, |
| |
342 { |
| |
343 #embed "data/game071.pgn" |
| |
344 , '\0' |
| |
345 }, |
| |
346 { |
| |
347 #embed "data/game072.pgn" |
| |
348 , '\0' |
| |
349 }, |
| |
350 { |
| |
351 #embed "data/game073.pgn" |
| |
352 , '\0' |
| |
353 }, |
| |
354 { |
| |
355 #embed "data/game074.pgn" |
| |
356 , '\0' |
| |
357 }, |
| |
358 { |
| |
359 #embed "data/game075.pgn" |
| |
360 , '\0' |
| |
361 }, |
| |
362 { |
| |
363 #embed "data/game076.pgn" |
| |
364 , '\0' |
| |
365 }, |
| |
366 { |
| |
367 #embed "data/game077.pgn" |
| |
368 , '\0' |
| |
369 }, |
| |
370 { |
| |
371 #embed "data/game078.pgn" |
| |
372 , '\0' |
| |
373 }, |
| |
374 { |
| |
375 #embed "data/game079.pgn" |
| |
376 , '\0' |
| |
377 }, |
| |
378 { |
| |
379 #embed "data/game080.pgn" |
| |
380 , '\0' |
| |
381 }, |
| |
382 { |
| |
383 #embed "data/game081.pgn" |
| |
384 , '\0' |
| |
385 }, |
| |
386 { |
| |
387 #embed "data/game082.pgn" |
| |
388 , '\0' |
| |
389 }, |
| |
390 { |
| |
391 #embed "data/game083.pgn" |
| |
392 , '\0' |
| |
393 }, |
| |
394 { |
| |
395 #embed "data/game084.pgn" |
| |
396 , '\0' |
| |
397 }, |
| |
398 { |
| |
399 #embed "data/game085.pgn" |
| |
400 , '\0' |
| |
401 }, |
| |
402 { |
| |
403 #embed "data/game086.pgn" |
| |
404 , '\0' |
| |
405 }, |
| |
406 { |
| |
407 #embed "data/game087.pgn" |
| |
408 , '\0' |
| |
409 }, |
| |
410 { |
| |
411 #embed "data/game088.pgn" |
| |
412 , '\0' |
| |
413 }, |
| |
414 { |
| |
415 #embed "data/game089.pgn" |
| |
416 , '\0' |
| |
417 }, |
| |
418 { |
| |
419 #embed "data/game090.pgn" |
| |
420 , '\0' |
| |
421 }, |
| |
422 { |
| |
423 #embed "data/game091.pgn" |
| |
424 , '\0' |
| |
425 }, |
| |
426 { |
| |
427 #embed "data/game092.pgn" |
| |
428 , '\0' |
| |
429 }, |
| |
430 { |
| |
431 #embed "data/game093.pgn" |
| |
432 , '\0' |
| |
433 }, |
| |
434 { |
| |
435 #embed "data/game094.pgn" |
| |
436 , '\0' |
| |
437 }, |
| |
438 { |
| |
439 #embed "data/game095.pgn" |
| |
440 , '\0' |
| |
441 }, |
| |
442 { |
| |
443 #embed "data/game096.pgn" |
| |
444 , '\0' |
| |
445 }, |
| |
446 { |
| |
447 #embed "data/game097.pgn" |
| |
448 , '\0' |
| |
449 }, |
| |
450 { |
| |
451 #embed "data/game098.pgn" |
| |
452 , '\0' |
| |
453 }, |
| |
454 { |
| |
455 #embed "data/game099.pgn" |
| |
456 , '\0' |
| |
457 }, |
| |
458 { |
| |
459 #embed "data/game100.pgn" |
| |
460 , '\0' |
| |
461 }, |
| |
462 { |
| |
463 #embed "data/game101.pgn" |
| |
464 , '\0' |
| |
465 }, |
| |
466 { |
| |
467 #embed "data/game102.pgn" |
| |
468 , '\0' |
| |
469 }, |
| |
470 { |
| |
471 #embed "data/game103.pgn" |
| |
472 , '\0' |
| |
473 }, |
| |
474 { |
| |
475 #embed "data/game104.pgn" |
| |
476 , '\0' |
| |
477 }, |
| |
478 { |
| |
479 #embed "data/game105.pgn" |
| |
480 , '\0' |
| |
481 }, |
| |
482 { |
| |
483 #embed "data/game106.pgn" |
| |
484 , '\0' |
| |
485 }, |
| |
486 { |
| |
487 #embed "data/game107.pgn" |
| |
488 , '\0' |
| |
489 }, |
| |
490 { |
| |
491 #embed "data/game108.pgn" |
| |
492 , '\0' |
| |
493 }, |
| |
494 { |
| |
495 #embed "data/game109.pgn" |
| |
496 , '\0' |
| |
497 }, |
| |
498 { |
| |
499 #embed "data/game110.pgn" |
| |
500 , '\0' |
| |
501 }, |
| |
502 { |
| |
503 #embed "data/game111.pgn" |
| |
504 , '\0' |
| |
505 }, |
| |
506 { |
| |
507 #embed "data/game112.pgn" |
| |
508 , '\0' |
| |
509 }, |
| |
510 { |
| |
511 #embed "data/game113.pgn" |
| |
512 , '\0' |
| |
513 }, |
| |
514 { |
| |
515 #embed "data/game114.pgn" |
| |
516 , '\0' |
| |
517 }, |
| |
518 { |
| |
519 #embed "data/game115.pgn" |
| |
520 , '\0' |
| |
521 }, |
| |
522 { |
| |
523 #embed "data/game116.pgn" |
| |
524 , '\0' |
| |
525 }, |
| |
526 { |
| |
527 #embed "data/game117.pgn" |
| |
528 , '\0' |
| |
529 }, |
| |
530 { |
| |
531 #embed "data/game118.pgn" |
| |
532 , '\0' |
| |
533 }, |
| |
534 { |
| |
535 #embed "data/game119.pgn" |
| |
536 , '\0' |
| |
537 }, |
| |
538 { |
| |
539 #embed "data/game120.pgn" |
| |
540 , '\0' |
| |
541 }, |
| |
542 { |
| |
543 #embed "data/game121.pgn" |
| |
544 , '\0' |
| |
545 }, |
| |
546 { |
| |
547 #embed "data/game122.pgn" |
| |
548 , '\0' |
| |
549 }, |
| |
550 { |
| |
551 #embed "data/game123.pgn" |
| |
552 , '\0' |
| |
553 }, |
| |
554 { |
| |
555 #embed "data/game124.pgn" |
| |
556 , '\0' |
| |
557 }, |
| |
558 { |
| |
559 #embed "data/game125.pgn" |
| |
560 , '\0' |
| |
561 }, |
| |
562 { |
| |
563 #embed "data/game126.pgn" |
| |
564 , '\0' |
| |
565 }, |
| |
566 { |
| |
567 #embed "data/game127.pgn" |
| |
568 , '\0' |
| |
569 }, |
| |
570 { |
| |
571 #embed "data/game128.pgn" |
| |
572 , '\0' |
| |
573 }, |
| |
574 { |
| |
575 #embed "data/game129.pgn" |
| |
576 , '\0' |
| |
577 }, |
| |
578 { |
| |
579 #embed "data/game130.pgn" |
| |
580 , '\0' |
| |
581 }, |
| |
582 { |
| |
583 #embed "data/game131.pgn" |
| |
584 , '\0' |
| |
585 }, |
| |
586 { |
| |
587 #embed "data/game132.pgn" |
| |
588 , '\0' |
| |
589 }, |
| |
590 { |
| |
591 #embed "data/game133.pgn" |
| |
592 , '\0' |
| |
593 }, |
| |
594 { |
| |
595 #embed "data/game134.pgn" |
| |
596 , '\0' |
| |
597 }, |
| |
598 { |
| |
599 #embed "data/game135.pgn" |
| |
600 , '\0' |
| |
601 }, |
| |
602 { |
| |
603 #embed "data/game136.pgn" |
| |
604 , '\0' |
| |
605 }, |
| |
606 { |
| |
607 #embed "data/game137.pgn" |
| |
608 , '\0' |
| |
609 }, |
| |
610 { |
| |
611 #embed "data/game138.pgn" |
| |
612 , '\0' |
| |
613 }, |
| |
614 { |
| |
615 #embed "data/game139.pgn" |
| |
616 , '\0' |
| |
617 }, |
| |
618 { |
| |
619 #embed "data/game140.pgn" |
| |
620 , '\0' |
| |
621 }, |
| |
622 { |
| |
623 #embed "data/game141.pgn" |
| |
624 , '\0' |
| |
625 }, |
| |
626 { |
| |
627 #embed "data/game142.pgn" |
| |
628 , '\0' |
| |
629 }, |
| |
630 { |
| |
631 #embed "data/game143.pgn" |
| |
632 , '\0' |
| |
633 }, |
| |
634 { |
| |
635 #embed "data/game144.pgn" |
| |
636 , '\0' |
| |
637 }, |
| |
638 { |
| |
639 #embed "data/game145.pgn" |
| |
640 , '\0' |
| |
641 }, |
| |
642 { |
| |
643 #embed "data/game146.pgn" |
| |
644 , '\0' |
| |
645 }, |
| |
646 { |
| |
647 #embed "data/game147.pgn" |
| |
648 , '\0' |
| |
649 }, |
| |
650 { |
| |
651 #embed "data/game148.pgn" |
| |
652 , '\0' |
| |
653 }, |
| |
654 { |
| |
655 #embed "data/game149.pgn" |
| |
656 , '\0' |
| |
657 }, |
| |
658 { |
| |
659 #embed "data/game150.pgn" |
| |
660 , '\0' |
| |
661 }, |
| |
662 }; |