def test_get_possible_moves_boese07(self):
        board = Board("""\
        2
        1
        0 0
        8 11
        - - - - - - 1 - - - - 
        - - - - - - 2 - - - - 
        - 2 2 2 2 2 2 2 1 1 0 
        - - - - - - 2 - - - - 
        - - - - - - 2 - - - - 
        - - - - - - 2 - - - - 
        - - - - - - 2 - - - - 
        - - - - - - 2 - - - - 
        1 2 6 <-> 6 7 4
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((6, 2), player=PLAYER_ONE, use_overwrite=True)
        self.assertEqual(1, len(next_game_states))
        self.assert_board(next_game_states[0].board,
                          [[HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, PLAYER_TWO, PLAYER_TWO, PLAYER_TWO, PLAYER_TWO, PLAYER_TWO, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, EMPTY],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_TWO, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_TWO, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_TWO, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_TWO, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, PLAYER_TWO, HOLE, HOLE, HOLE, HOLE]])
    def test_get_possible_moves_boese_lost_trace(self):
        board = Board("""\
        2
        0
        0 0
        8 9
        - - - - - - - - -
        - - 2 - - - 2 - -
        - 2 2 2 0 2 2 2 -
        - - 2 - - - 2 - -
        - - 2 - - - 2 - -
        - - 2 - - - 2 - -
        - - 1 - - - 1 - -
        - - - - - - - - -
        7 2 2 <-> 2 1 0
        1 2 6 <-> 6 1 0
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((4, 2), player=PLAYER_ONE, use_overwrite=True)
        self.assertEqual(1, len(next_game_states))
        self.assert_board(next_game_states[0].board,
                          [[HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE],
                           [HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE],
                           [HOLE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, HOLE],
                           [HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE],
                           [HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE],
                           [HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE],
                           [HOLE, HOLE, PLAYER_ONE, HOLE, HOLE, HOLE, PLAYER_ONE, HOLE, HOLE],
                           [HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE, HOLE]])
    def test_get_possible_moves_boese02(self):
        board = Board("""\
        2
        0
        0 0
        2 10
        2 2 2 0 2 2 2 2 2 2 
        - - - - - 1 2 0 - - 
        0 0 6 <-> 9 0 2
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((3, 0), player=PLAYER_ONE)
        self.assertEqual(0, len(next_game_states))
    def test_get_possible_moves_boese03(self):
        board = Board("""\
        2
        0
        0 0
        2 10
        2 2 2 1 0 2 2 2 2 2 
        - - - - 0 1 2 0 - -
        0 0 6 <-> 9 0 2
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((4, 0), player=PLAYER_ONE)
        self.assertEqual(1, len(next_game_states))
        self.assert_board(next_game_states[0].board,
                          [[PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE, PLAYER_ONE],
                           [HOLE, HOLE, HOLE, HOLE, EMPTY, PLAYER_ONE, PLAYER_TWO, EMPTY, HOLE, HOLE]])
    def test_get_possible_moves_eight_player_inversion(self):
        board = Board("""\
        8
        0
        0 0
        3 3
        5 4 1
        6 2 3
        i 7 8
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((0, 2), player=PLAYER_ONE)
        self.assertEqual(1, len(next_game_states))
        self.assert_board(next_game_states[0].board,
                          [[PLAYER_SIX, PLAYER_FIVE, PLAYER_TWO],
                           [PLAYER_SEVEN, PLAYER_TWO, PLAYER_FOUR],
                           [PLAYER_TWO, PLAYER_EIGHT, PLAYER_ONE]])
    def test_get_possible_moves_five_player_inversion(self):
        board = Board("""\
        5
        0
        0 0
        3 3
        5 4 1
        0 2 3
        i 0 0
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((0, 2), player=PLAYER_ONE)
        self.assertEqual(1, len(next_game_states))
        self.assert_board(next_game_states[0].board,
                          [[PLAYER_ONE, PLAYER_FIVE, PLAYER_TWO],
                           [EMPTY, PLAYER_TWO, PLAYER_FOUR],
                           [PLAYER_TWO, EMPTY, EMPTY]])
    def test_get_possible_moves_boese_reflect(self):
        board = Board("""\
        2
        1
        0 0
        9 4
        - - - - 
        - - - 2 
        - - - 2 
        - - - 2 
        - - - 1 
        - - - 0 
        - - - 0 
        - - - 0 
        - - - 0 
        3 1 0 <-> 3 1 0
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((3, 4), player=PLAYER_ONE, use_overwrite=True)
        self.assertEqual(0, len(next_game_states))
    def test_get_possible_moves_boese04(self):
        board = Board("""\
        2
        0
        0 0
        4 3
        0 0 0 
        0 2 2 
        1 0 2 
        2 2 2 
        2 3 4 <-> 2 3 2
        0 2 5 <-> 0 3 6
        """)
        game = GameState(board)

        next_game_states = game.get_possible_moves_on_position((2, 0), player=PLAYER_ONE)
        self.assertEqual(1, len(next_game_states))
        self.assert_board(next_game_states[0].board,
                          [[EMPTY, EMPTY, PLAYER_ONE],
                           [EMPTY, PLAYER_ONE, PLAYER_ONE],
                           [PLAYER_ONE, EMPTY, PLAYER_ONE],
                           [PLAYER_ONE, PLAYER_ONE, PLAYER_ONE]])