Exemple #1
0
def test():
    print("Création d'un tournois de 4 rounds avec 8 joueurs.")
    rounds_to_test = 4
    tournois = Tournament({"rounds": rounds_to_test})
    properties = [
        {
            "surname": "DUPUIS",
            "forename": "Mélanie",
            "birthday": 22,
            "sex": False,
            "rank": 1092,
        },
        {
            "surname": "DUBOIS",
            "forename": "Natasha",
            "birthday": 20,
            "sex": False,
            "rank": 1083,
        },
        {
            "surname": "MARK",
            "forename": "Henry",
            "birthday": 42,
            "sex": True,
            "rank": 2093,
        },
        {
            "surname": "MALORY",
            "forename": "Lucie",
            "birthday": 45,
            "sex": False,
            "rank": 2099,
        },
        {
            "surname": "DUCHATEAU",
            "forename": "Edouard",
            "birthday": 57,
            "sex": True,
            "rank": 1021,
        },
        {
            "surname": "ARMAND",
            "forename": "Jacques",
            "birthday": 37,
            "sex": True,
            "rank": 2097,
        },
        {
            "surname": "LOPEZ",
            "forename": "Julia",
            "birthday": 19,
            "sex": False,
            "rank": 2000,
        },
        {
            "surname": "LYNCH",
            "forename": "David",
            "birthday": 99,
            "sex": True,
            "rank": 1999,
        },
    ]
    for _ in properties:
        tournois.add_player(_)

    # Testing object properties (player's name)
    # for player in tournois.players:
    #     print(player.surname)

    print("Jouer les tournois et simuler les résultats.")

    for _ in range(tournois.rounds + 1):
        print(f"Tour numéro {_ + 1}")
        if not tournois.new_tour():
            continue
        tournois.stop_tour()
        simulate_match(tournois)
        print("\nAffichage des résultats des joueurs:"
              "\n------------------------------------")
        for player in tournois.players:
            print(f"Affichage du score de {player.surname}"
                  f" {player.forename}: {tournois.score_player(player)}")

    # Players by rank
    print("\nAffichage des joueurs par rang:\n"
          "-------------------------------\n")
    ranked_players = tournois.list_players_by_rank()
    rank = 0
    for _ in ranked_players:
        rank += 1
        print(f"{rank} - {_.rank} {_.surname}" f" {_.forename}")

    # Players by names
    print("\nAffichage des joueurs par ordre alphabétique:\n"
          "---------------------------------------------\n")
    ranked_players = tournois.list_players_by_names()
    rank = 0
    for _ in ranked_players:
        rank += 1
        print(f"{rank} - {_.surname} {_.forename}")
#!/usr/bin/env python3
"""Test script to make sure the fixedmem player behave correctly"""
# All the "simpleplayers" can be implemented as depth 0 or 1 fixedmem players
from ast import literal_eval
from fixedmem import FixedMemPlayer, imp_simple_player
from tournament import Tournament

if __name__ == '__main__':
    tourn = Tournament(rounds=8)
    tourn.verbosity = 3
    player = imp_simple_player('male', 'contrary')
    tourn.add_player(player)
    print('name {} hist_params {} action_params {}'.format(player.name, player.hist_params, player.action_params))
    player = imp_simple_player('male', 'alt')
    #tourn.add_player(player)
    player = imp_simple_player('male', 'titfortat')
    #tourn.add_player(player)
    player = imp_simple_player('male', 'coop')
    #tourn.add_player(player)
    player = imp_simple_player('female', 'dom')
    #tourn.add_player(player)
    player = imp_simple_player('female', 'random')
    #tourn.add_player(player)
    player = imp_simple_player('female', 'random')
    tourn.add_player(player)
    player = imp_simple_player('female', 'coop')
    #tourn.add_player(player)
    print('name {} hist_params {} action_params {}'.format(player.name, player.hist_params, player.action_params))
    tourn.resolve()

