async def test_ranking_order(self, get_games): games = [] get_games.return_value = (future := asyncio.Future()) future.set_result(games) ids = [id for id in range(8)] [_add_game(games, ids) for _ in range(5)] topic = "@SuperCashBrosLeftForDead(history: 'patched')" lobby = Lobby(bot(), channel(topic=topic)) for id in range(8): await lobby.ready(member(id)) inactive_rank = get_ranks(games, Season.all_time()) active_rank = get_ranks(games, Season.current()) def get_player_rank(p) -> int: if active_rank and p in active_rank: return active_rank[p] if p in inactive_rank: return inactive_rank[p] return 2000 matches = lobby.get_matches() await rank(matches, get_player_rank) last_diff = -1 for m in matches: m = list(m) mean_1 = mean([get_player_rank(p.member.id) for p in list(m[0])]) mean_2 = mean([get_player_rank(p.member.id) for p in list(m[1])]) next_diff = abs(mean_1 - mean_2) assert next_diff >= last_diff last_diff = next_diff
async def test_get_matches(self): topic = "@teams([4, 4])" lobby = Lobby(bot(), channel(topic=topic)) for _ in range(8): await lobby.ready(member()) seen = set() matches = iter(lobby.get_matches()) for _ in range(35): # 35 times: (8 choose 4) / 2 match = next(matches) assert len(match) == 2 assert match not in seen seen.add(match) final = next(matches, None) assert final is None