Refactor constuctors and Mark enum
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user