def _test_match_generation(self, teams, multiplier=1): """Test even-numbered round-robin match generation (actual code).""" meetings = multiplier * 2 scheduler = RoundRobinScheduler(teams, meetings=meetings) expected = list(itertools.permutations(scheduler.teams, 2)) * multiplier matches = scheduler.generate_matches() self.assertCountEqual(expected, matches, ('Incorrect matches generated for even-numbered ' 'round-robin schedule with {} meetings for ' '{} teams.').format(meetings, teams))
def _test_match_generation(self, teams, multiplier=1): """Test even-numbered round-robin match generation (actual code).""" meetings = multiplier * 2 scheduler = RoundRobinScheduler(teams, meetings=meetings) expected = list(itertools.permutations(scheduler.teams, 2)) * multiplier matches = scheduler.generate_matches() self.assertCountEqual(expected, matches, ('Incorrect matches generated for even-numbered ' 'round-robin schedule with {} meetings for ' '{} teams.').format(meetings, teams))
def _test_match_generation(self, teams, evens=0, known_home_teams=None): """Test odd-numbered round-robin match generation.""" meetings = 2 * evens + 1 team_list = list(range(1, teams + 1)) scheduler = RoundRobinScheduler(teams, meetings=meetings) self.assertSequenceEqual(scheduler.home_teams, (), 'Default home teams not returned.') matches = scheduler.generate_matches(home_teams=known_home_teams) if known_home_teams: self.assertSequenceEqual(known_home_teams, scheduler.home_teams, 'Home teams not stored.') homes = [match[0] for match in matches] aways = [match[1] for match in matches] home_teams = 0 away_teams = 0 odd_teams = teams % 2 == 1 if odd_teams: teams += 1 team_list.append(None) more_matches = evens * (teams - 1) + int(teams / 2) less_matches = more_matches - 1 home_match_counts = collections.Counter(homes) away_match_counts = collections.Counter(aways) for team in team_list: home_count = home_match_counts[team] away_count = away_match_counts[team] self.assertTrue( (home_count == more_matches or home_count == less_matches), 'Team has an illegal number of home matches.') self.assertTrue( (away_count == more_matches or away_count == less_matches), 'Team has an illegal number of away matches.') if home_count == more_matches: if known_home_teams: self.assertIn(team, known_home_teams, 'Home team designation violated.') self.assertEqual(away_count, less_matches, 'Wrong number of away matches.') home_teams += 1 else: if known_home_teams: self.assertNotIn(team, known_home_teams, 'Away team designation violated.') self.assertEqual(away_count, more_matches, 'Wrong number of away matches.') away_teams += 1 self.assertEqual(home_teams, away_teams, 'Home and away team counts not balanced.')
def _test_match_generation(self, teams, evens=0, known_home_teams=None): """Test odd-numbered round-robin match generation.""" meetings = 2 * evens + 1 team_list = list(range(1, teams + 1)) scheduler = RoundRobinScheduler(teams, meetings=meetings) self.assertSequenceEqual(scheduler.home_teams, (), 'Default home teams not returned.') matches = scheduler.generate_matches(home_teams=known_home_teams) if known_home_teams: self.assertSequenceEqual(known_home_teams, scheduler.home_teams, 'Home teams not stored.') homes = [match[0] for match in matches] aways = [match[1] for match in matches] home_teams = 0 away_teams = 0 odd_teams = teams % 2 == 1 if odd_teams: teams += 1 team_list.append(None) more_matches = evens * (teams - 1) + int(teams / 2) less_matches = more_matches - 1 home_match_counts = collections.Counter(homes) away_match_counts = collections.Counter(aways) for team in team_list: home_count = home_match_counts[team] away_count = away_match_counts[team] self.assertTrue((home_count == more_matches or home_count == less_matches), 'Team has an illegal number of home matches.') self.assertTrue((away_count == more_matches or away_count == less_matches), 'Team has an illegal number of away matches.') if home_count == more_matches: if known_home_teams: self.assertIn(team, known_home_teams, 'Home team designation violated.') self.assertEqual(away_count, less_matches, 'Wrong number of away matches.') home_teams += 1 else: if known_home_teams: self.assertNotIn(team, known_home_teams, 'Away team designation violated.') self.assertEqual(away_count, more_matches, 'Wrong number of away matches.') away_teams += 1 self.assertEqual(home_teams, away_teams, 'Home and away team counts not balanced.')