summaryrefslogtreecommitdiff
path: root/src/testsan.c
blob: 37010be9b344e6ddbce05b4ee7544cffe2f3e01f (plain)
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