Exemple #3
0
class TestMatchupPossibilities(unittest.TestCase):

    def setUp(self):
        self.tournament = Tournament(matchup_strategies.min_cost)
        self.players = [Player(str(i)) for i in range(32)]


    def test_6_players_have_1_possible_matchups(self):
        for i in range(6):
            self.tournament.add_player(self.players[i])
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_7_players_have_1_possible_matchups(self):
        for i in range(7):
            self.tournament.add_player(self.players[i])
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_players_face_closest_player_in_list(self):
        for i in range(6):
            self.tournament.add_player(self.players[i])
        matchups = self.tournament.pairings()
        self.assertTrue(matchups.players_are_matched(self.players[0], \
                                                     self.players[1]))
        self.assertTrue(matchups.players_are_matched(self.players[2], \
                                                     self.players[3]))
        self.assertTrue(matchups.players_are_matched(self.players[4], \
                                                     self.players[5]))

    def test_players_face_closest_player_in_list_after_one_round(self):
        for i in range(8):
            self.tournament.add_player(self.players[i])
        matchups = self.tournament.pairings()
        for matchup in matchups.pairs:
            self.tournament.add_result(matchup.player_a, matchup.player_b, 1, 0)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[0]), 1)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[1]), 0)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[2]), 1)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[3]), 0)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[4]), 1)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[5]), 0)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[6]), 1)
        self.assertEqual(self.tournament.match_log().times_match_win(self.players[7]), 0)
        matchups = self.tournament.pairings()
        self.assertTrue(matchups.players_are_matched(self.players[0], \
                                                     self.players[2]))
        self.assertTrue(matchups.players_are_matched(self.players[4], \
                                                     self.players[6]))
        self.assertTrue(matchups.players_are_matched(self.players[1], \
                                                     self.players[3]))
        self.assertTrue(matchups.players_are_matched(self.players[5], \
                                                     self.players[7]))

    def test_4_players_two_rounds(self):
        for i in range(4):
            self.tournament.add_player(self.players[i])
        # First round
        matchups = self.tournament.pairings()
        for matchup in matchups.pairs:
            self.tournament.add_result(matchup.player_a, matchup.player_b, 1, 0)
        ranking = self.tournament.ranking()
        self.assertEqual(ranking.entries()[0].score(), 1)
        self.assertEqual(ranking.entries()[1].score(), 1)
        self.assertEqual(ranking.entries()[2].score(), 0)
        self.assertEqual(ranking.entries()[3].score(), 0)
        # Second round
        matchups = self.tournament.pairings()
        for matchup in matchups.pairs:
            self.tournament.add_result(matchup.player_a, matchup.player_b, 1, 0)
        ranking = self.tournament.ranking()
        self.assertEqual(ranking.entries()[0].score(), 2)
        self.assertEqual(ranking.entries()[1].score(), 1)
        self.assertEqual(ranking.entries()[2].score(), 1)
        self.assertEqual(ranking.entries()[3].score(), 0)


    def test_8_players_three_rounds(self):
        for i in range(8):
            self.tournament.add_player(self.players[i])
        # First round
        matchups = self.tournament.pairings()
        for matchup in matchups.pairs:
            self.tournament.add_result(matchup.player_a, matchup.player_b, 1, 0)
        ranking = self.tournament.ranking()
        self.assertEqual(ranking.entries()[0].score(), 1)
        self.assertEqual(ranking.entries()[1].score(), 1)
        self.assertEqual(ranking.entries()[2].score(), 1)
        self.assertEqual(ranking.entries()[3].score(), 1)
        self.assertEqual(ranking.entries()[4].score(), 0)
        self.assertEqual(ranking.entries()[5].score(), 0)
        self.assertEqual(ranking.entries()[6].score(), 0)
        self.assertEqual(ranking.entries()[7].score(), 0)
        # Second round
        matchups = self.tournament.pairings()
        for matchup in matchups.pairs:
            self.tournament.add_result(matchup.player_a, matchup.player_b, 1, 0)
        ranking = self.tournament.ranking()
        self.assertEqual(ranking.entries()[0].score(), 2)
        self.assertEqual(ranking.entries()[1].score(), 2)
        self.assertEqual(ranking.entries()[2].score(), 1)
        self.assertEqual(ranking.entries()[3].score(), 1)
        self.assertEqual(ranking.entries()[4].score(), 1)
        self.assertEqual(ranking.entries()[5].score(), 1)
        self.assertEqual(ranking.entries()[6].score(), 0)
        self.assertEqual(ranking.entries()[7].score(), 0)
        # Third round
        matchups = self.tournament.pairings()
        for matchup in matchups.pairs:
            self.tournament.add_result(matchup.player_a, matchup.player_b, 1, 0)
        ranking = self.tournament.ranking()
        self.assertEqual(ranking.entries()[0].score(), 3)
        self.assertEqual(ranking.entries()[1].score(), 2)
        self.assertEqual(ranking.entries()[2].score(), 2)
        self.assertEqual(ranking.entries()[3].score(), 2)
        self.assertEqual(ranking.entries()[4].score(), 1)
        self.assertEqual(ranking.entries()[5].score(), 1)
        self.assertEqual(ranking.entries()[6].score(), 1)
        self.assertEqual(ranking.entries()[7].score(), 0)


    def test_no_players(self):
        m = self.tournament.pairings()
        self.assertEqual(m.pairs, [])
        self.assertIsNone(m.bye_player, None)
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_one_player(self):
        self.tournament.add_player(self.players[0])
        m = self.tournament.pairings()
        self.assertEqual(m.pairs, [])
        self.assertEqual(m.bye_player, self.players[0])
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_two_players(self):
        self.tournament.add_player(self.players[0])
        self.tournament.add_player(self.players[1])
        m = self.tournament.pairings()
        self.assertTrue(m.players_are_matched(self.players[0], self.players[1]))
        self.assertEqual(len(m.pairs), 1)
        self.assertIsNone(m.bye_player, None)
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_player_added_twice_should_be_the_same_as_added_once(self):
        self.tournament.add_player(self.players[0])
        self.tournament.add_player(self.players[0])
        m = self.tournament.pairings()
        self.assertEqual(m.pairs, [])
        self.assertEqual(m.bye_player, self.players[0])
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_three_players_worst_performer_gets_bye(self):
        self.tournament.add_player(self.players[0])
        self.tournament.add_player(self.players[1])
        self.tournament.add_player(self.players[2])
        self.tournament.add_result(self.players[0], self.players[1], 1, 0)
        self.tournament.add_result(self.players[1], self.players[2], 1, 0)
        m = self.tournament.pairings()
        self.assertTrue(m.players_are_matched(self.players[0], self.players[1]))
        self.assertEqual(len(m.pairs), 1)
        self.assertEqual(m.bye_player, self.players[2])
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)


    def test_byed_player_dont_get_byed_again(self):
        self.tournament.add_player(self.players[0])
        self.tournament.add_player(self.players[1])
        self.tournament.add_player(self.players[2])
        self.tournament.add_result(self.players[0], self.players[1], 1, 0)
        self.tournament.add_result(self.players[0], self.players[2], 1, 0)
        self.tournament.add_bye(self.players[1])
        self.tournament.add_bye(self.players[2])
        m = self.tournament.pairings()
        self.assertTrue(m.players_are_matched(self.players[1], self.players[2]))
        self.assertEqual(len(m.pairs), 1)
        self.assertEqual(m.bye_player, self.players[0])
        self.assertEqual(self.tournament.number_of_possible_pairings(), 1)

    def test_smoke_ranking_string(self):
        self.tournament.add_player(self.players[0])
        s = self.tournament.ranking().string()
        self.assertTrue("#1" in s)
        self.assertTrue("(0 wins)" in s)
        self.tournament.add_player(self.players[1])
        s = self.tournament.ranking().string()
        self.assertTrue("#2" in s)

    def test_smoke_pairings_string(self):
        self.tournament.add_player(self.players[0])
        self.tournament.add_player(self.players[1])
        s = self.tournament.pairings().string()
        vs_s = self.players[0].name() + ' VS. ' + self.players[1].name()
        self.assertEqual(s, vs_s)
if __name__ == '__main__':
    from argparse import ArgumentParser
    parser = ArgumentParser()
    parser.add_argument('--rounds', type=int, default=10)
    parser.add_argument('--verbosity', type=int, default=1)
    parser.add_argument('--generations', type=int, default=1)
    parser.add_argument('--mult', type=int, default=1, help='multiplier of distribution')
    parser.add_argument('--dist', help='distribution', default=None)
    args = parser.parse_args()
    if args.dist:
        dist = literal_eval(args.dist)
        if 'both' in dist:
            for sex in ['male', 'female']:
                if sex in dist:
                    dist[sex].update(dist['both'])
                else:
                    dist[sex] = dist['both']
            print(repr(dist))
    tourn = Tournament(rounds=args.rounds)
    tourn.verbosity = args.verbosity
    for sex in ['male', 'female']:
        for name in dist[sex]:
            for ii in range(dist[sex][name] * args.mult):
                tourn.add_player(create_simple_player(sex=sex, name=name))
    for gen in range(args.generations):
        tourn.resolve()
        tourn.reproduce()
        print()
        tourn.show_distribution()
        print()