def test_invalid_one_move_recreation(valid_one_move_pieces):
    valid_one_move_pieces[0].king = True

    min_max = MinMax(1, 1)

    with pytest.raises(ValueError):
        min_max.get_move_by_pieces(valid_one_move_pieces)
def test_multi_move_recreation(valid_multi_move_pieces):
    min_max = MinMax(1, 1)

    piece_1 = CheckersPiece(position=29, player=1, king=True)
    piece_2 = CheckersPiece(position=25, player=2, king=True)
    piece_3 = CheckersPiece(position=18, player=2, king=True)
    piece_4 = CheckersPiece(position=11, player=2, king=True)

    min_max.load_game([piece_1, piece_2, piece_3, piece_4])

    move: List[Tuple[int, int]] = min_max.get_move_by_pieces(
        valid_multi_move_pieces)
    assert move == [[29, 22], [22, 15], [15, 8]]
def test_piece_removal(valid_multi_move_pieces):
    min_max = MinMax(1, 1)

    piece_1 = CheckersPiece(position=29, player=1, king=True)
    piece_2 = CheckersPiece(position=25, player=2, king=True)
    piece_3 = CheckersPiece(position=18, player=2, king=True)
    piece_4 = CheckersPiece(position=11, player=2, king=True)

    min_max.load_game([piece_1, piece_2, piece_3, piece_4])

    old_game: Game = deepcopy(min_max._game)
    move_list = min_max.get_move_by_pieces(valid_multi_move_pieces)

    for move in move_list:
        min_max.move(*move)

    removed_pieces = min_max.get_removed_pieces(old_game, min_max._game,
                                                min_max._game.whose_turn())
    assert removed_pieces == [25, 18, 11]
def test_pascal():
    min_max = MinMax(1, 2)
    min_max.move(12, 16)

    # 24 - 19
    move_list = [{
        'position': 1,
        'player': 1,
        'king': False
    }, {
        'position': 2,
        'player': 1,
        'king': False
    }, {
        'position': 3,
        'player': 1,
        'king': False
    }, {
        'position': 4,
        'player': 1,
        'king': False
    }, {
        'position': 5,
        'player': 1,
        'king': False
    }, {
        'position': 6,
        'player': 1,
        'king': False
    }, {
        'position': 7,
        'player': 1,
        'king': False
    }, {
        'position': 8,
        'player': 1,
        'king': False
    }, {
        'position': 9,
        'player': 1,
        'king': False
    }, {
        'position': 10,
        'player': 1,
        'king': False
    }, {
        'position': 11,
        'player': 1,
        'king': False
    }, {
        'position': 16,
        'player': 1,
        'king': False
    }, {
        'position': 19,
        'player': 2,
        'king': False
    }, {
        'position': 21,
        'player': 2,
        'king': False
    }, {
        'position': 22,
        'player': 2,
        'king': False
    }, {
        'position': 23,
        'player': 2,
        'king': False
    }, {
        'position': 25,
        'player': 2,
        'king': False
    }, {
        'position': 26,
        'player': 2,
        'king': False
    }, {
        'position': 27,
        'player': 2,
        'king': False
    }, {
        'position': 28,
        'player': 2,
        'king': False
    }, {
        'position': 29,
        'player': 2,
        'king': False
    }, {
        'position': 30,
        'player': 2,
        'king': False
    }, {
        'position': 31,
        'player': 2,
        'king': False
    }, {
        'position': 32,
        'player': 2,
        'king': False
    }]

    t = []
    for move in move_list:
        t.append(CheckersPiece(**move))

    moves = min_max.get_move_by_pieces(t)
    assert moves == [[24, 19]]
def test_one_move_recreation(valid_one_move_pieces):
    min_max = MinMax(1, 1)

    move: List[Tuple[int,
                     int]] = min_max.get_move_by_pieces(valid_one_move_pieces)
    assert move == [[9, 14]]