def test_start_valid_card():
    environment, observation = setup_environment_for_card_phase()
    played_card = observation.player.hand[0]
    observation, reward, done, _ = environment.step(played_card)
    assert observation.played_cards_in_round == [played_card]
    assert reward is None
    assert not done
def test_pee_unallowed():
    environment = setup_environment_for_card_phase(taker=0,
                                                   shuffled_deck=CARDS)[0]
    environment.step(Card.SPADES_1)
    environment.step(Card.CLOVER_5)
    environment.step(Card.HEART_9)
    with pytest.raises(FrenchTarotException):
        environment.step(Card.DIAMOND_QUEEN)
def test_play_excuse_first():
    environment = setup_environment_for_card_phase()[0]
    environment.step(Card.EXCUSE)
    environment.step(Card.HEART_KING)
    environment.step(Card.HEART_4)
    observation, reward, done, _ = environment.step(Card.HEART_2)

    expected_values = [
        Card.EXCUSE, Card.HEART_KING, Card.HEART_4, Card.HEART_2
    ]
    assert reward[-1] == compute_card_set_points(
        expected_values)  # last player's team won this round
    assert not done
def test_play_complete_round_valid_last_player_team_wins():
    environment = setup_environment_for_card_phase()[0]
    environment.step(Card.HEART_1)
    environment.step(Card.HEART_KING)
    environment.step(Card.HEART_4)
    observation, reward, done, _ = environment.step(Card.HEART_2)

    expected_reward = compute_card_set_points(
        [Card.HEART_1, Card.HEART_KING, Card.HEART_4, Card.HEART_2])
    assert reward[0] == 0
    assert reward[1] == expected_reward
    assert reward[2] == expected_reward
    assert reward[3] == expected_reward
    assert not done
def test_play_complete_round_valid_last_player_team_loses():
    environment = setup_environment_for_card_phase(taker=1)[0]
    environment.step(Card.HEART_1)
    environment.step(Card.HEART_KING)
    environment.step(Card.HEART_4)
    observation, reward, done, _ = environment.step(Card.HEART_2)

    expected_values = [
        Card.HEART_KING, Card.HEART_4, Card.HEART_2, Card.HEART_1
    ]
    assert reward[0] == compute_card_set_points(expected_values)
    assert reward[1] == 0
    assert reward[2] == 0
    assert reward[3] == 0
    assert not done
def test_play_excuse_in_round():
    shuffled_deck = list(np.random.RandomState(seed=1988).permutation(CARDS))
    shuffled_deck[15] = Card.DIAMOND_KING
    shuffled_deck[40] = Card.EXCUSE
    environment, observation_0 = setup_environment_for_card_phase(
        shuffled_deck=shuffled_deck)
    observation_1 = environment.step(Card.HEART_1)[0]
    observation_2 = environment.step(Card.HEART_5)[0]
    observation_3 = environment.step(Card.EXCUSE)[0]
    observation_4, reward, done, _ = environment.step(Card.HEART_2)

    assert observation_0.played_cards_in_round == []
    assert observation_1.played_cards_in_round == [Card.HEART_1]
    assert observation_2.played_cards_in_round == [Card.HEART_1, Card.HEART_5]
    assert observation_3.played_cards_in_round == [
        Card.HEART_1, Card.HEART_5, Card.EXCUSE
    ]

    expected_values = [Card.HEART_1, Card.HEART_5, Card.EXCUSE, Card.HEART_2]
    assert reward[-1] == compute_card_set_points(
        expected_values)  # last player's team won this round
    assert not done
