Пример #1
0
    def test_place_stone_full_board_merge_groups(self):

        myBoard = GoBoard(9, 9)

        g1_stones = [BoardLocation(5, 5)]
        g1_liberties = [
            BoardLocation(5, 4),
            BoardLocation(4, 5),
            BoardLocation(5, 6),
            BoardLocation(6, 5)
        ]

        g2_stones = [BoardLocation(3, 5)]
        g2_liberties = [
            BoardLocation(4, 5),
            BoardLocation(2, 5),
            BoardLocation(3, 6),
            BoardLocation(3, 4)
        ]

        myBoard.groups = [
            GoString(True, g1_stones, g1_liberties),
            GoString(True, g2_stones, g2_liberties)
        ]

        myBoard.place_stone(BoardLocation(4, 5), False)
        self.assertEqual(len(myBoard.groups), 3)
Пример #2
0
    def test_place_stone_empty_board(self):

        myBoard = GoBoard(9, 9)

        myBoard.place_stone(BoardLocation(5, 5), True)
        self.assertEqual(len(myBoard.groups), 1)
        self.assertEqual(myBoard.groups[0].get_num_stones(), 1)
        self.assertEqual(myBoard.groups[0].get_num_liberties(), 4)
Пример #3
0
    def test_zobrist_hashing(self):

        myBoard = GoBoard(9, 9)

        original_hash = myBoard.zobrist_hashes.current_hash
        myBoard.place_stone(BoardLocation(5, 5), True)
        self.assertNotEqual(myBoard.zobrist_hashes.current_hash, original_hash)
        myBoard.remove_group(myBoard.groups[0])
        self.assertEqual(myBoard.zobrist_hashes.current_hash, original_hash)
Пример #4
0
    def test_place_stone_full_board_create_new_group2(self):

        myBoard = GoBoard(9, 9)

        g1_stones = [BoardLocation(5, 5)]
        g1_liberties = [
            BoardLocation(5, 4),
            BoardLocation(4, 5),
            BoardLocation(5, 6),
            BoardLocation(6, 5)
        ]

        g1 = GoString(True, g1_stones, g1_liberties)
        myBoard.groups = [g1]

        myBoard.place_stone(BoardLocation(5, 4), False)
        self.assertEqual(len(myBoard.groups), 2)
        self.assertEqual(g1.get_num_liberties(), 3)

        myBoard.place_stone(BoardLocation(4, 5), False)
        self.assertEqual(len(myBoard.groups), 3)

        myBoard.place_stone(BoardLocation(5, 6), False)
        self.assertEqual(len(myBoard.groups), 4)
        self.assertEqual(g1.get_num_liberties(), 1)

        myBoard.place_stone(BoardLocation(6, 5), False)
        self.assertEqual(len(myBoard.groups), 4)
        self.assertEqual(g1.get_num_liberties(), 0)
Пример #5
0
    def test_illegal_place_stone(self):

        myBoard = GoBoard(9, 9)

        did_place = myBoard.place_stone(BoardLocation(10, 8), True)
        self.assertEqual(did_place is None, True)
        did_place = myBoard.place_stone(BoardLocation(9, 8), True)
        self.assertEqual(did_place is None, True)
        did_place = myBoard.place_stone(BoardLocation(-1, 8), True)
        self.assertEqual(did_place is None, True)

        # Try to place a stone twice
        did_place = myBoard.place_stone(BoardLocation(8, 8), True)
        self.assertEqual(did_place is not None, True)
        did_place = myBoard.place_stone(BoardLocation(8, 8), True)
        self.assertEqual(did_place is None, True)
Пример #6
0
    def test_legal_place_stone(self):

        myBoard = GoBoard(9, 9)

        did_place = myBoard.place_stone(BoardLocation(8, 8), True)
        self.assertEqual(did_place is None, False)
        self.assertEqual(myBoard.isEmpty(BoardLocation(8, 8)), False)
