diff options
| author | Scott Gasch <[email protected]> | 2016-06-01 18:58:58 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2016-06-01 18:58:58 -0700 |
| commit | 3fd43cd5fcb22bb65bf2a92a25d95d801b11c9e0 (patch) | |
| tree | 9b6443235d16ba17f094a1a1c7ae53d2bcb9267b /src/testdraw.c | |
Initial checkin for typhoon chess engine.
Diffstat (limited to 'src/testdraw.c')
| -rw-r--r-- | src/testdraw.c | 212 |
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 |
