summaryrefslogtreecommitdiff
path: root/src/testics.c
blob: b82450bc2efc39a2643b532d243d5cf8a6bab3f7 (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
/**

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