ttt-game/tests/test_game.py

152 lines
2.7 KiB
Python

from src.ttt_game import Game, Tr
def test_init():
g = Game()
assert len(g._board) == 9
for i in range(9):
assert g._board[i] == Tr.E
def setup_insert_1X() -> Game:
g = Game()
g.insert(1, Tr.X)
return g
def setup_insert_13X5O() -> Game:
g = Game()
g.insert(1, Tr.X)
g.insert(5, Tr.O)
g.insert(3, Tr.X)
return g
def test_insert_1X():
g = setup_insert_1X()
b = g._board
assert b.count(Tr.X) == 1
assert b.count(Tr.O) == 0
assert b.count(Tr.E) == 8
def test_insert_1X5O():
g = setup_insert_13X5O()
b = g._board
assert b.count(Tr.X) == 2
assert b.count(Tr.O) == 1
assert b.count(Tr.E) == 6
assert b[1] == Tr.X
assert b[3] == Tr.X
assert b[5] == Tr.O
def test_get_board():
g1 = setup_insert_1X()
g2 = setup_insert_13X5O()
for g in (g1, g2):
b = g._board
test_b = g.get_board()
for el in Tr:
assert b.count(el) == test_b.count(el)
def test_move():
g = Game()
res = g.move(0, Tr.X)
assert res == False
res_board = g.get_board()
assert res_board[0] == Tr.X
assert res_board.count(Tr.X) == 1
assert res_board.count(Tr.O) == 0
assert res_board.count(Tr.E) == 8
res = g.move(3, Tr.O)
assert res == False
res_board = g.get_board()
assert res_board[3] == Tr.O
assert res_board.count(Tr.X) == 1
assert res_board.count(Tr.O) == 1
assert res_board.count(Tr.E) == 7
res = g.move(1, Tr.X)
assert res == False
res_board = g.get_board()
assert res_board[1] == Tr.X
assert res_board.count(Tr.X) == 2
assert res_board.count(Tr.O) == 1
assert res_board.count(Tr.E) == 6
res = g.move(2, Tr.X)
assert res == True
res_board = g.get_board()
assert res_board[2] == Tr.X
assert res_board.count(Tr.X) == 3
assert res_board.count(Tr.O) == 1
assert res_board.count(Tr.E) == 5
res = g.move(2, Tr.X)
assert res == False
def test_get_free():
g1 = setup_insert_1X()
g2 = setup_insert_13X5O()
for g in (g1, g2):
b = g._board
free = g.get_free()
assert len(free) == b.count(Tr.E)
for i in free:
assert b[i] == Tr.E
def test_check_move():
g = setup_insert_13X5O()
assert g.check_move(3) == False
assert g.check_move(0) == True
def test_check_filled():
g = Game()
assert g.check_filled() == False
for i in range(8):
g.insert(i, (Tr.X, Tr.O)[i % 2])
assert g.check_filled() == False
g.insert(8, Tr.X)
assert g.check_filled() == True
def test_check_win():
for steps in ((0, 1, 2), (0, 3, 6), (0, 4, 8), (2, 4, 6)):
g = Game()
for i in range(9):
assert g.check_win(i) == False
g.insert(5, Tr.O)
for i in range(9):
assert g.check_win(i) == False
for i in steps:
g.insert(i, Tr.X)
assert g.check_win(i) == True