Пример #1
0
def test_stability():
    """Test that StableRoommates can recognise whether a matching is stable."""

    players = [Player("A"), Player("B"), Player("C"), Player("D")]
    a, b, c, d = players

    a.set_prefs([b, c, d])
    b.set_prefs([c, d, a])
    c.set_prefs([d, b, a])
    d.set_prefs([a, b, c])

    game = StableRoommates(players)

    matching = game.solve()
    assert game.check_stability()

    a, b, c, d = game.players

    matching[a] = c
    matching[b] = d
    matching[c] = a
    matching[d] = b

    assert not game.check_stability()

    matching[a] = None
    matching[c] = None
    assert not game.check_stability()
Пример #2
0
def test_solve(player_names, seed):
    """ Test that StableRoommates can solve games correctly when passed players.
    """

    players = make_players(player_names, seed)
    game = StableRoommates(players)

    matching = game.solve()
    assert isinstance(matching, Matching)
    assert set(matching.keys()) == set(players)
    for match in matching.values():
        assert match is None or match in players
Пример #3
0
def test_check_validity(player_names, seed):
    """ Test that StableRoommates can raise a ValueError if any players are left
    unmatched. """

    players = make_players(player_names, seed)
    game = StableRoommates(players)

    matching = game.solve()
    if None in matching.values():
        with pytest.raises(Exception):
            game.check_validity()

    else:
        assert game.check_validity()
Пример #4
0
def test_solve(player_names, seed):
    """Test that StableRoommates can solve games correctly when passed players."""

    players = make_players(player_names, seed)
    game = StableRoommates(players)

    matching = game.solve()
    assert isinstance(matching, Matching)

    players = sorted(players, key=lambda p: p.name)
    matching_keys = sorted(matching.keys(), key=lambda k: k.name)

    for game_player, player in zip(matching_keys, players):
        assert game_player.name == player.name
        assert game_player.pref_names == player.pref_names

    for match in matching.values():
        assert match is None or match in game.players