Refactor constuctors and Mark enum

This commit is contained in:
2019-11-20 19:05:22 +01:00
parent e1841d35be
commit be953892dc
3 changed files with 136 additions and 152 deletions

View File

@@ -14,146 +14,146 @@ suite "Test the board result checker":
var
player1 = Player(name: "Adam")
player2 = Player(name: "Eve")
game: GameState = newGame(player1, player2)
game: GameState = newGameState(player1, player2)
test "winning row":
game.board[0][0] = [
[mFree, mFree, mFree],
[mPlayer1, mPlayer1, mPlayer1],
[mFree, mFree, mFree]
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Free]
]
check checkBoard(game.board[0][0]) == mPlayer1
check checkBoard(game.board[0][0]) == Mark.Player1
test "winning column":
game.board[0][0] = [
[mPlayer2, mFree, mPlayer1],
[mPlayer2, mPlayer1, mFree],
[mPlayer2, mPlayer1, mFree]
[Mark.Player2, Mark.Free, Mark.Player1],
[Mark.Player2, Mark.Player1, Mark.Free],
[Mark.Player2, Mark.Player1, Mark.Free]
]
check checkBoard(game.board[0][0]) == mPlayer2
check checkBoard(game.board[0][0]) == Mark.Player2
test "winning diagonals":
game.board[0][0] = [
[mFree, mFree, mPlayer2],
[mFree, mPlayer2, mFree],
[mPlayer2, mFree, mFree]
[Mark.Free, Mark.Free, Mark.Player2],
[Mark.Free, Mark.Player2, Mark.Free],
[Mark.Player2, Mark.Free, Mark.Free]
]
check(checkBoard(game.board[0][0]) == mPlayer2)
check(checkBoard(game.board[0][0]) == Mark.Player2)
game.board[0][0] = [
[mPlayer1, mPlayer2, mPlayer2],
[mPlayer2, mPlayer1, mPlayer1],
[mPlayer2, mFree, mPlayer1]
[Mark.Player1, Mark.Player2, Mark.Player2],
[Mark.Player2, Mark.Player1, Mark.Player1],
[Mark.Player2, Mark.Free, Mark.Player1]
]
check(checkBoard(game.board[0][0]) == mPlayer1)
check(checkBoard(game.board[0][0]) == Mark.Player1)
test "board is a draw":
game.board[0][0] = [
[mPlayer1, mPlayer2, mPlayer1],
[mPlayer2, mPlayer1, mPlayer1],
[mPlayer2, mPlayer1, mPlayer2]
[Mark.Player1, Mark.Player2, Mark.Player1],
[Mark.Player2, Mark.Player1, Mark.Player1],
[Mark.Player2, Mark.Player1, Mark.Player2]
]
check checkBoard(game.board[0][0]) == mDraw
check checkBoard(game.board[0][0]) == Mark.Draw
test "board is open":
game.board[0][0] = [
[mPlayer1, mPlayer2, mFree],
[mPlayer1, mFree, mPlayer1],
[mFree, mPlayer1, mPlayer2]
[Mark.Player1, Mark.Player2, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Player2]
]
check checkBoard(game.board[0][0]) == mFree
check checkBoard(game.board[0][0]) == Mark.Free
test "free inital metaboard":
check checkBoard(game.board) == mFree
check checkBoard(game.board) == Mark.Free
test "winning metaboard row":
game.board[1][0] = [
[mPlayer1, mPlayer2, mFree],
[mPlayer1, mPlayer1, mPlayer1],
[mFree, mPlayer1, mPlayer2]
[Mark.Player1, Mark.Player2, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Player2]
]
game.board[1][1] = [
[mFree, mFree, mPlayer1],
[mFree, mPlayer1, mFree],
[mPlayer1, mFree, mFree]
[Mark.Free, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free]
]
game.board[1][2] = [
[mFree, mFree, mPlayer1],
[mFree, mFree, mPlayer1],
[mFree, mFree, mPlayer1]
[Mark.Free, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Player1]
]
check checkBoard(game.board) == mPlayer1
check checkBoard(game.board) == Mark.Player1
test "winning metaboard column":
game.board[0][1] = [
[mPlayer1, mPlayer2, mFree],
[mPlayer1, mPlayer1, mPlayer1],
[mFree, mPlayer1, mPlayer2]
[Mark.Player1, Mark.Player2, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Player2]
]
game.board[1][1] = [
[mFree, mFree, mFree],
[mPlayer1, mPlayer1, mPlayer1],
[mFree, mFree, mFree]
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Free]
]
game.board[2][1] = [
[mPlayer1, mFree, mFree],
[mPlayer1, mFree, mFree],
[mPlayer1, mFree, mFree]
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free]
]
check checkBoard(game.board) == mPlayer1
check checkBoard(game.board) == Mark.Player1
test "winning metaboard diagonal":
game.board[0][0] = [
[mPlayer2, mPlayer2, mFree],
[mPlayer2, mPlayer2, mPlayer2],
[mFree, mPlayer2, mPlayer2]
[Mark.Player2, Mark.Player2, Mark.Free],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Player2, Mark.Player2]
]
game.board[1][1] = [
[mFree, mFree, mFree],
[mPlayer2, mPlayer2, mPlayer2],
[mFree, mFree, mFree]
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Free, Mark.Free]
]
game.board[2][2] = [
[mPlayer2, mFree, mFree],
[mPlayer2, mFree, mFree],
[mPlayer2, mFree, mFree]
[Mark.Player2, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Free, Mark.Free]
]
check checkBoard(game.board) == mPlayer2
check checkBoard(game.board) == Mark.Player2
test "winning metaboard with some boards in draw":
let winner = [
[mFree, mFree, mFree],
[mPlayer2, mPlayer2, mPlayer2],
[mFree, mFree, mFree]
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Free, Mark.Free]
]
let drawn = [
[mPlayer2, mPlayer2, mPlayer1],
[mPlayer1, mPlayer1, mPlayer2],
[mPlayer2, mPlayer1, mPlayer2]
[Mark.Player2, Mark.Player2, Mark.Player1],
[Mark.Player1, Mark.Player1, Mark.Player2],
[Mark.Player2, Mark.Player1, Mark.Player2]
]
game.board[0][0] = winner
game.board[1][1] = winner
game.board[2][2] = winner
game.board[1][0] = drawn
game.board[2][0] = drawn
check checkBoard(game.board) == mPlayer2
check checkBoard(game.board) == Mark.Player2
test "metaboard is drawn":
let drawn = [
[mPlayer2, mPlayer2, mPlayer1],
[mPlayer1, mPlayer1, mPlayer2],
[mPlayer2, mPlayer1, mPlayer2]
[Mark.Player2, Mark.Player2, Mark.Player1],
[Mark.Player1, Mark.Player1, Mark.Player2],
[Mark.Player2, Mark.Player1, Mark.Player2]
]
for x in 0 .. 2:
for y in 0 .. 2:
game.board[x][y] = drawn
check checkBoard(game.board) == mDraw
check checkBoard(game.board) == Mark.Draw
test "illegal situation: both players win board":
game.board[1][1] = [
[mPlayer1, mPlayer1, mPlayer1],
[mPlayer2, mPlayer2, mPlayer2],
[mFree, mFree, mFree]
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Free, Mark.Free]
]
expect(Exception):
discard checkBoard(game.board)