Пример #7
0
    def test_place_stone_that_captures_group(self):

        myBoard = GoBoard(9, 9)

        g1_stones = [BoardLocation(5, 5)]
        g1_liberties = [
            BoardLocation(5, 4),
            BoardLocation(4, 5),
            BoardLocation(5, 6),
            BoardLocation(6, 5)
        ]

        myBoard.groups = [GoString(True, g1_stones, g1_liberties)]

        myBoard.place_stone(BoardLocation(5, 4), False)
        myBoard.place_stone(BoardLocation(4, 5), False)
        myBoard.place_stone(BoardLocation(5, 6), False)
        myBoard.place_stone(BoardLocation(6, 5), False)

        self.assertEqual(len(myBoard.groups), 4)
Пример #8
0
    def test_capturing_group(self):

        myBoard = GoBoard(3, 3)

        myBoard.place_stone(BoardLocation(1, 0), False)
        myBoard.place_stone(BoardLocation(3, 0), False)
        myBoard.place_stone(BoardLocation(2, 0), False)

        myBoard.place_stone(BoardLocation(0, 1), True)
        myBoard.place_stone(BoardLocation(1, 0), True)

        self.assertEqual(len(myBoard.groups), 2)

        myBoard.place_stone(BoardLocation(2, 1), True)
        self.assertEqual(len(myBoard.groups), 3)
Пример #9
0
    def test_get_liberties(self):

        myBoard = GoBoard(9, 9)

        # Compute the liberties on the center of the empty board
        liberties = myBoard.get_liberties(BoardLocation(4, 4))
        self.assertEqual(len(liberties), 4)

        # Compute the liberties on the edge of the board
        liberties = myBoard.get_liberties(BoardLocation(8, 8))
        self.assertEqual(len(liberties), 2)

        # Place a piece and then compute the liberties
        did_place = myBoard.place_stone(BoardLocation(4, 4), True)
        liberties = myBoard.get_liberties(BoardLocation(4, 3))
        self.assertEqual(len(liberties), 3)
Пример #10
0
    def test_capturing_group(self):

        myBoard = GoBoard(3, 3)

        myBoard.place_stone(BoardLocation(0, 0), False)
        myBoard.place_stone(BoardLocation(0, 2), True)
        myBoard.place_stone(BoardLocation(2, 0), False)

        self.assertEqual(myBoard.groups[0].get_num_liberties(),
                         2)  # 2 liberties
        self.assertEqual(myBoard.groups[1].get_num_liberties(),
                         2)  # 2 liberties
        self.assertEqual(myBoard.groups[2].get_num_liberties(),
                         2)  # 2 liberties

        myBoard.place_stone(BoardLocation(0, 1), True)

        myBoard.place_stone(BoardLocation(1, 0), False)

        self.assertEqual(len(myBoard.groups), 2)

        self.assertEqual(myBoard.groups[0].get_num_liberties(),
                         2)  # 2 liberties
        self.assertEqual(myBoard.groups[1].get_num_liberties(),
                         2)  # 1 liberties, but should be 2

        # This causes a capture of a group but it should not
        myBoard.place_stone(BoardLocation(2, 1), True)
Пример #11
0
    def test_place_stone_that_captures_group(self):

        myBoard = GoBoard(9, 9)

        myBoard.place_stone(BoardLocation(5, 5), True)
        myBoard.place_stone(BoardLocation(5, 6), True)
        myBoard.place_stone(BoardLocation(4, 5), True)
        myBoard.place_stone(BoardLocation(5, 4), True)
        myBoard.place_stone(BoardLocation(6, 5), True)

        self.assertEqual(len(myBoard.groups), 1)
        self.assertEqual(myBoard.groups[0].get_num_liberties(), 8)

        myBoard.place_stone(BoardLocation(7, 5), False)
        myBoard.place_stone(BoardLocation(5, 3), False)
        myBoard.place_stone(BoardLocation(3, 5), False)
        myBoard.place_stone(BoardLocation(5, 7), False)

        myBoard.place_stone(BoardLocation(4, 4), False)
        myBoard.place_stone(BoardLocation(6, 6), False)
        myBoard.place_stone(BoardLocation(4, 6), False)
        myBoard.place_stone(BoardLocation(6, 4), False)

        self.assertEqual(len(myBoard.groups), 8)
        num_black_groups = 0
        for group in myBoard.groups:
            if (group.isBlack):
                num_black_groups = num_black_groups + 1
        self.assertEqual(num_black_groups, 0)