From 75e804ef6f33cb0a12182988d408b9281c89637f Mon Sep 17 00:00:00 2001 From: TiynGER Date: Tue, 15 Dec 2020 23:31:42 +0100 Subject: [PATCH] chess/game: claimable draw at 50-Move-Rule added --- README.md | 5 - chess.nim | 30 +++-- test.nim | 340 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 361 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f8ef19f..b7163ef 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,6 @@ ychess is a chess implementation written in nim. A chess engine is planned. -## Todo - -- draw by - - 50-move rule - ## Usage Simply download the code and run `nim c -r game.nim`. diff --git a/chess.nim b/chess.nim index 2ce5cfe..7f8d2e6 100644 --- a/chess.nim +++ b/chess.nim @@ -22,6 +22,7 @@ type toMove*: Color previousBoard*: seq[Board] previousCastleRights*: seq[CastleRights] + fiftyMoveCounter: int ## Move as object Move* = object start: int @@ -231,7 +232,7 @@ proc initMoved(): Moved = proc initGame*(): Game = ## Create and return a Game object. let game = Game(board: initBoard(), moved: initMoved(), - to_move: Color.White, previousBoard: @[], previousCastleRights: @[]) + to_move: Color.White, previousBoard: @[], previousCastleRights: @[], fiftyMoveCounter: 0) return game proc initGame*(board: array[0..63, int], color: Color): Game = @@ -244,7 +245,7 @@ proc initGame*(board: array[0..63, int], color: Color): Game = same_piece = (board[ind] != compare[ind]) moved.setField(ind, same_piece) let game = Game(board: board, moved: moved, - to_move: color, previousBoard: @[], previousCastleRights: @[]) + to_move: color, previousBoard: @[], previousCastleRights: @[], fiftyMoveCounter: 0) return game proc getMove*(start: int, dest: int, prom: int, color: Color): Move = @@ -745,13 +746,17 @@ proc checkedMove*(game: var Game, move: Move): bool {.discardable.} = return false var sequence = newSeq[Move]() let piece = game.board.getField(start) - var create_en_passant = false - var captured_en_passant = false + var createEnPassant = false + var capturedEnPassant = false + var fiftyMoveRuleReset = false var move: Move move = getMove(start, dest, color) if (piece == PawnID * ord(color)): - create_en_passant = dest in game.genPawnDoubleDests(start, color) - captured_en_passant = (game.board.getField(dest) == -1 * ord(color) * EnPassantID) + createEnPassant = dest in game.genPawnDoubleDests(start, color) + capturedEnPassant = (game.board.getField(dest) == -1 * ord(color) * EnPassantID) + fiftyMoveRuleReset = true + if (game.board.getField(move.dest) != 0): + fiftyMoveRuleReset = true sequence.add(game.genLegalMoves(start, color)) if (move in sequence): game.board.removeEnPassant(color) @@ -762,9 +767,9 @@ proc checkedMove*(game: var Game, move: Move): bool {.discardable.} = else: game.uncheckedMove(start, dest) game.toMove = Color(ord(game.toMove)*(-1)) - if create_en_passant: + if createEnPassant: game.board.setField(dest-(N*ord(color)), EnPassantID * ord(color)) - if captured_en_passant: + if capturedEnPassant: game.board.setField(dest-(N*ord(color)), 0) if ((90 < dest and dest < 99) or (20 < dest and dest < 29)) and game.board.getField(dest) == PawnID * ord(color): @@ -773,6 +778,9 @@ proc checkedMove*(game: var Game, move: Move): bool {.discardable.} = var prevCastle = game.previousCastleRights game.previousBoard.add(game.board) game.previousCastleRights.add(game.moved.genCastleRights()) + game.fiftyMoveCounter = game.fiftyMoveCounter + 1 + if fiftyMoveRuleReset: + game.fiftyMoveCounter = 0 return true except IndexDefect, ValueError: return false @@ -796,9 +804,13 @@ proc threeMoveRep(game: Game): bool = reps = reps + 1 return reps >= 3 +proc fiftyMoveRule(game: Game): bool = + ## Checks if a draw with the fifty move rule is available in a `game`. + return game.fiftyMoveCounter >= 100 + proc isDrawClaimable*(game: Game): bool = ## Checks if a draw is claimable by either player. - return game.threeMoveRep() + return game.threeMoveRep() or game.fiftyMoveRule() proc isStalemate*(game: Game, color: Color): bool = ## Checks if a player of a given `color` in a `game` is stalemate. diff --git a/test.nim b/test.nim index 6c29cd5..c0628a4 100644 --- a/test.nim +++ b/test.nim @@ -268,6 +268,7 @@ testSuite GameTest of TestSuite: self.check(not self.game.isStalemate(Color.Black)) self.check(not self.game.isStalemate(Color.White)) + ## Check isDrawClaimable method testIsDrawClaimableThreeFoldRepTrue() = self.setup() self.game.checkedMove(notationToMove("g1f3", Color.White)) @@ -293,6 +294,345 @@ testSuite GameTest of TestSuite: self.game.checkedMove(notationToMove("f6g8", Color.Black)) self.check(not self.game.isDrawClaimable()) + method testIsDrawClaimableFiftyMoveRuleTrue() = + self.game = initGame([ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, BRook, + 0, 0, 0, 0, 0, 0, 0, 0, + WBishop, 0, 0, 0, 0, 0, 0, 0, + 0, 0, WKing, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, WRook, 0, + 0, 0, 0, BKing, 0, 0, 0, 0 + ], Color.Black) + self.game.checkedMove(notationToMove("a2a5", Color.Black)) + self.game.checkedMove(notationToMove("f5g6", Color.White)) + self.game.checkedMove(notationToMove("a5e5", Color.Black)) + self.game.checkedMove(notationToMove("h4f6", Color.White)) + self.game.checkedMove(notationToMove("e5e2", Color.Black)) + self.game.checkedMove(notationToMove("b7a7", Color.White)) + self.game.checkedMove(notationToMove("e2e1", Color.Black)) + self.game.checkedMove(notationToMove("g6f5", Color.White)) + self.game.checkedMove(notationToMove("e1b1", Color.Black)) + self.game.checkedMove(notationToMove("f6d4", Color.White)) + self.game.checkedMove(notationToMove("e8d8", Color.Black)) + self.game.checkedMove(notationToMove("f5e6", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("d4e5", Color.White)) + self.game.checkedMove(notationToMove("b1c1", Color.Black)) + self.game.checkedMove(notationToMove("a7f7", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("c2c1", Color.Black)) + self.game.checkedMove(notationToMove("e6d5", Color.White)) + self.game.checkedMove(notationToMove("c1a1", Color.Black)) + self.game.checkedMove(notationToMove("f7h7", Color.White)) + self.game.checkedMove(notationToMove("a1a2", Color.Black)) + self.game.checkedMove(notationToMove("d6f4", Color.White)) + self.game.checkedMove(notationToMove("a2a6", Color.Black)) + self.game.checkedMove(notationToMove("f4e5", Color.White)) + self.game.checkedMove(notationToMove("a6b6", Color.Black)) + self.game.checkedMove(notationToMove("h7c7", Color.White)) + self.game.checkedMove(notationToMove("c8d8", Color.Black)) + self.game.checkedMove(notationToMove("c7a7", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("a7c7", Color.White)) + self.game.checkedMove(notationToMove("c8d8", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("b6b1", Color.Black)) + self.game.checkedMove(notationToMove("c7a7", Color.White)) + self.game.checkedMove(notationToMove("b1e1", Color.Black)) + self.game.checkedMove(notationToMove("d6e5", Color.White)) + self.game.checkedMove(notationToMove("e1d1", Color.Black)) + self.game.checkedMove(notationToMove("d5e6", Color.White)) + self.game.checkedMove(notationToMove("d1c1", Color.Black)) + self.game.checkedMove(notationToMove("a7b7", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("b7b3", Color.White)) + self.game.checkedMove(notationToMove("c2c6", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("c6c1", Color.Black)) + self.game.checkedMove(notationToMove("b3h3", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("h3h8", Color.White)) + self.game.checkedMove(notationToMove("c8b7", Color.Black)) + self.game.checkedMove(notationToMove("h8b8", Color.White)) + self.game.checkedMove(notationToMove("b7a7", Color.Black)) + self.game.checkedMove(notationToMove("b8b4", Color.White)) + self.game.checkedMove(notationToMove("c1d1", Color.Black)) + self.game.checkedMove(notationToMove("e6d7", Color.White)) + self.game.checkedMove(notationToMove("d1c1", Color.Black)) + self.game.checkedMove(notationToMove("d6c7", Color.White)) + self.game.checkedMove(notationToMove("c1h1", Color.Black)) + self.game.checkedMove(notationToMove("c7f4", Color.White)) + self.game.checkedMove(notationToMove("h1h3", Color.Black)) + self.game.checkedMove(notationToMove("f4e5", Color.White)) + self.game.checkedMove(notationToMove("h3h1", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("h1c1", Color.Black)) + self.game.checkedMove(notationToMove("d6f4", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("f4c7", Color.White)) + self.game.checkedMove(notationToMove("c2c1", Color.Black)) + self.game.checkedMove(notationToMove("b4b5", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("b5b6", Color.White)) + self.game.checkedMove(notationToMove("c2g2", Color.Black)) + self.game.checkedMove(notationToMove("b6b3", Color.White)) + self.game.checkedMove(notationToMove("g2c2", Color.Black)) + self.game.checkedMove(notationToMove("b3b1", Color.White)) + self.game.checkedMove(notationToMove("c2c3", Color.Black)) + self.game.checkedMove(notationToMove("c7e5", Color.White)) + self.game.checkedMove(notationToMove("c3c2", Color.Black)) + self.game.checkedMove(notationToMove("d7d6", Color.White)) + self.game.checkedMove(notationToMove("c2d2", Color.Black)) + self.game.checkedMove(notationToMove("d6c6", Color.White)) + self.game.checkedMove(notationToMove("d2c2", Color.Black)) + self.game.checkedMove(notationToMove("c6d5", Color.White)) + self.game.checkedMove(notationToMove("c2g2", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("g2g5", Color.Black)) + self.game.checkedMove(notationToMove("d5c6", Color.White)) + self.game.checkedMove(notationToMove("a7a6", Color.Black)) + self.game.checkedMove(notationToMove("b1b8", Color.White)) + self.game.checkedMove(notationToMove("g5g7", Color.Black)) + self.game.checkedMove(notationToMove("b8b6", Color.White)) + self.game.checkedMove(notationToMove("a6a7", Color.Black)) + self.game.checkedMove(notationToMove("b6b1", Color.White)) + self.game.checkedMove(notationToMove("a7a8", Color.Black)) + self.game.checkedMove(notationToMove("b1e1", Color.White)) + self.game.checkedMove(notationToMove("g7b7", Color.Black)) + self.game.checkedMove(notationToMove("e1e8", Color.White)) + self.game.checkedMove(notationToMove("a8a7", Color.Black)) + self.game.checkedMove(notationToMove("d6c5", Color.White)) + self.check(self.game.isDrawClaimable()) + + method testIsDrawClaimableFiftyMoveRuleFalseNinetyFour() = + self.game = initGame([ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, BRook, + 0, 0, 0, 0, 0, 0, 0, 0, + WBishop, 0, 0, 0, 0, 0, 0, 0, + 0, 0, WKing, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, WRook, 0, + 0, 0, 0, BKing, 0, 0, 0, 0 + ], Color.Black) + self.game.checkedMove(notationToMove("a2a5", Color.Black)) + self.game.checkedMove(notationToMove("f5g6", Color.White)) + self.game.checkedMove(notationToMove("a5e5", Color.Black)) + self.game.checkedMove(notationToMove("h4f6", Color.White)) + self.game.checkedMove(notationToMove("e5e2", Color.Black)) + self.game.checkedMove(notationToMove("b7a7", Color.White)) + self.game.checkedMove(notationToMove("e2e1", Color.Black)) + self.game.checkedMove(notationToMove("g6f5", Color.White)) + self.game.checkedMove(notationToMove("e1b1", Color.Black)) + self.game.checkedMove(notationToMove("f6d4", Color.White)) + self.game.checkedMove(notationToMove("e8d8", Color.Black)) + self.game.checkedMove(notationToMove("f5e6", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("d4e5", Color.White)) + self.game.checkedMove(notationToMove("b1c1", Color.Black)) + self.game.checkedMove(notationToMove("a7f7", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("c2c1", Color.Black)) + self.game.checkedMove(notationToMove("e6d5", Color.White)) + self.game.checkedMove(notationToMove("c1a1", Color.Black)) + self.game.checkedMove(notationToMove("f7h7", Color.White)) + self.game.checkedMove(notationToMove("a1a2", Color.Black)) + self.game.checkedMove(notationToMove("d6f4", Color.White)) + self.game.checkedMove(notationToMove("a2a6", Color.Black)) + self.game.checkedMove(notationToMove("f4e5", Color.White)) + self.game.checkedMove(notationToMove("a6b6", Color.Black)) + self.game.checkedMove(notationToMove("h7c7", Color.White)) + self.game.checkedMove(notationToMove("c8d8", Color.Black)) + self.game.checkedMove(notationToMove("c7a7", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("a7c7", Color.White)) + self.game.checkedMove(notationToMove("c8d8", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("b6b1", Color.Black)) + self.game.checkedMove(notationToMove("c7a7", Color.White)) + self.game.checkedMove(notationToMove("b1e1", Color.Black)) + self.game.checkedMove(notationToMove("d6e5", Color.White)) + self.game.checkedMove(notationToMove("e1d1", Color.Black)) + self.game.checkedMove(notationToMove("d5e6", Color.White)) + self.game.checkedMove(notationToMove("d1c1", Color.Black)) + self.game.checkedMove(notationToMove("a7b7", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("b7b3", Color.White)) + self.game.checkedMove(notationToMove("c2c6", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("c6c1", Color.Black)) + self.game.checkedMove(notationToMove("b3h3", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("h3h8", Color.White)) + self.game.checkedMove(notationToMove("c8b7", Color.Black)) + self.game.checkedMove(notationToMove("h8b8", Color.White)) + self.game.checkedMove(notationToMove("b7a7", Color.Black)) + self.game.checkedMove(notationToMove("b8b4", Color.White)) + self.game.checkedMove(notationToMove("c1d1", Color.Black)) + self.game.checkedMove(notationToMove("e6d7", Color.White)) + self.game.checkedMove(notationToMove("d1c1", Color.Black)) + self.game.checkedMove(notationToMove("d6c7", Color.White)) + self.game.checkedMove(notationToMove("c1h1", Color.Black)) + self.game.checkedMove(notationToMove("c7f4", Color.White)) + self.game.checkedMove(notationToMove("h1h3", Color.Black)) + self.game.checkedMove(notationToMove("f4e5", Color.White)) + self.game.checkedMove(notationToMove("h3h1", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("h1c1", Color.Black)) + self.game.checkedMove(notationToMove("d6f4", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("f4c7", Color.White)) + self.game.checkedMove(notationToMove("c2c1", Color.Black)) + self.game.checkedMove(notationToMove("b4b5", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("b5b6", Color.White)) + self.game.checkedMove(notationToMove("c2g2", Color.Black)) + self.game.checkedMove(notationToMove("b6b3", Color.White)) + self.game.checkedMove(notationToMove("g2c2", Color.Black)) + self.game.checkedMove(notationToMove("b3b1", Color.White)) + self.game.checkedMove(notationToMove("c2c3", Color.Black)) + self.game.checkedMove(notationToMove("c7e5", Color.White)) + self.game.checkedMove(notationToMove("c3c2", Color.Black)) + self.game.checkedMove(notationToMove("d7d6", Color.White)) + self.game.checkedMove(notationToMove("c2d2", Color.Black)) + self.game.checkedMove(notationToMove("d6c6", Color.White)) + self.game.checkedMove(notationToMove("d2c2", Color.Black)) + self.game.checkedMove(notationToMove("c6d5", Color.White)) + self.game.checkedMove(notationToMove("c2g2", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("g2g5", Color.Black)) + self.game.checkedMove(notationToMove("d5c6", Color.White)) + self.game.checkedMove(notationToMove("a7a6", Color.Black)) + self.game.checkedMove(notationToMove("b1b8", Color.White)) + self.game.checkedMove(notationToMove("g5g7", Color.Black)) + self.game.checkedMove(notationToMove("b8b6", Color.White)) + self.game.checkedMove(notationToMove("a6a7", Color.Black)) + self.game.checkedMove(notationToMove("b6b1", Color.White)) + self.game.checkedMove(notationToMove("a7a8", Color.Black)) + self.game.checkedMove(notationToMove("b1e1", Color.White)) + self.game.checkedMove(notationToMove("g7b7", Color.Black)) + self.game.checkedMove(notationToMove("e1e8", Color.White)) + self.game.checkedMove(notationToMove("a8a7", Color.Black)) + self.game.checkedMove(notationToMove("d6c5", Color.White)) + self.check(self.game.isDrawClaimable()) + + method testIsDrawClaimableFiftyMoveRuleFalseCapture() = + self.game = initGame([ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, BRook, + 0, 0, 0, 0, 0, 0, 0, 0, + WBishop, 0, 0, 0, 0, 0, 0, 0, + 0, 0, WKing, 0, 0, 0, 0, 0, + 0, 0, BPawn, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, WRook, 0, + 0, 0, 0, BKing, 0, 0, 0, 0 + ], Color.Black) + self.game.checkedMove(notationToMove("a2a5", Color.Black)) + self.game.checkedMove(notationToMove("f5g6", Color.White)) + self.game.checkedMove(notationToMove("a5e5", Color.Black)) + self.game.checkedMove(notationToMove("h4f6", Color.White)) + self.game.checkedMove(notationToMove("e5e2", Color.Black)) + self.game.checkedMove(notationToMove("b7a7", Color.White)) + self.game.checkedMove(notationToMove("e2e1", Color.Black)) + self.game.checkedMove(notationToMove("g6f5", Color.White)) + self.game.checkedMove(notationToMove("e1b1", Color.Black)) + self.game.checkedMove(notationToMove("f6d4", Color.White)) + self.game.checkedMove(notationToMove("e8d8", Color.Black)) + self.game.checkedMove(notationToMove("f5e6", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("d4e5", Color.White)) + self.game.checkedMove(notationToMove("b1c1", Color.Black)) + self.game.checkedMove(notationToMove("a7f7", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("c2c1", Color.Black)) + self.game.checkedMove(notationToMove("e6d5", Color.White)) + self.game.checkedMove(notationToMove("c1a1", Color.Black)) + self.game.checkedMove(notationToMove("f7h7", Color.White)) + self.game.checkedMove(notationToMove("a1a2", Color.Black)) + self.game.checkedMove(notationToMove("d6f4", Color.White)) + self.game.checkedMove(notationToMove("a2a6", Color.Black)) + self.game.checkedMove(notationToMove("f4e5", Color.White)) + self.game.checkedMove(notationToMove("a6b6", Color.Black)) + self.game.checkedMove(notationToMove("h7c7", Color.White)) + self.game.checkedMove(notationToMove("c8d8", Color.Black)) + self.game.checkedMove(notationToMove("c7a7", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("a7c7", Color.White)) + self.game.checkedMove(notationToMove("c8d8", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("b6b1", Color.Black)) + self.game.checkedMove(notationToMove("c7a7", Color.White)) + self.game.checkedMove(notationToMove("b1e1", Color.Black)) + self.game.checkedMove(notationToMove("d6e5", Color.White)) + self.game.checkedMove(notationToMove("e1d1", Color.Black)) + self.game.checkedMove(notationToMove("d5e6", Color.White)) + self.game.checkedMove(notationToMove("d1c1", Color.Black)) + self.game.checkedMove(notationToMove("a7b7", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("b7b3", Color.White)) + self.game.checkedMove(notationToMove("c2c6", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("c6c1", Color.Black)) + self.game.checkedMove(notationToMove("b3h3", Color.White)) + self.game.checkedMove(notationToMove("d8c8", Color.Black)) + self.game.checkedMove(notationToMove("h3h8", Color.White)) + self.game.checkedMove(notationToMove("c8b7", Color.Black)) + self.game.checkedMove(notationToMove("h8b8", Color.White)) + self.game.checkedMove(notationToMove("b7a7", Color.Black)) + self.game.checkedMove(notationToMove("b8b4", Color.White)) + self.game.checkedMove(notationToMove("c1d1", Color.Black)) + self.game.checkedMove(notationToMove("e6d7", Color.White)) + self.game.checkedMove(notationToMove("d1c1", Color.Black)) + self.game.checkedMove(notationToMove("d6c7", Color.White)) + self.game.checkedMove(notationToMove("c1h1", Color.Black)) + self.game.checkedMove(notationToMove("c7f4", Color.White)) + self.game.checkedMove(notationToMove("h1h3", Color.Black)) + self.game.checkedMove(notationToMove("f4e5", Color.White)) + self.game.checkedMove(notationToMove("h3h1", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("h1c1", Color.Black)) + self.game.checkedMove(notationToMove("d6f4", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("f4c7", Color.White)) + self.game.checkedMove(notationToMove("c2c1", Color.Black)) + self.game.checkedMove(notationToMove("b4b5", Color.White)) + self.game.checkedMove(notationToMove("c1c2", Color.Black)) + self.game.checkedMove(notationToMove("b5b6", Color.White)) + self.game.checkedMove(notationToMove("c2g2", Color.Black)) + self.game.checkedMove(notationToMove("b6b3", Color.White)) + self.game.checkedMove(notationToMove("g2c2", Color.Black)) + self.game.checkedMove(notationToMove("b3b1", Color.White)) + self.game.checkedMove(notationToMove("c2c3", Color.Black)) + self.game.checkedMove(notationToMove("c7e5", Color.White)) + self.game.checkedMove(notationToMove("c3c2", Color.Black)) + self.game.checkedMove(notationToMove("d7d6", Color.White)) + self.game.checkedMove(notationToMove("c2d2", Color.Black)) + self.game.checkedMove(notationToMove("d6c6", Color.White)) + self.game.checkedMove(notationToMove("d2c2", Color.Black)) + self.game.checkedMove(notationToMove("c6d5", Color.White)) + self.game.checkedMove(notationToMove("c2g2", Color.Black)) + self.game.checkedMove(notationToMove("e5d6", Color.White)) + self.game.checkedMove(notationToMove("g2g5", Color.Black)) + self.game.checkedMove(notationToMove("d5c6", Color.White)) + self.game.checkedMove(notationToMove("a7a6", Color.Black)) + self.game.checkedMove(notationToMove("b1b8", Color.White)) + self.game.checkedMove(notationToMove("g5g7", Color.Black)) + self.game.checkedMove(notationToMove("b8b6", Color.White)) + self.game.checkedMove(notationToMove("a6a7", Color.Black)) + self.game.checkedMove(notationToMove("b6b1", Color.White)) + self.game.checkedMove(notationToMove("a7a8", Color.Black)) + self.game.checkedMove(notationToMove("b1e1", Color.White)) + self.game.checkedMove(notationToMove("g7b7", Color.Black)) + self.game.checkedMove(notationToMove("e1e8", Color.White)) + self.game.checkedMove(notationToMove("a8a7", Color.Black)) + self.game.checkedMove(notationToMove("d6c5", Color.White)) + self.check(not self.game.isDrawClaimable()) + ## Tests for Pawn moves method testCheckedMovePawnSingleTrue() = self.setup()