def test_games_for_week(self): weeks = [ week.Week(number=1, games=[game.Game(home_team=1, away_team=2)]), week.Week(number=2, games=[ game.Game(home_team=3, away_team=4), game.Game(home_team=5, away_team=6) ]) ] subject = schedule.Schedule(weeks=weeks) week_1 = subject.games_for_week(1) week_2 = subject.games_for_week(2) self.assertEqual(len(week_1), 1) self.assertEqual(len(week_2), 2) week_1_home = [g.home_team for g in week_1] week_1_away = [g.away_team for g in week_1] week_2_home = [g.home_team for g in week_2] week_2_away = [g.away_team for g in week_2] self.assertListEqual(week_1_home, [1]) self.assertListEqual(week_1_away, [2]) self.assertListEqual(week_2_home, [3, 5]) self.assertListEqual(week_2_away, [4, 6])
def test_unfavored_team(self): team_1 = team.Team(name=1, elo=1300, conference=1, division=1) team_2 = team.Team(name=2, elo=1400, conference=1, division=1) subject = game.Game(home_team=team_1, away_team=team_2) favored_team = subject.unfavored_team() self.assertEqual(favored_team.name, team_1.name) subject = game.Game(home_team=team_2, away_team=team_1) favored_team = subject.unfavored_team() self.assertEqual(favored_team.name, team_1.name)
def test_odds_even_for_equal_elos(self): team_1 = team.Team(name=1, conference=1, division=1) team_2 = team.Team(name=2, conference=1, division=1) subject = game.Game(home_team=team_1, away_team=team_2) self.assertEqual(.5, subject.home_team_win_probability())
def test_odds_unfavorable_for_unfavored_team(self): team_1 = team.Team(name=1, elo=1300, conference=1, division=1) team_2 = team.Team(name=2, elo=1400, conference=1, division=1) subject = game.Game(home_team=team_1, away_team=team_2) self.assertLess(subject.home_team_win_probability(), .5)
def _generate_week(self, week_num, teams): random.shuffle(teams) non_bye_teams = self._filter_bye_teams(teams) home_teams = non_bye_teams[:int(len(non_bye_teams)/2)] away_teams = non_bye_teams[int(len(non_bye_teams)/2):] return week.Week( number=week_num, games=[game.Game(home_team=h, away_team=a) for h, a in zip(home_teams, away_teams)] )
def test_choose_winner(self): team_1 = team.Team(name=1, elo=1300, conference=1, division=1) team_2 = team.Team(name=2, elo=1400, conference=1, division=1) subject = game.Game(home_team=team_1, away_team=team_2) winner = subject.choose_winner(subject.home_team_win_probability() / 2) self.assertTrue(winner.name == 1) winner = subject.choose_winner(1 - (subject.home_team_win_probability() / 2)) self.assertTrue(winner.name == 2)
def test_favor_favored_teams(self): subject = randomly_choose_favored_team.RandomlyChooseFavoredTeam() team_1 = team.Team(name=1, conference=1, division=1, elo=1100) team_2 = team.Team(name=2, conference=2, division=2, elo=1200) team_3 = team.Team(name=3, conference=3, division=3, elo=1300) team_4 = team.Team(name=4, conference=4, division=4, elo=1400) teams = [team_1, team_2, team_3, team_4] home_teams = teams[:int((len(teams)/2))] away_teams = teams[int(len(teams)/2):] games = [game.Game(home_team=h, away_team=a) for h, a in zip(home_teams, away_teams)] ranked_teams = subject.rank_teams(games, []) self.assertTrue(team_4 in ranked_teams[:2])
def test_favor_most_favored_team(self): subject = choose_most_favored_team.ChooseMostFavoredTeam() team_1 = team.Team(name=1, conference=1, division=1, elo=1100) team_2 = team.Team(name=2, conference=2, division=2, elo=1200) team_3 = team.Team(name=3, conference=3, division=3, elo=1350) team_4 = team.Team(name=4, conference=4, division=4, elo=1400) teams = [team_1, team_2, team_3, team_4] home_teams = teams[:int((len(teams)/2))] away_teams = teams[int(len(teams)/2):] games = [game.Game(home_team=h, away_team=a) for h, a in zip(home_teams, away_teams)] ranked_teams = subject.rank_teams(games, []) self.assertListEqual(ranked_teams, [team_3, team_4, team_2, team_1])
def test_choose_team(self): subject = player.Player(name=0, strategy=choose_randomly.ChooseRandomly()) teams = [team.Team(name=t, division=t, conference=t) for t in range(4)] games = [ game.Game(home_team=t1, away_team=t2) for t1, t2 in zip(teams[:int(len(teams) / 2)], teams[int(len(teams) / 2):]) ] choice = subject.choose_team(games) self.assertTrue(len([t for t in teams if t.name == choice]) == 1) self.assertTrue(choice in subject._teams_chosen) self.assertTrue(subject.have_chosen_team(choice))
def test_ignore_ineligible_teams(self): subject = choose_most_favored_team.ChooseMostFavoredTeam() team_1 = team.Team(name=1, conference=1, division=1, elo=1100) team_2 = team.Team(name=2, conference=2, division=2, elo=1200) team_3 = team.Team(name=3, conference=3, division=3, elo=1300) team_4 = team.Team(name=4, conference=4, division=4, elo=1400) teams = [team_1, team_2, team_3, team_4] home_teams = teams[:int((len(teams) / 2))] away_teams = teams[int(len(teams) / 2):] games = [game.Game(home_team=h, away_team=a) for h, a in zip(home_teams, away_teams)] ranked_teams = subject.rank_teams(games, [1, 4]) self.assertEqual(len(ranked_teams), 2) self.assertTrue(team_4 not in ranked_teams) self.assertEqual(ranked_teams[0], team_3)
def generate_subject_teams_games_choice_count(num_eligible_teams, num_ineligible_teams=0): subject = choose_randomly.ChooseRandomly() teams = [ team.Team(name=n, conference=1, division=1) for n in range(num_eligible_teams + num_ineligible_teams) ] home_teams = teams[:int((len(teams) / 2))] away_teams = teams[int(len(teams) / 2):] games = [ game.Game(home_team=h, away_team=a) for h, a in zip(home_teams, away_teams) ] team_choice_count = {} for t in teams: team_choice_count[t.name] = 0 return subject, teams, games, team_choice_count