summaryrefslogtreecommitdiff
path: root/src/testdraw.c
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2016-06-01 18:58:58 -0700
committerScott Gasch <[email protected]>2016-06-01 18:58:58 -0700
commit3fd43cd5fcb22bb65bf2a92a25d95d801b11c9e0 (patch)
tree9b6443235d16ba17f094a1a1c7ae53d2bcb9267b /src/testdraw.c
Initial checkin for typhoon chess engine.
Diffstat (limited to 'src/testdraw.c')
-rw-r--r--src/testdraw.c212
1 files changed, 212 insertions, 0 deletions
diff --git a/src/testdraw.c b/src/testdraw.c
new file mode 100644
index 0000000..5e48c0c
--- /dev/null
+++ b/src/testdraw.c
@@ -0,0 +1,212 @@
+/**
+
+Copyright (c) Scott Gasch
+
+Module Name:
+
+ testdraw.c
+
+Abstract:
+
+ Test the draw detection code.
+
+Author:
+
+ Scott Gasch ([email protected]) 30 Jun 2004
+
+Revision History:
+
+ $Id: testdraw.c 345 2007-12-02 22:56:42Z scott $
+
+**/
+
+#ifdef TEST
+#include "chess.h"
+
+void
+TestDraw(void)
+{
+ SEARCHER_THREAD_CONTEXT *ctx;
+ POSITION pos;
+ MOVE mv;
+
+ ctx = SystemAllocateMemory(sizeof(SEARCHER_THREAD_CONTEXT));
+ ASSERT(ctx);
+
+ Trace("Testing draw detection code...\n");
+
+ (void)FenToPosition(&pos,
+ "rnbqkbnr/ppp2ppp/8/3pp3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 0");
+ InitializeSearcherContext(&pos, ctx);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+
+ mv.uMove = 0;
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ UnmakeMove(ctx, mv);
+
+ mv.uMove = MAKE_MOVE(F1, D3, WHITE_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 1)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(F8, D6, BLACK_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 2)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(D3, F1, WHITE_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 3)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(D6, F8, BLACK_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (FALSE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 4)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ UnmakeMove(ctx, mv);
+
+ // ====
+
+ mv.uMove = MAKE_MOVE(E5, D4, BLACK_PAWN, WHITE_PAWN, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 0)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(E4, D5, WHITE_PAWN, BLACK_PAWN, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 0)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+
+ // ---
+
+ mv.uMove = MAKE_MOVE(D6, C5, BLACK_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 1)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(F1, E2, WHITE_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 2)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(C5, D6, BLACK_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (TRUE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 3)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ mv.uMove = MAKE_MOVE(E2, F1, WHITE_BISHOP, 0, 0, 0);
+ MakeMove(ctx, mv);
+ if (FALSE == IsDraw(ctx))
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+ if (ctx->sPosition.uFifty != 4)
+ {
+ UtilPanic(TESTCASE_FAILURE,
+ NULL, "IsDraw", NULL, NULL,
+ __FILE__, __LINE__);
+ }
+
+ //
+ // TODO: make some moves "officially" and test rolling back into
+ // the gamelist to detect a draw.
+ //
+ SystemFreeMemory(ctx);
+}
+#endif