def test_chelem_unannounced_and_achieved_by_other_team():
    environment = setup_environment_for_card_phase(taker=0,
                                                   shuffled_deck=CARDS)[0]
    environment.step(Card.SPADES_1)
    environment.step(Card.CLOVER_5)
    environment.step(Card.HEART_9)
    environment.step(Card.TRUMP_1)
    environment.step(Card.TRUMP_2)
    environment.step(Card.SPADES_2)
    environment.step(Card.CLOVER_6)
    environment.step(Card.HEART_10)
    environment.step(Card.TRUMP_3)
    environment.step(Card.SPADES_3)
    environment.step(Card.CLOVER_7)
    environment.step(Card.HEART_JACK)
    environment.step(Card.TRUMP_4)
    environment.step(Card.SPADES_4)
    environment.step(Card.CLOVER_8)
    environment.step(Card.HEART_RIDER)
    environment.step(Card.TRUMP_5)
    environment.step(Card.SPADES_5)
    environment.step(Card.CLOVER_9)
    environment.step(Card.HEART_QUEEN)
    environment.step(Card.TRUMP_6)
    environment.step(Card.SPADES_6)
    environment.step(Card.CLOVER_10)
    environment.step(Card.HEART_KING)
    environment.step(Card.TRUMP_7)
    environment.step(Card.SPADES_7)
    environment.step(Card.CLOVER_JACK)
    environment.step(Card.DIAMOND_1)
    environment.step(Card.DIAMOND_QUEEN)
    environment.step(Card.SPADES_8)
    environment.step(Card.CLOVER_RIDER)
    environment.step(Card.DIAMOND_2)
    environment.step(Card.DIAMOND_KING)
    environment.step(Card.SPADES_9)
    environment.step(Card.CLOVER_QUEEN)
    environment.step(Card.DIAMOND_3)
    environment.step(Card.TRUMP_8)
    environment.step(Card.SPADES_10)
    environment.step(Card.CLOVER_KING)
    environment.step(Card.DIAMOND_4)
    environment.step(Card.TRUMP_9)
    environment.step(Card.SPADES_JACK)
    environment.step(Card.HEART_1)
    environment.step(Card.DIAMOND_5)
    environment.step(Card.TRUMP_10)
    environment.step(Card.SPADES_RIDER)
    environment.step(Card.HEART_2)
    environment.step(Card.DIAMOND_6)
    environment.step(Card.TRUMP_11)
    environment.step(Card.SPADES_QUEEN)
    environment.step(Card.HEART_3)
    environment.step(Card.DIAMOND_7)
    environment.step(Card.TRUMP_12)
    environment.step(Card.SPADES_KING)
    environment.step(Card.HEART_4)
    environment.step(Card.DIAMOND_8)
    environment.step(Card.TRUMP_13)
    environment.step(Card.CLOVER_1)
    environment.step(Card.HEART_5)
    environment.step(Card.DIAMOND_9)
    environment.step(Card.TRUMP_14)
    environment.step(Card.CLOVER_2)
    environment.step(Card.HEART_6)
    environment.step(Card.DIAMOND_10)
    environment.step(Card.TRUMP_15)
    environment.step(Card.CLOVER_3)
    environment.step(Card.HEART_7)
    environment.step(Card.DIAMOND_JACK)
    environment.step(Card.TRUMP_16)
    environment.step(Card.CLOVER_4)
    environment.step(Card.HEART_8)
    reward = environment.step(Card.DIAMOND_RIDER)[1]
    assert reward[0] == -1260
    assert reward[1] == 420
    assert reward[2] == 420
    assert reward[3] == 420
def test_chelem_announced_and_failed():
    deck = copy.copy(CARDS)
    deck[70] = Card.SPADES_1
    deck[0] = Card.TRUMP_15
    environment = setup_environment_for_card_phase(taker=3,
                                                   shuffled_deck=deck,
                                                   chelem=True)[0]

    environment.step(Card.TRUMP_2)
    environment.step(Card.TRUMP_15)
    environment.step(Card.CLOVER_5)
    environment.step(Card.HEART_9)
    environment.step(Card.SPADES_2)
    environment.step(Card.CLOVER_6)
    environment.step(Card.HEART_10)
    environment.step(Card.SPADES_1)
    environment.step(Card.SPADES_3)
    environment.step(Card.CLOVER_7)
    environment.step(Card.HEART_JACK)
    environment.step(Card.TRUMP_4)
    environment.step(Card.TRUMP_5)
    environment.step(Card.SPADES_4)
    environment.step(Card.CLOVER_8)
    environment.step(Card.HEART_RIDER)
    environment.step(Card.TRUMP_6)
    environment.step(Card.SPADES_5)
    environment.step(Card.CLOVER_9)
    environment.step(Card.HEART_QUEEN)
    environment.step(Card.TRUMP_7)
    environment.step(Card.SPADES_6)
    environment.step(Card.CLOVER_10)
    environment.step(Card.HEART_KING)
    environment.step(Card.TRUMP_8)
    environment.step(Card.SPADES_7)
    environment.step(Card.CLOVER_JACK)
    environment.step(Card.DIAMOND_1)
    environment.step(Card.DIAMOND_QUEEN)
    environment.step(Card.SPADES_8)
    environment.step(Card.CLOVER_RIDER)
    environment.step(Card.DIAMOND_2)
    environment.step(Card.DIAMOND_KING)
    environment.step(Card.SPADES_9)
    environment.step(Card.CLOVER_QUEEN)
    environment.step(Card.DIAMOND_3)
    environment.step(Card.TRUMP_9)
    environment.step(Card.SPADES_10)
    environment.step(Card.CLOVER_KING)
    environment.step(Card.DIAMOND_4)
    environment.step(Card.TRUMP_10)
    environment.step(Card.SPADES_JACK)
    environment.step(Card.HEART_1)
    environment.step(Card.DIAMOND_5)
    environment.step(Card.TRUMP_11)
    environment.step(Card.SPADES_RIDER)
    environment.step(Card.HEART_2)
    environment.step(Card.DIAMOND_6)
    environment.step(Card.TRUMP_12)
    environment.step(Card.SPADES_QUEEN)
    environment.step(Card.HEART_3)
    environment.step(Card.DIAMOND_7)
    environment.step(Card.TRUMP_13)
    environment.step(Card.SPADES_KING)
    environment.step(Card.HEART_4)
    environment.step(Card.DIAMOND_8)
    environment.step(Card.TRUMP_14)
    environment.step(Card.CLOVER_1)
    environment.step(Card.HEART_5)
    environment.step(Card.DIAMOND_9)
    environment.step(Card.TRUMP_16)
    environment.step(Card.CLOVER_2)
    environment.step(Card.HEART_6)
    environment.step(Card.DIAMOND_10)
    environment.step(Card.TRUMP_1)
    environment.step(Card.CLOVER_3)
    environment.step(Card.HEART_7)
    environment.step(Card.DIAMOND_JACK)
    environment.step(Card.TRUMP_3)
    environment.step(Card.CLOVER_4)
    environment.step(Card.HEART_8)
    reward = environment.step(Card.DIAMOND_RIDER)[1]
    assert reward[0] == -104
    assert reward[1] == -104
    assert reward[2] == -104
    assert reward[3] == 312
