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)