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
95
96
97
|
/**
Copyright (c) Scott Gasch
Module Name:
testsan.c
Abstract:
Tests the SAN-style (Nbd5) move parser.
Author:
Scott Gasch ([email protected]) 13 May 2004
Revision History:
$Id: testsan.c 345 2007-12-02 22:56:42Z scott $
**/
#ifdef TEST
#include "chess.h"
void
TestSan(void)
/**
Routine description:
Tests the SAN-style (Nbd5) move parser.
Parameters:
void
Return value:
void
**/
{
typedef struct _TEST_SAN_MOVE
{
CHAR *szSAN;
MOVE mv;
}
TEST_SAN_MOVE;
TEST_SAN_MOVE x[] =
{
{ "b8=Q", { MAKE_MOVE(B7, B8, WHITE_PAWN, 0, WHITE_QUEEN, MOVE_FLAG_SPECIAL) } },
{ "b8Q", { MAKE_MOVE(B7, B8, WHITE_PAWN, 0, WHITE_QUEEN, MOVE_FLAG_SPECIAL) } },
{ "o-o", { MAKE_MOVE(0,0,0,0,0,0) } },
{ "0-0", { MAKE_MOVE(0,0,0,0,0,0) } },
{ "o-o-o", { MAKE_MOVE(E1, C1, WHITE_KING, 0, 0, MOVE_FLAG_SPECIAL) } },
{ "0-0-0", { MAKE_MOVE(E1, C1, WHITE_KING, 0, 0, MOVE_FLAG_SPECIAL) } },
{ "Bxc4", { MAKE_MOVE(A2, C4, WHITE_BISHOP, BLACK_PAWN, 0, 0) } },
{ "Bec4", { MAKE_MOVE(0,0,0,0,0,0) } },
{ "h3", { MAKE_MOVE(H2, H3, WHITE_PAWN, 0, 0, 0) } },
{ "h4", { MAKE_MOVE(H2, H4, WHITE_PAWN, 0, 0, MOVE_FLAG_SPECIAL) } },
{ "N2xc4", { MAKE_MOVE(B2, C4, WHITE_KNIGHT, BLACK_PAWN, 0, 0) } },
{ "Nb6c4", { MAKE_MOVE(B6, C4, WHITE_KNIGHT, BLACK_PAWN, 0, 0) } },
{ "Nxd7", { MAKE_MOVE(B6, D7, WHITE_KNIGHT, BLACK_BISHOP, 0, 0) } },
{ "hxg3", { MAKE_MOVE(H2, G3, WHITE_PAWN, BLACK_KNIGHT, 0, 0) } },
{ "Qxd7++",{ MAKE_MOVE(D2, D7, WHITE_QUEEN, BLACK_BISHOP, 0, 0) } },
{ "Qxd7#" ,{ MAKE_MOVE(D2, D7, WHITE_QUEEN, BLACK_BISHOP, 0, 0) } },
{ "f6", { MAKE_MOVE(F5, F6, WHITE_PAWN, 0, 0, 0) } },
{ "bxa8=N",{ MAKE_MOVE(B7, A8, WHITE_PAWN, BLACK_ROOK, WHITE_KNIGHT, MOVE_FLAG_SPECIAL) } },
};
POSITION pos;
ULONG u;
MOVE mvSAN;
Trace("Testing SAN 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__);
}
mvSAN = ParseMoveSan(x[u].szSAN, &pos);
if (mvSAN.uMove != x[u].mv.uMove)
{
UtilPanic(TESTCASE_FAILURE,
NULL, "ParseMoveSan", NULL, NULL,
__FILE__, __LINE__);
}
}
}
#endif
|