Пример #1
0
    def validate_play(self, value):
        if self.instance.winner != 0:
            raise serializers.ValidationError("Game is over.")

        if value == 'q':
            return value  # Player forfeits
        if value == 'timeout':
            return value  # AI takes over

        board = Board()
        play = board.parse(value)
        if play is None or not board.is_legal(json.loads(self.instance.state), play):
            raise serializers.ValidationError("Illegal play.")
        return value
Пример #2
0
 def test_nine_board_positions_by_default(self):
     game = Game()
     board = Board(game)
     self.assertEqual(len(board.positions()), 9)
Пример #3
0
 def test_board_positions_are_lists(self):
     # they're not tuples because I have a dream of sending game states
     # back and forth as JSON
     positions = Board(Game()).positions()
     for position in positions:
         self.assertIsInstance(position, list)
Пример #4
0
 def test_four_corners(self):
     corners = Board(Game()).corners()
     self.assertEqual(len(corners), 4)
Пример #5
0
 def setUp(self):
   self.game = Game()
   self.subject = ThroughLine(self.game)
   self.board_size = Board(self.game).get_size()
Пример #6
0
 def setUp(self):
     self.b = Board()
Пример #7
0
class test_player(unittest.TestCase):

    p = None

    def setUp(self):
        self.b = Board()

    def test_class(self):
        self.assertIsInstance(self.b, Board, "b is not Board")

    def test_set_board(self):
        expected = '000111222'
        self.b.board = expected
        self.assertEqual(self.b.board, expected,
            "board value not set correctly"
            )

    def test_reset_board(self):
        expected = '000000000'
        self.b.board = '111222111'
        self.b.reset_board()
        self.assertEqual(self.b.board, expected, "board did not reset")

    def test_string_display(self):
        expected = " | | \n-|-|-\nX|X|X\n-|-|-\nO|O|O"
        self.b.board = '000111222'
        self.assertEqual(str(self.b), expected, "not the right board")

    def test_move_str(self):
        self.b.board = '000000000'
        self.b.move(5, 'X')
        expected = '000010000'
        self.assertEqual(self.b.board, expected,
            "didn't move right: %s" % expected
            )

    def test_square_one_is_upper_right(self):
        expected = "X| | \n-|-|-\n | | \n-|-|-\n | | "
        self.b.board = '000000000'
        self.b.move(1, 'X')
        self.assertEqual(str(self.b), expected,
            "square one not upper right:\n%s" % self.b
            )

    def test_b10_property(self):
        expected = 8038
        self.b.board = '102000201'
        self.assertEqual(self.b.b10, expected,
            "failed to convert to base 10: %s != %s" % (expected, self.b.b10)
            )

    def test_winner_top_row(self):
        self.b.board = '111020002'
        self.assertEqual(self.b.has_winner(), '1')
        expected = 'X|X|X\n-|-|-\n |O| \n-|-|-\n | |O'
        self.assertEqual(str(self.b), expected)

    def test_winner_middle_row(self):
        self.b.board = '101222010'
        self.assertEqual(self.b.has_winner(), '2')

    def test_winner_bottom_row(self):
        self.b.board = '202200111'
        self.assertEqual(self.b.has_winner(), '1')

    def test_winner_left_col(self):
        self.b.board = '100120102'
        self.assertEqual(self.b.has_winner(), '1')

    def test_winner_center_col(self):
        self.b.board = '012010210'
        self.assertEqual(self.b.has_winner(), '1')
        expected = ' |X|O\n-|-|-\n |X| \n-|-|-\nO|X| '
        self.assertEqual(str(self.b), expected)

    def test_winner_right_col(self):
        self.b.board = '001021201'
        self.assertEqual(self.b.has_winner(), '1')
        expected = ' | |X\n-|-|-\n |O|X\n-|-|-\nO| |X'
        self.assertEqual(str(self.b), expected)

    def test_winner_diag_one_to_nine(self):
        self.b.board = '100210201'
        self.assertEqual(self.b.has_winner(), '1')

    def test_winner_diag_three_to_seven(self):
        self.b.board = '001212100'
        self.assertEqual(self.b.has_winner(), '1')

    def test_board_as_string_empty(self):
        self.b.board = '000000000'
        expected = " | | \n-|-|-\n | | \n-|-|-\n | | "
        self.assertEqual(str(self.b), expected)

    def test_board_display(self):
        self.b.board = '100200100'
        expected = 'X| | \n-|-|-\nO| | \n-|-|-\nX| | '
        self.assertEqual(str(self.b), expected)

    def test_board_one_is_top_left(self):
        self.b.board = '100000000'
        expected = "X| | \n-|-|-\n | | \n-|-|-\n | | "
        self.assertEqual(str(self.b), expected)

#
# Rebase Tests
#
    def test_convert_board_to_base10(self):
        self.b.board = '000111222'
        expected = 377
        self.assertEqual(self.b.b10, expected)

    def test_convert_number_to_board(self):
        number = 12345
        expected = '121221020'
        self.assertEqual(self.b.convert_to_base3(number), expected)

    def test_81_is_x_in_center_square(self):
        number = 81
        expected = '000010000'
        self.assertEqual(self.b.convert_to_base3(number), expected)

#
# Empties
#
    def test_empty_spots_one(self):
        self.b.board = '120120120'
        expected = [3, 6, 9]
        empties = self.b.list_empty_spots()
        self.assertListEqual(expected, empties)

    def test_empty_spots_two(self):
        self.b.board = '120120120'
        expected = ' | |3\n-|-|-\n | |6\n-|-|-\n | |9'
        empties = self.b.show_empty_spots()
        self.assertEqual(expected, empties)

    def test_board_is_full(self):
        self.b.board = '121122121'
        self.assertTrue(self.b.is_full())

    def test_board_is_not_full(self):
        self.b.board = '121022121'
        self.assertFalse(self.b.is_full())
Пример #8
0
def calculate_board_state_label(num: str) -> Board:
    _board_state = bin(num)[2:].zfill(18)
    return Board(_board_state)
Пример #9
0
 def test_position_not_occupied_before_moving(self):
     game = Game()
     moves = Moves(game)
     board = Board(game)
     for position in board.positions():
         assert not moves.is_occupied(position)