def test_poignee():
    environment = setup_environment_for_card_phase(taker=3,
                                                   shuffled_deck=CARDS,
                                                   poignee=True)[0]
    environment.step(Card.SPADES_1)
    environment.step(Card.CLOVER_5)
    environment.step(Card.HEART_9)
    environment.step(Card.TRUMP_2)
    environment.step(Card.TRUMP_3)
    environment.step(Card.SPADES_2)
    environment.step(Card.CLOVER_6)
    environment.step(Card.HEART_10)
    environment.step(Card.TRUMP_4)
    environment.step(Card.SPADES_3)
    environment.step(Card.CLOVER_7)
    environment.step(Card.HEART_JACK)
    environment.step(Card.TRUMP_5)
    environment.step(Card.SPADES_4)
    environment.step(Card.CLOVER_8)
    environment.step(Card.HEART_RIDER)
    environment.step(Card.TRUMP_6)
    environment.step(Card.SPADES_5)
    environment.step(Card.CLOVER_9)
    environment.step(Card.HEART_QUEEN)
    environment.step(Card.TRUMP_7)
    environment.step(Card.SPADES_6)
    environment.step(Card.CLOVER_10)
    environment.step(Card.HEART_KING)
    environment.step(Card.TRUMP_8)
    environment.step(Card.SPADES_7)
    environment.step(Card.CLOVER_JACK)
    environment.step(Card.DIAMOND_1)
    environment.step(Card.DIAMOND_QUEEN)
    environment.step(Card.SPADES_8)
    environment.step(Card.CLOVER_RIDER)
    environment.step(Card.DIAMOND_2)
    environment.step(Card.DIAMOND_KING)
    environment.step(Card.SPADES_9)
    environment.step(Card.CLOVER_QUEEN)
    environment.step(Card.DIAMOND_3)
    environment.step(Card.TRUMP_9)
    environment.step(Card.SPADES_10)
    environment.step(Card.CLOVER_KING)
    environment.step(Card.DIAMOND_4)
    environment.step(Card.TRUMP_10)
    environment.step(Card.SPADES_JACK)
    environment.step(Card.HEART_1)
    environment.step(Card.DIAMOND_5)
    environment.step(Card.TRUMP_11)
    environment.step(Card.SPADES_RIDER)
    environment.step(Card.HEART_2)
    environment.step(Card.DIAMOND_6)
    environment.step(Card.TRUMP_12)
    environment.step(Card.SPADES_QUEEN)
    environment.step(Card.HEART_3)
    environment.step(Card.DIAMOND_7)
    environment.step(Card.TRUMP_13)
    environment.step(Card.SPADES_KING)
    environment.step(Card.HEART_4)
    environment.step(Card.DIAMOND_8)
    environment.step(Card.TRUMP_14)
    environment.step(Card.CLOVER_1)
    environment.step(Card.HEART_5)
    environment.step(Card.DIAMOND_9)
    environment.step(Card.TRUMP_15)
    environment.step(Card.CLOVER_2)
    environment.step(Card.HEART_6)
    environment.step(Card.DIAMOND_10)
    environment.step(Card.TRUMP_1)
    environment.step(Card.CLOVER_3)
    environment.step(Card.HEART_7)
    environment.step(Card.DIAMOND_JACK)
    environment.step(Card.TRUMP_16)
    environment.step(Card.CLOVER_4)
    environment.step(Card.HEART_8)
    reward = environment.step(Card.DIAMOND_RIDER)[1]
    assert reward[0] == -540
    assert reward[1] == -540
    assert reward[2] == -540
    assert reward[3] == 1620
