示例#1
0
    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
示例#2
0
    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