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