Files
libmttt/tests/testChecks.nim
luxick 64f8780e96 Make "makeMove" return void.
When doing moves the result must no longer be discarded.
2019-11-20 20:29:01 +01:00

159 lines
4.9 KiB
Nim

# This is just an example to get you started. You may wish to put all of your
# tests into a single file, or separate them into multiple `test1`, `test2`
# etc. files (better names are recommended, just make sure the name starts with
# the letter 't').
#
# To run these tests, simply execute `nimble test`.
import unittest
import libmttt
suite "Test the board result checker":
setup:
var
player1 = Player(name: "Adam")
player2 = Player(name: "Eve")
game: GameState = newGameState(player1, player2)
test "winning row":
game.board[0][0] = [
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Free]
]
check checkBoard(game.board[0][0]) == Mark.Player1
test "winning column":
game.board[0][0] = [
[Mark.Player2, Mark.Free, Mark.Player1],
[Mark.Player2, Mark.Player1, Mark.Free],
[Mark.Player2, Mark.Player1, Mark.Free]
]
check checkBoard(game.board[0][0]) == Mark.Player2
test "winning diagonals":
game.board[0][0] = [
[Mark.Free, Mark.Free, Mark.Player2],
[Mark.Free, Mark.Player2, Mark.Free],
[Mark.Player2, Mark.Free, Mark.Free]
]
check(checkBoard(game.board[0][0]) == Mark.Player2)
game.board[0][0] = [
[Mark.Player1, Mark.Player2, Mark.Player2],
[Mark.Player2, Mark.Player1, Mark.Player1],
[Mark.Player2, Mark.Free, Mark.Player1]
]
check(checkBoard(game.board[0][0]) == Mark.Player1)
test "board is a draw":
game.board[0][0] = [
[Mark.Player1, Mark.Player2, Mark.Player1],
[Mark.Player2, Mark.Player1, Mark.Player1],
[Mark.Player2, Mark.Player1, Mark.Player2]
]
check checkBoard(game.board[0][0]) == Mark.Draw
test "board is open":
game.board[0][0] = [
[Mark.Player1, Mark.Player2, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Player2]
]
check checkBoard(game.board[0][0]) == Mark.Free
test "free inital metaboard":
check checkBoard(game.board) == Mark.Free
test "winning metaboard row":
game.board[1][0] = [
[Mark.Player1, Mark.Player2, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Player2]
]
game.board[1][1] = [
[Mark.Free, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free]
]
game.board[1][2] = [
[Mark.Free, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Player1]
]
check checkBoard(game.board) == Mark.Player1
test "winning metaboard column":
game.board[0][1] = [
[Mark.Player1, Mark.Player2, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Player1, Mark.Player2]
]
game.board[1][1] = [
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Free, Mark.Free, Mark.Free]
]
game.board[2][1] = [
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free],
[Mark.Player1, Mark.Free, Mark.Free]
]
check checkBoard(game.board) == Mark.Player1
test "winning metaboard diagonal":
game.board[0][0] = [
[Mark.Player2, Mark.Player2, Mark.Free],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Player2, Mark.Player2]
]
game.board[1][1] = [
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Free, Mark.Free]
]
game.board[2][2] = [
[Mark.Player2, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Free, Mark.Free]
]
check checkBoard(game.board) == Mark.Player2
test "winning metaboard with some boards in draw":
let winner = [
[Mark.Free, Mark.Free, Mark.Free],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Free, Mark.Free]
]
let drawn = [
[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) == Mark.Player2
test "metaboard is drawn":
let drawn = [
[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) == Mark.Draw
test "illegal situation: both players win board":
game.board[1][1] = [
[Mark.Player1, Mark.Player1, Mark.Player1],
[Mark.Player2, Mark.Player2, Mark.Player2],
[Mark.Free, Mark.Free, Mark.Free]
]
expect(Exception):
discard checkBoard(game.board)