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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)