View File

@@ -7,21 +7,21 @@ suite "Test the move procedures":
var
player1 = Player(name: "Adam")
player2 = Player(name: "Eve")
game: GameState = newGame(player1, player2)
game: GameState = newGameState(player1, player2)
test "Inital state":
check game.currentPlayer == player1
check game.players == [player1, player2]
check game.turn == 0
check game.currentBoard.isNone
check game.result == mFree
check game.result == Mark.Free
test "First move":
game = game.makeMove((1, 1), (1, 1))
check game.currentPlayer == player2
check game.turn == 1
check game.currentBoard == (1, 1).some()
check game.result == mFree
check game.result == Mark.Free
test "Second move":
game = game.makeMove((1, 1), (1, 1))
@@ -29,7 +29,7 @@ suite "Test the move procedures":
check game.currentPlayer == player1
check game.turn == 2
check game.currentBoard == (0, 0).some()
check game.result == mFree
check game.result == Mark.Free
test "Move on wrong board":
game = game.makeMove((1, 1), (1, 1))
@@ -47,39 +47,39 @@ suite "Test the move procedures":
test "Player 1 wins the game":
let winner = [
[mPlayer1, mFree, mFree],
[mPlayer1, mFree, mFree],
[mPlayer1, mFree, mFree]
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free]
]
game.board[0][0] = winner
game.board[1][1] = winner
game.board[2][2] = [
[mPlayer1, mFree, mFree],
[mFree, mFree, mFree],
[mPlayer1, mFree, mFree]
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free]
]
check checkBoard(game.board) == mFree
check checkBoard(game.board) == Mark.Free
game = game.makeMove((1, 0), (2, 2))
check game.result == mPlayer1
check game.result == Mark.Player1
check game.currentPlayer == player1
test "The game ends in a draw":
let drawn = [
[mPlayer2, mPlayer2, mPlayer1],
[mPlayer1, mPlayer1, mPlayer2],
[mPlayer2, mPlayer1, mPlayer2]
[Mark.Player2, Mark.Player2, Mark.Player1],
[Mark.Player1, Mark.Player1, Mark.Player2],
[Mark.Player2, Mark.Player1, Mark.Player2]
]
for x in 0 .. 2:
for y in 0 .. 2:
game.board[x][y] = drawn
game.board[2][2] = [
[mPlayer2, mPlayer2, mPlayer1],
[mPlayer1, mPlayer1, mPlayer2],
[mPlayer2, mFree, mPlayer2]
[Mark.Player2, Mark.Player2, Mark.Player1],
[Mark.Player1, Mark.Player1, Mark.Player2],
[Mark.Player2, Mark.Free, Mark.Player2]
]
check checkBoard(game.board) == mFree
check checkBoard(game.board) == Mark.Free
game = game.makeMove((2, 1), (2, 2))
check game.result == mDraw
check game.result == Mark.Draw
check game.currentPlayer == player1