1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/**
Copyright (c) Scott Gasch
Module Name:
testics.c
Abstract:
Test the ICS-style (d2d4) move parser.
Author:
Scott Gasch ([email protected]) 17 May 2004
Revision History:
$Id: testics.c 345 2007-12-02 22:56:42Z scott $
**/
#ifdef TEST
#include "chess.h"
void TestIcs(void)
/**
Routine description:
Test the ICS-style (d2d4) move parser.
Parameters:
void
Return value:
void
**/
{
typedef struct _TEST_ICS_MOVE
{
CHAR *szICS;
MOVE mv;
}
TEST_SAN_MOVE;
TEST_SAN_MOVE x[] =
{
{ "e1c1" , { MAKE_MOVE(E1, C1, WHITE_KING, 0, 0, MOVE_FLAG_SPECIAL) } },
{ "o-o-o" , { MAKE_MOVE(E1, C1, WHITE_KING, 0, 0, MOVE_FLAG_SPECIAL) } },
{ "a2xc4" , { MAKE_MOVE(A2, C4, WHITE_BISHOP, BLACK_PAWN, 0, 0) } },
{ "h2-h3" , { MAKE_MOVE(H2, H3, WHITE_PAWN, 0, 0, 0) } },
{ "h2h4" , { MAKE_MOVE(H2, H4, WHITE_PAWN, 0, 0, MOVE_FLAG_SPECIAL) } },
{ "h4h5" , { MAKE_MOVE(0, 0, 0, 0, 0, 0 ) } },
{ "b2c4" , { MAKE_MOVE(B2, C4, WHITE_KNIGHT, BLACK_PAWN, 0, 0) } },
{ "b6c4" , { MAKE_MOVE(B6, C4, WHITE_KNIGHT, BLACK_PAWN, 0, 0) } },
{ "b6d7" , { MAKE_MOVE(B6, D7, WHITE_KNIGHT, BLACK_BISHOP, 0, 0) } },
{ "h2xg3" , { MAKE_MOVE(H2, G3, WHITE_PAWN, BLACK_KNIGHT, 0, 0) } },
{ "d2d7++", { MAKE_MOVE(D2, D7, WHITE_QUEEN, BLACK_BISHOP, 0, 0) } },
{ "d2d7#" , { MAKE_MOVE(D2, D7, WHITE_QUEEN, BLACK_BISHOP, 0, 0) } },
{ "f5f6" , { MAKE_MOVE(F5, F6, WHITE_PAWN, 0, 0, 0) } },
{ "b7b8=Q", { MAKE_MOVE(B7, B8, WHITE_PAWN, 0, WHITE_QUEEN, MOVE_FLAG_SPECIAL) } },
{ "b7b8Q" , { MAKE_MOVE(B7, B8, WHITE_PAWN, 0, WHITE_QUEEN, MOVE_FLAG_SPECIAL) } },
{ "b7xa8N", { MAKE_MOVE(B7, A8, WHITE_PAWN, BLACK_ROOK, WHITE_KNIGHT, MOVE_FLAG_SPECIAL) } },
};
POSITION pos;
ULONG u;
MOVE mvICS;
Trace("Testing ICS parser code...\n");
for (u = 0;
u < ARRAY_LENGTH(x);
u++)
{
if (FALSE == FenToPosition(&pos,
"r2kr3/pP1b2nb/1N6/5P2/2p5/6n1/BN1QBP1P/R3K2R w KQ - 0 1"))
{
UtilPanic(INCONSISTENT_STATE,
NULL, NULL, NULL, NULL,
__FILE__, __LINE__);
}
mvICS = ParseMoveIcs(x[u].szICS, &pos);
if (mvICS.uMove != x[u].mv.uMove)
{
UtilPanic(TESTCASE_FAILURE,
NULL, "ParseMoveICS", NULL, NULL,
__FILE__, __LINE__);
}
}
}
#endif
|