3 Copyright (c) Scott Gasch
11 Test the draw detection code.
19 $Id: testdraw.c 345 2007-12-02 22:56:42Z scott $
29 SEARCHER_THREAD_CONTEXT *ctx;
33 ctx = SystemAllocateMemory(sizeof(SEARCHER_THREAD_CONTEXT));
36 Trace("Testing draw detection code...\n");
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))
43 UtilPanic(TESTCASE_FAILURE,
44 NULL, "IsDraw", NULL, NULL,
50 if (TRUE == IsDraw(ctx))
52 UtilPanic(TESTCASE_FAILURE,
53 NULL, "IsDraw", NULL, NULL,
58 mv.uMove = MAKE_MOVE(F1, D3, WHITE_BISHOP, 0, 0, 0);
60 if (TRUE == IsDraw(ctx))
62 UtilPanic(TESTCASE_FAILURE,
63 NULL, "IsDraw", NULL, NULL,
66 if (ctx->sPosition.uFifty != 1)
68 UtilPanic(TESTCASE_FAILURE,
69 NULL, "IsDraw", NULL, NULL,
72 mv.uMove = MAKE_MOVE(F8, D6, BLACK_BISHOP, 0, 0, 0);
74 if (TRUE == IsDraw(ctx))
76 UtilPanic(TESTCASE_FAILURE,
77 NULL, "IsDraw", NULL, NULL,
80 if (ctx->sPosition.uFifty != 2)
82 UtilPanic(TESTCASE_FAILURE,
83 NULL, "IsDraw", NULL, NULL,
86 mv.uMove = MAKE_MOVE(D3, F1, WHITE_BISHOP, 0, 0, 0);
88 if (TRUE == IsDraw(ctx))
90 UtilPanic(TESTCASE_FAILURE,
91 NULL, "IsDraw", NULL, NULL,
94 if (ctx->sPosition.uFifty != 3)
96 UtilPanic(TESTCASE_FAILURE,
97 NULL, "IsDraw", NULL, NULL,
100 mv.uMove = MAKE_MOVE(D6, F8, BLACK_BISHOP, 0, 0, 0);
102 if (FALSE == IsDraw(ctx))
104 UtilPanic(TESTCASE_FAILURE,
105 NULL, "IsDraw", NULL, NULL,
108 if (ctx->sPosition.uFifty != 4)
110 UtilPanic(TESTCASE_FAILURE,
111 NULL, "IsDraw", NULL, NULL,
118 mv.uMove = MAKE_MOVE(E5, D4, BLACK_PAWN, WHITE_PAWN, 0, 0);
120 if (TRUE == IsDraw(ctx))
122 UtilPanic(TESTCASE_FAILURE,
123 NULL, "IsDraw", NULL, NULL,
126 if (ctx->sPosition.uFifty != 0)
128 UtilPanic(TESTCASE_FAILURE,
129 NULL, "IsDraw", NULL, NULL,
132 mv.uMove = MAKE_MOVE(E4, D5, WHITE_PAWN, BLACK_PAWN, 0, 0);
134 if (TRUE == IsDraw(ctx))
136 UtilPanic(TESTCASE_FAILURE,
137 NULL, "IsDraw", NULL, NULL,
140 if (ctx->sPosition.uFifty != 0)
142 UtilPanic(TESTCASE_FAILURE,
143 NULL, "IsDraw", NULL, NULL,
149 mv.uMove = MAKE_MOVE(D6, C5, BLACK_BISHOP, 0, 0, 0);
151 if (TRUE == IsDraw(ctx))
153 UtilPanic(TESTCASE_FAILURE,
154 NULL, "IsDraw", NULL, NULL,
157 if (ctx->sPosition.uFifty != 1)
159 UtilPanic(TESTCASE_FAILURE,
160 NULL, "IsDraw", NULL, NULL,
163 mv.uMove = MAKE_MOVE(F1, E2, WHITE_BISHOP, 0, 0, 0);
165 if (TRUE == IsDraw(ctx))
167 UtilPanic(TESTCASE_FAILURE,
168 NULL, "IsDraw", NULL, NULL,
171 if (ctx->sPosition.uFifty != 2)
173 UtilPanic(TESTCASE_FAILURE,
174 NULL, "IsDraw", NULL, NULL,
177 mv.uMove = MAKE_MOVE(C5, D6, BLACK_BISHOP, 0, 0, 0);
179 if (TRUE == IsDraw(ctx))
181 UtilPanic(TESTCASE_FAILURE,
182 NULL, "IsDraw", NULL, NULL,
185 if (ctx->sPosition.uFifty != 3)
187 UtilPanic(TESTCASE_FAILURE,
188 NULL, "IsDraw", NULL, NULL,
191 mv.uMove = MAKE_MOVE(E2, F1, WHITE_BISHOP, 0, 0, 0);
193 if (FALSE == IsDraw(ctx))
195 UtilPanic(TESTCASE_FAILURE,
196 NULL, "IsDraw", NULL, NULL,
199 if (ctx->sPosition.uFifty != 4)
201 UtilPanic(TESTCASE_FAILURE,
202 NULL, "IsDraw", NULL, NULL,
207 // TODO: make some moves "officially" and test rolling back into
208 // the gamelist to detect a draw.
210 SystemFreeMemory(ctx);