Ejemplo n.º 10
0
def test_start_invalid_card_not_in_hand():
    environment, observation = setup_environment_for_card_phase()
    played_card = filter(lambda card: card not in observation.player.hand,
                         CARDS)
    with pytest.raises(FrenchTarotException):
        environment.step(played_card)
Ejemplo n.º 11
0
def test_start_invalid_action():
    environment = setup_environment_for_card_phase()[0]
    with pytest.raises(FrenchTarotException):
        environment.step(ChelemAnnouncement())
Ejemplo n.º 12
0
def test_play_complete_game():
    environment = setup_environment_for_card_phase()[0]
    environment.step(Card.HEART_1)
    environment.step(Card.HEART_KING)
    environment.step(Card.HEART_4)
    environment.step(Card.HEART_2)
    environment.step(Card.CLOVER_7)
    environment.step(Card.CLOVER_1)
    environment.step(Card.CLOVER_8)
    environment.step(Card.CLOVER_QUEEN)
    environment.step(Card.HEART_9)
    environment.step(Card.HEART_5)
    environment.step(Card.HEART_7)
    environment.step(Card.TRUMP_2)
    environment.step(Card.DIAMOND_QUEEN)
    environment.step(Card.DIAMOND_6)
    environment.step(Card.DIAMOND_5)
    environment.step(Card.DIAMOND_KING)
    environment.step(Card.SPADES_RIDER)
    environment.step(Card.SPADES_9)
    environment.step(Card.SPADES_3)
    environment.step(Card.SPADES_8)
    environment.step(Card.DIAMOND_7)
    environment.step(Card.DIAMOND_3)
    environment.step(Card.DIAMOND_10)
    environment.step(Card.DIAMOND_9)
    environment.step(Card.SPADES_6)
    environment.step(Card.SPADES_2)
    environment.step(Card.SPADES_10)
    environment.step(Card.SPADES_5)
    environment.step(Card.TRUMP_12)
    environment.step(Card.TRUMP_21)
    environment.step(Card.TRUMP_11)
    environment.step(Card.TRUMP_17)
    environment.step(Card.TRUMP_5)
    environment.step(Card.TRUMP_15)
    environment.step(Card.TRUMP_16)
    environment.step(Card.TRUMP_3)
    environment.step(Card.CLOVER_2)
    environment.step(Card.CLOVER_3)
    environment.step(Card.CLOVER_JACK)
    environment.step(Card.CLOVER_RIDER)
    environment.step(Card.CLOVER_5)
    environment.step(Card.CLOVER_6)
    environment.step(Card.CLOVER_4)
    environment.step(Card.CLOVER_9)
    environment.step(Card.DIAMOND_JACK)
    environment.step(Card.DIAMOND_1)
    environment.step(Card.TRUMP_10)
    environment.step(Card.TRUMP_14)
    environment.step(Card.SPADES_JACK)
    environment.step(Card.SPADES_4)
    environment.step(Card.SPADES_7)
    environment.step(Card.TRUMP_1)
    environment.step(Card.HEART_JACK)
    environment.step(Card.HEART_10)
    environment.step(Card.TRUMP_19)
    environment.step(Card.HEART_3)
    environment.step(Card.TRUMP_7)
    environment.step(Card.TRUMP_13)
    environment.step(Card.TRUMP_18)
    environment.step(Card.TRUMP_9)
    environment.step(Card.CLOVER_KING)
    environment.step(Card.CLOVER_10)
    environment.step(Card.DIAMOND_4)
    environment.step(Card.EXCUSE)
    environment.step(Card.HEART_6)
    environment.step(Card.HEART_8)
    environment.step(Card.DIAMOND_2)
    environment.step(Card.TRUMP_4)
    environment.step(Card.SPADES_KING)
    environment.step(Card.TRUMP_20)
    environment.step(Card.TRUMP_8)
    observation, reward, done, _ = environment.step(Card.SPADES_1)
    assert done
    assert reward[0] == -540
    assert reward[1] == 180
    assert reward[2] == 180
    assert reward[3] == 180
Ejemplo n.º 13
0
def reward(action):
    return setup_environment_for_card_phase()[0].step(action)[2]