Advertisement
Guest User

test_tic_tac_toe.py

a guest
Oct 3rd, 2023
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.90 KB | None | 0 0
  1. import unittest
  2.  
  3. from tictactoe import initial_state, player, X, O, actions
  4. from tictactoe import EMPTY as _, result, winner, terminal, utility, minimax, score
  5.  
  6.  
  7. class TestPlayer(unittest.TestCase):
  8.     def test_x_play(self):
  9.         start = initial_state()
  10.         self.assertEqual(X, player(start))
  11.  
  12.     def test_o_play(self):
  13.         board = initial_state()
  14.         board[0][0] = X
  15.         self.assertEqual(O, player(board))
  16.  
  17.     def test_all_players(self):
  18.         board = initial_state()
  19.         next_player = player(board)
  20.         for i in range(9):
  21.             board[i % 3][i // 3] = next_player
  22.             if i % 2 == 0:
  23.                 self.assertEqual(X, next_player)
  24.             else:
  25.                 self.assertEqual(O, next_player)
  26.             next_player = player(board)
  27.  
  28.  
  29. class TestPossibleActions(unittest.TestCase):
  30.     def test_empty(self):
  31.         empty_board = initial_state()
  32.         self.assertEqual(9, len(actions(empty_board)))
  33.  
  34.     def test_two_left(self):
  35.         almost_full_board = [[X, O, X], [_, O, _], [O, X, X]]
  36.         self.assertEqual(2, len(actions(almost_full_board)))
  37.         self.assertEqual({(1, 0), (1, 2)}, actions(almost_full_board))
  38.  
  39.     def test_full(self):
  40.         full_board = [[X, O, X], [O, X, O], [X, O, X]]
  41.         self.assertEqual(0, len(actions(full_board)))
  42.  
  43.  
  44. class TestResult(unittest.TestCase):
  45.     def test_from_empty(self):
  46.         empty_board = initial_state()
  47.         new_board = result(empty_board, (1, 0))
  48.         self.assertEqual(9, len(actions(empty_board)))
  49.         self.assertEqual(empty_board, initial_state())
  50.         self.assertEqual(8, len(actions(new_board)))
  51.         self.assertEqual(new_board, [[_]*3, [X, _, _], [_]*3])
  52.  
  53.     def test_not_allowed(self):
  54.         empty_board = initial_state()
  55.         self.assertRaisesRegex(ValueError, 'not allowed',
  56.                                result, empty_board, (3, 7))
  57.  
  58.  
  59. class TestWinner(unittest.TestCase):
  60.     def test_empty(self):
  61.         empty_board = initial_state()
  62.         self.assertIsNone(winner(empty_board))
  63.  
  64.     def test_full(self):
  65.         full_board = [[X, O, X], [O, X, O], [X, O, X]]
  66.         self.assertEqual(X, winner(full_board))
  67.         full_board = [[X, O, X],
  68.                       [O, O, X],
  69.                       [X, X, O]]
  70.         self.assertIsNone(winner(full_board))
  71.  
  72.     def test_row(self):
  73.         fake_board = [[_]*3, [_]*3, [O]*3]
  74.         self.assertEqual(O, winner(fake_board))
  75.  
  76.     def test_column(self):
  77.         fake_board = [[O, _, _]]*3
  78.         self.assertEqual(O, winner(fake_board))
  79.  
  80.     def test_diagonal(self):
  81.         fake_board = [[X, _, _], [_, X, _], [_, _, X]]
  82.         self.assertEqual(X, winner(fake_board))
  83.         fake_board = [[_, _, O], [_, O, _], [O, _, _]]
  84.         self.assertEqual(O, winner(fake_board))
  85.  
  86.  
  87. class TestTerminal(unittest.TestCase):
  88.     def test_empty(self):
  89.         empty_board = initial_state()
  90.         self.assertFalse(terminal(empty_board))
  91.  
  92.     def test_full(self):
  93.         full_board = [[X, O, X], [O, X, O], [X, O, X]]
  94.         self.assertTrue(terminal(full_board))
  95.         full_board = [[X, O, X],
  96.                       [O, O, X],
  97.                       [X, X, O]]
  98.         self.assertTrue(terminal(full_board))
  99.  
  100.     def test_row(self):
  101.         fake_board = [[_]*3, [_]*3, [O]*3]
  102.         self.assertTrue(terminal(fake_board))
  103.  
  104.     def test_almost_full(self):
  105.         almost_full_board = [[X, O, X], [_, O, _], [O, X, X]]
  106.         self.assertFalse(terminal(almost_full_board))
  107.  
  108.  
  109. class TestUtility(unittest.TestCase):
  110.     def test_full(self):
  111.         full_board = [[X, O, X], [O, X, O], [X, O, X]]
  112.         self.assertEqual(1, utility(full_board))
  113.         full_board = [[X, O, X],
  114.                       [O, O, X],
  115.                       [X, X, O]]
  116.         self.assertEqual(0, utility(full_board))
  117.  
  118.     def test_row(self):
  119.         fake_board = [[_]*3, [_]*3, [O]*3]
  120.         self.assertEqual(-1, utility(fake_board))
  121.  
  122.     def test_column(self):
  123.         fake_board = [[O, _, _]]*3
  124.         self.assertEqual(-1, utility(fake_board))
  125.  
  126.     def test_diagonal(self):
  127.         fake_board = [[X, _, _], [_, X, _], [_, _, X]]
  128.         self.assertEqual(1, utility(fake_board))
  129.         fake_board = [[_, _, O], [_, O, _], [O, _, _]]
  130.         self.assertEqual(-1, utility(fake_board))
  131.  
  132.  
  133. class TestMinMax(unittest.TestCase):
  134.     def test_tictactoe_is_a_draw(self):
  135.         board = initial_state()
  136.         self.assertEqual(0, score(board))
  137.  
  138.     def test_almost_finished(self):
  139.         board = [[_, X, O],
  140.                  [O, X, X],
  141.                  [X, _, O]]
  142.         self.assertEqual((2, 1), minimax(board))
  143.         self.assertEqual(0, score(board))
  144.  
  145.     def test_middle(self):
  146.         board = [[X, X, O],
  147.                  [_, _, _],
  148.                  [O, _, _]]
  149.         self.assertEqual((1, 1), minimax(board))
  150.         self.assertEqual(1, score(board))
  151.  
  152.     def test_still_a_draw(self):
  153.         board = [[X, _, _],
  154.                  [_, _, _],
  155.                  [_, _, _]]
  156.         self.assertEqual((1, 1), minimax(board))
  157.         self.assertEqual(0, score(board))
  158.  
  159.     def test_bad_start(self):
  160.         board = [[X, _, O],
  161.                  [_, _, _],
  162.                  [_, _, _]]
  163.         self.assertEqual(1, score(board))
  164.  
  165.     def test_fork(self):
  166.         board = [[_, X, O],
  167.                  [_, O, _],
  168.                  [X, X, _]]
  169.         self.assertEqual((2, 2), minimax(board))
  170.         self.assertEqual(-1, score(board))
  171.  
  172.     def test_lost(self):
  173.         board = [[_, X, _],
  174.                  [_, _, O],
  175.                  [_, _, _]]
  176.         self.assertEqual((1, 1), minimax(board))
  177.         self.assertEqual(1, score(board))
  178.  
  179.     def test_full_board(self):
  180.         full_board = [[X, O, X],
  181.                       [O, O, X],
  182.                       [X, X, O]]
  183.         self.assertIsNone(minimax(full_board))
  184.         self.assertEqual(0, score(full_board))
  185.  
  186.  
  187. if __name__ == '__main__':
  188.     unittest.main()
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement