Update codebase to remove clang warnings (and a couple of legit errors
[typhoon.git] / src / testdraw.c
1 /**
2
3 Copyright (c) Scott Gasch
4
5 Module Name:
6
7     testdraw.c
8
9 Abstract:
10
11     Test the draw detection code.
12
13 Author:
14
15     Scott Gasch ([email protected]) 30 Jun 2004
16
17 Revision History:
18
19     $Id: testdraw.c 345 2007-12-02 22:56:42Z scott $
20
21 **/
22
23 #ifdef TEST
24 #include "chess.h"
25
26 void
27 TestDraw(void)
28 {
29     SEARCHER_THREAD_CONTEXT *ctx;
30     POSITION pos;
31     MOVE mv;
32
33     ctx = SystemAllocateMemory(sizeof(SEARCHER_THREAD_CONTEXT));
34     ASSERT(ctx);
35
36     Trace("Testing draw detection code...\n");
37
38     (void)FenToPosition(&pos,
39               "rnbqkbnr/ppp2ppp/8/3pp3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 0");
40     InitializeSearcherContext(&pos, ctx);
41     if (TRUE == IsDraw(ctx))
42     {
43         UtilPanic(TESTCASE_FAILURE,
44                   NULL, "IsDraw", NULL, NULL,
45                   __FILE__, __LINE__);
46     }
47
48     mv.uMove = 0;
49     MakeMove(ctx, mv);
50     if (TRUE == IsDraw(ctx))
51     {
52         UtilPanic(TESTCASE_FAILURE,
53                   NULL, "IsDraw", NULL, NULL,
54                   __FILE__, __LINE__);
55     }
56     UnmakeMove(ctx, mv);
57     
58     mv.uMove = MAKE_MOVE(F1, D3, WHITE_BISHOP, 0, 0, 0);
59     MakeMove(ctx, mv);
60     if (TRUE == IsDraw(ctx))
61     {
62         UtilPanic(TESTCASE_FAILURE,
63                   NULL, "IsDraw", NULL, NULL,
64                   __FILE__, __LINE__);
65     }
66     if (ctx->sPosition.uFifty != 1)
67     {
68         UtilPanic(TESTCASE_FAILURE,
69                   NULL, "IsDraw", NULL, NULL,
70                   __FILE__, __LINE__);
71     }
72     mv.uMove = MAKE_MOVE(F8, D6, BLACK_BISHOP, 0, 0, 0);
73     MakeMove(ctx, mv);
74     if (TRUE == IsDraw(ctx))
75     {
76         UtilPanic(TESTCASE_FAILURE,
77                   NULL, "IsDraw", NULL, NULL,
78                   __FILE__, __LINE__);
79     }
80     if (ctx->sPosition.uFifty != 2)
81     {
82         UtilPanic(TESTCASE_FAILURE,
83                   NULL, "IsDraw", NULL, NULL,
84                   __FILE__, __LINE__);
85     }
86     mv.uMove = MAKE_MOVE(D3, F1, WHITE_BISHOP, 0, 0, 0);
87     MakeMove(ctx, mv);
88     if (TRUE == IsDraw(ctx))
89     {
90         UtilPanic(TESTCASE_FAILURE,
91                   NULL, "IsDraw", NULL, NULL,
92                   __FILE__, __LINE__);
93     }
94     if (ctx->sPosition.uFifty != 3)
95     {
96         UtilPanic(TESTCASE_FAILURE,
97                   NULL, "IsDraw", NULL, NULL,
98                   __FILE__, __LINE__);
99     }
100     mv.uMove = MAKE_MOVE(D6, F8, BLACK_BISHOP, 0, 0, 0);
101     MakeMove(ctx, mv);
102     if (FALSE == IsDraw(ctx))
103     {
104         UtilPanic(TESTCASE_FAILURE,
105                   NULL, "IsDraw", NULL, NULL,
106                   __FILE__, __LINE__);
107     }
108     if (ctx->sPosition.uFifty != 4)
109     {
110         UtilPanic(TESTCASE_FAILURE,
111                   NULL, "IsDraw", NULL, NULL,
112                   __FILE__, __LINE__);
113     }
114     UnmakeMove(ctx, mv);
115
116     // ====
117     
118     mv.uMove = MAKE_MOVE(E5, D4, BLACK_PAWN, WHITE_PAWN, 0, 0);
119     MakeMove(ctx, mv);
120     if (TRUE == IsDraw(ctx))
121     {
122         UtilPanic(TESTCASE_FAILURE,
123                   NULL, "IsDraw", NULL, NULL,
124                   __FILE__, __LINE__);
125     }
126     if (ctx->sPosition.uFifty != 0)
127     {
128         UtilPanic(TESTCASE_FAILURE,
129                   NULL, "IsDraw", NULL, NULL,
130                   __FILE__, __LINE__);
131     }
132     mv.uMove = MAKE_MOVE(E4, D5, WHITE_PAWN, BLACK_PAWN, 0, 0);
133     MakeMove(ctx, mv);
134     if (TRUE == IsDraw(ctx))
135     {
136         UtilPanic(TESTCASE_FAILURE,
137                   NULL, "IsDraw", NULL, NULL,
138                   __FILE__, __LINE__);
139     }
140     if (ctx->sPosition.uFifty != 0)
141     {
142         UtilPanic(TESTCASE_FAILURE,
143                   NULL, "IsDraw", NULL, NULL,
144                   __FILE__, __LINE__);
145     }
146
147     // ---
148     
149     mv.uMove = MAKE_MOVE(D6, C5, BLACK_BISHOP, 0, 0, 0);
150     MakeMove(ctx, mv);
151     if (TRUE == IsDraw(ctx))
152     {
153         UtilPanic(TESTCASE_FAILURE,
154                   NULL, "IsDraw", NULL, NULL,
155                   __FILE__, __LINE__);
156     }
157     if (ctx->sPosition.uFifty != 1)
158     {
159         UtilPanic(TESTCASE_FAILURE,
160                   NULL, "IsDraw", NULL, NULL,
161                   __FILE__, __LINE__);
162     }
163     mv.uMove = MAKE_MOVE(F1, E2, WHITE_BISHOP, 0, 0, 0);
164     MakeMove(ctx, mv);
165     if (TRUE == IsDraw(ctx))
166     {
167         UtilPanic(TESTCASE_FAILURE,
168                   NULL, "IsDraw", NULL, NULL,
169                   __FILE__, __LINE__);
170     }
171     if (ctx->sPosition.uFifty != 2)
172     {
173         UtilPanic(TESTCASE_FAILURE,
174                   NULL, "IsDraw", NULL, NULL,
175                   __FILE__, __LINE__);
176     }
177     mv.uMove = MAKE_MOVE(C5, D6, BLACK_BISHOP, 0, 0, 0);
178     MakeMove(ctx, mv);
179     if (TRUE == IsDraw(ctx))
180     {
181         UtilPanic(TESTCASE_FAILURE,
182                   NULL, "IsDraw", NULL, NULL,
183                   __FILE__, __LINE__);
184     }
185     if (ctx->sPosition.uFifty != 3)
186     {
187         UtilPanic(TESTCASE_FAILURE,
188                   NULL, "IsDraw", NULL, NULL,
189                   __FILE__, __LINE__);
190     }
191     mv.uMove = MAKE_MOVE(E2, F1, WHITE_BISHOP, 0, 0, 0);
192     MakeMove(ctx, mv);
193     if (FALSE == IsDraw(ctx))
194     {
195         UtilPanic(TESTCASE_FAILURE,
196                   NULL, "IsDraw", NULL, NULL,
197                   __FILE__, __LINE__);
198     }
199     if (ctx->sPosition.uFifty != 4)
200     {
201         UtilPanic(TESTCASE_FAILURE,
202                   NULL, "IsDraw", NULL, NULL,
203                   __FILE__, __LINE__);
204     }
205
206     //
207     // TODO: make some moves "officially" and test rolling back into
208     // the gamelist to detect a draw.
209     //
210     SystemFreeMemory(ctx);
211 }
212 #endif