152 lines
2.7 KiB
Python
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
|