Exemple #1
0
    def test_first_server_served_first(self):
        match = tennis.Match(sets=[
            tennis.Set(games=[tennis.Game()]),
            tennis.Set(games=[tennis.Game()] * 2),
            tennis.Set(games=[tennis.Game()] * 3),
            tennis.Set(games=[tennis.Game()] * 4)
        ])

        self.assertEqual(list(match.first_server_served_first),
                         [True, False, False, True])
Exemple #2
0
    def test_first_server_to_serve(self):
        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape(
                        'No server is to serve the next point because the set is over.'
                    ))):
            tennis.Set(games=[
                tennis.Game(server_points=4),
                tennis.Game(returner_points=4)
            ],
                       target_games=2).first_server_to_serve()

        self.assertTrue(
            tennis.Set(games=[tennis.Tiebreak(
                first_server_points=0)]).first_server_to_serve())
        self.assertFalse(
            tennis.Set(games=[tennis.Tiebreak(
                first_server_points=1)]).first_server_to_serve())
        self.assertFalse(
            tennis.Set(games=[tennis.Tiebreak(
                first_server_points=2)]).first_server_to_serve())
        self.assertTrue(
            tennis.Set(games=[tennis.Tiebreak(
                first_server_points=3)]).first_server_to_serve())

        self.assertTrue(
            tennis.Set(games=[tennis.Game()]).first_server_to_serve())
        self.assertFalse(
            tennis.Set(games=[tennis.Game()] * 2).first_server_to_serve())
        self.assertTrue(
            tennis.Set(games=[tennis.Game()] * 3).first_server_to_serve())
Exemple #3
0
    def test_init_inconsistent_tiebreak_args(self):
        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape(
                        'tiebreak_games and tiebreak_points must both be None or non-None.'
                    ))):
            tennis.Set(tiebreak_games=1, tiebreak_points=None)

        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape(
                        'tiebreak_games and tiebreak_points must both be None or non-None.'
                    ))):
            tennis.Set(tiebreak_games=None, tiebreak_points=1)
Exemple #4
0
    def test_init_negative_points(self):
        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape('Point scores must be non-negative.'))):
            tennis.Set(target_games=-1)

        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape('Point scores must be non-negative.'))):
            tennis.Set(tiebreak_games=-1, tiebreak_points=1)

        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape('Point scores must be non-negative.'))):
            tennis.Set(tiebreak_games=1, tiebreak_points=-1)
Exemple #5
0
    def test_init_final_set(self):
        match = tennis.Match(sets=None,
                             target_sets=1,
                             target_games=2,
                             deciding_point=False,
                             tiebreak_games=3,
                             tiebreak_points=4,
                             final_set_target_games=5,
                             final_set_deciding_point=True,
                             final_set_tiebreak_games=6,
                             final_set_tiebreak_points=7)

        self.assertEqual(match.sets, [
            tennis.Set(games=[
                tennis.Game(
                    server_points=0, returner_points=0, deciding_point=True)
            ],
                       target_games=5,
                       deciding_point=True,
                       tiebreak_games=6,
                       tiebreak_points=7)
        ])
        self.assertEqual(match.target_sets, 1)
        self.assertEqual(match.target_games, 2)
        self.assertFalse(match.deciding_point)
        self.assertEqual(match.tiebreak_games, 3)
        self.assertEqual(match.tiebreak_points, 4)
        self.assertEqual(match.final_set_target_games, 5)
        self.assertTrue(match.final_set_deciding_point)
        self.assertEqual(match.final_set_tiebreak_games, 6)
        self.assertEqual(match.final_set_tiebreak_points, 7)
Exemple #6
0
 def test_init_args(self):
     with self.assertRaisesRegex(
             TypeError, '^{}$'.format(
                 re.escape(
                     '__init__() takes 1 positional argument but 2 were given'
                 ))):
         tennis.Set([tennis.Game(server_points=1, returner_points=2)])
Exemple #7
0
    def test_init_no_args(self):
        zet = tennis.Set()

        self.assertEqual(zet.games,
                         [tennis.Game(server_points=0, returner_points=0)])
        self.assertEqual(zet.target_games, 6)
        self.assertFalse(zet.deciding_point)
        self.assertEqual(zet.tiebreak_games, 6)
        self.assertEqual(zet.tiebreak_points, 7)
Exemple #8
0
    def test_init_first_game(self):
        zet = tennis.Set(games=None,
                         deciding_point=False,
                         tiebreak_games=1,
                         tiebreak_points=2)

        self.assertEqual(zet.games, [tennis.Game(deciding_point=False)])
        self.assertEqual(zet.tiebreak_games, 1)
        self.assertEqual(zet.tiebreak_points, 2)

        zet = tennis.Set(games=None,
                         deciding_point=True,
                         tiebreak_games=None,
                         tiebreak_points=None)

        self.assertEqual(zet.games, [tennis.Game(deciding_point=True)])
        self.assertIsNone(zet.tiebreak_games)
        self.assertIsNone(zet.tiebreak_points)
Exemple #9
0
    def test_test_init_first_tiebreak(self):
        zet = tennis.Set(games=None, tiebreak_games=0, tiebreak_points=3)

        self.assertEqual(zet.games, [
            tennis.Tiebreak(first_server_points=0,
                            first_returner_points=0,
                            target_points=3)
        ])
        self.assertEqual(zet.tiebreak_games, 0)
        self.assertEqual(zet.tiebreak_points, 3)
Exemple #10
0
    def test_init_kwargs(self):
        match = tennis.Match(final_set_tiebreak_points=1,
                             final_set_tiebreak_games=2,
                             final_set_deciding_point=True,
                             final_set_target_games=3,
                             tiebreak_points=4,
                             tiebreak_games=5,
                             deciding_point=True,
                             target_games=6,
                             target_sets=7,
                             sets=[tennis.Set()])

        self.assertEqual(match.sets, [tennis.Set()])
        self.assertEqual(match.target_sets, 7)
        self.assertEqual(match.target_games, 6)
        self.assertTrue(match.deciding_point)
        self.assertEqual(match.tiebreak_games, 5)
        self.assertEqual(match.tiebreak_points, 4)
        self.assertEqual(match.final_set_target_games, 3)
        self.assertTrue(match.final_set_deciding_point)
        self.assertEqual(match.final_set_tiebreak_games, 2)
        self.assertEqual(match.final_set_tiebreak_points, 1)
Exemple #11
0
    def test_init_kwargs(self):
        zet = tennis.Set(
            tiebreak_points=1,
            tiebreak_games=2,
            deciding_point=True,
            target_games=3,
            games=[tennis.Game(server_points=3, returner_points=4)])

        self.assertEqual(zet.games,
                         [tennis.Game(server_points=3, returner_points=4)])
        self.assertEqual(zet.target_games, 3)
        self.assertTrue(zet.deciding_point)
        self.assertEqual(zet.tiebreak_games, 2)
        self.assertEqual(zet.tiebreak_points, 1)
Exemple #12
0
    def test_sets(self):
        sets = []
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 0)
        self.assertEqual(match.first_returner_sets(), 0)

        sets.append(
            tennis.Set(games=[
                tennis.Game(server_points=4),
                tennis.Game(returner_points=4)
            ],
                       target_games=2))
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 1)
        self.assertEqual(match.first_returner_sets(), 0)

        sets.append(
            tennis.Set(games=[tennis.Tiebreak(first_returner_points=7)],
                       tiebreak_games=0))
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 1)
        self.assertEqual(match.first_returner_sets(), 1)

        sets.append(
            tennis.Set(games=[
                tennis.Game(server_points=4),
                tennis.Game(returner_points=4)
            ],
                       target_games=2))
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 1)
        self.assertEqual(match.first_returner_sets(), 2)

        sets.append(
            tennis.Set(games=[tennis.Tiebreak(first_returner_points=7)],
                       tiebreak_games=0))
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 2)
        self.assertEqual(match.first_returner_sets(), 2)

        sets.append(tennis.Set())
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 2)
        self.assertEqual(match.first_returner_sets(), 2)

        sets.append(tennis.Set())
        match = tennis.Match(sets=sets)

        self.assertEqual(match.first_server_sets(), 2)
        self.assertEqual(match.first_returner_sets(), 2)
Exemple #13
0
    def point(self, *, first_server):
        if self.winner is not None:
            raise RuntimeError(
                'Cannot advance this match\'s score because the match is over.'
            )

        set_winner = self.sets[-1].point(first_server=list(
            self.first_server_served_first)[-1] == first_server)
        if set_winner is None:
            return None

        self.winner = self._compute_winner()

        if self.winner is not None:
            return self.winner

        if len(self.sets) == 2 * (self.target_sets - 1):
            self.sets.append(
                tennis.Set(games=None,
                           target_games=self.final_set_target_games,
                           deciding_point=self.final_set_deciding_point,
                           tiebreak_games=self.final_set_tiebreak_games,
                           tiebreak_points=self.final_set_tiebreak_points))
        else:
            self.sets.append(
                tennis.Set(games=None,
                           target_games=self.target_games,
                           deciding_point=self.deciding_point,
                           tiebreak_games=self.tiebreak_games,
                           tiebreak_points=self.tiebreak_points))

        self.first_server_served_first = tuple(
            list(self.first_server_served_first) + [
                self.first_server_served_first[-1] != bool(
                    len(self.sets[-2].games) % 2)
            ])
Exemple #14
0
 def test_repr(self):
     self.assertEqual(
         repr(
             tennis.Match(sets=[
                 tennis.Set(games=[
                     tennis.Game(server_points=1,
                                 returner_points=2,
                                 deciding_point=True)
                 ],
                            target_games=3,
                            deciding_point=True,
                            tiebreak_games=4,
                            tiebreak_points=5)
             ],
                          target_sets=6,
                          target_games=3,
                          deciding_point=True,
                          tiebreak_games=4,
                          tiebreak_points=5,
                          final_set_target_games=7,
                          final_set_deciding_point=False,
                          final_set_tiebreak_games=8,
                          final_set_tiebreak_points=9)), 'Match('
         'sets=[Set('
         'games=[Game(server_points=1, returner_points=2, deciding_point=True)], '
         'target_games=3, '
         'deciding_point=True, '
         'tiebreak_games=4, '
         'tiebreak_points=5'
         ')], '
         'target_sets=6, '
         'target_games=3, '
         'deciding_point=True, '
         'tiebreak_games=4, '
         'tiebreak_points=5, '
         'final_set_target_games=7, '
         'final_set_deciding_point=False, '
         'final_set_tiebreak_games=8, '
         'final_set_tiebreak_points=9'
         ')')
Exemple #15
0
    def test_init_no_args(self):
        match = tennis.Match()

        self.assertEqual(match.sets, [
            tennis.Set(games=[
                tennis.Game(
                    server_points=0, returner_points=0, deciding_point=False)
            ],
                       target_games=6,
                       deciding_point=False,
                       tiebreak_games=6,
                       tiebreak_points=7)
        ])
        self.assertEqual(match.target_sets, 2)
        self.assertEqual(match.target_games, 6)
        self.assertFalse(match.deciding_point)
        self.assertEqual(match.tiebreak_games, 6)
        self.assertEqual(match.tiebreak_points, 7)
        self.assertEqual(match.final_set_target_games, 6)
        self.assertFalse(match.final_set_deciding_point)
        self.assertEqual(match.final_set_tiebreak_games, 6)
        self.assertEqual(match.final_set_tiebreak_points, 7)
Exemple #16
0
    def test_first_server_to_serve(self):
        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape(
                        'No server is to serve the next point because the match is over.'
                    ))):
            tennis.Match(sets=[
                tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                           tiebreak_games=0)
            ],
                         target_sets=1,
                         tiebreak_games=0).first_server_to_serve()

        self.assertTrue(
            tennis.Match(sets=[
                tennis.Set(games=[tennis.Tiebreak(first_server_points=0)],
                           tiebreak_games=0)
            ],
                         tiebreak_games=0).first_server_to_serve())
        self.assertFalse(
            tennis.Match(sets=[
                tennis.Set(games=[tennis.Tiebreak(first_server_points=1)],
                           tiebreak_games=0)
            ],
                         tiebreak_games=0).first_server_to_serve())
        self.assertFalse(
            tennis.Match(sets=[
                tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                           tiebreak_games=0),
                tennis.Set(games=[tennis.Tiebreak(first_server_points=0)],
                           tiebreak_games=0)
            ],
                         tiebreak_games=0).first_server_to_serve())
        self.assertTrue(
            tennis.Match(sets=[
                tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                           tiebreak_games=0),
                tennis.Set(games=[tennis.Tiebreak(first_server_points=1)],
                           tiebreak_games=0)
            ],
                         tiebreak_games=0).first_server_to_serve())
Exemple #17
0
 def test_repr(self):
     self.assertEqual(
         repr(
             tennis.Set(games=[
                 tennis.Game(server_points=1,
                             returner_points=2,
                             deciding_point=True),
                 tennis.Tiebreak(first_server_points=3,
                                 first_returner_points=4,
                                 target_points=7)
             ],
                        target_games=8,
                        deciding_point=True,
                        tiebreak_games=5,
                        tiebreak_points=7)), 'Set('
         'games=['
         'Game(server_points=1, returner_points=2, deciding_point=True), '
         'Tiebreak(first_server_points=3, first_returner_points=4, target_points=7)'
         '], '
         'target_games=8, '
         'deciding_point=True, '
         'tiebreak_games=5, '
         'tiebreak_points=7'
         ')')
Exemple #18
0
 def test_winner(self):
     self.assertIsNone(tennis.Match(sets=[]).winner)
     self.assertIsNone(
         tennis.Match(sets=[
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0)
         ]).winner)
     self.assertIsNone(
         tennis.Match(sets=[
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0),
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0)
         ]).winner)
     self.assertTrue(
         tennis.Match(sets=[
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0),
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0),
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0)
         ]).winner)
     self.assertFalse(
         tennis.Match(sets=[
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0),
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0),
             tennis.Set(games=[tennis.Tiebreak(first_returner_points=7)],
                        tiebreak_games=0)
         ]).winner)
     self.assertTrue(
         tennis.Match(sets=[
             tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                        tiebreak_games=0)
         ],
                      target_sets=1).winner)
     self.assertFalse(
         tennis.Match(sets=[
             tennis.Set(games=[tennis.Tiebreak(first_returner_points=7)],
                        tiebreak_games=0)
         ],
                      target_sets=1).winner)
Exemple #19
0
    def test_point(self):
        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape(
                        'Cannot advance this match\'s score because the match is over.'
                    ))):
            tennis.Match(sets=[
                tennis.Set(games=[tennis.Tiebreak(first_server_points=7)],
                           tiebreak_games=0)
            ],
                         target_sets=1,
                         tiebreak_games=0).point(first_server=True)

        match = tennis.Match(tiebreak_games=0, tiebreak_points=2)
        self.assertIsNone(match.point(first_server=True))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=1, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        self.assertIsNone(match.point(first_server=True))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[tennis.Tiebreak(target_points=2)],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        self.assertIsNone(match.point(first_server=True))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=1, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        self.assertTrue(match.point(first_server=True))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        match = tennis.Match(sets=[
            tennis.Set(games=[
                tennis.Tiebreak(first_server_points=1, target_points=2)
            ],
                       tiebreak_games=0,
                       tiebreak_points=2)
        ],
                             target_sets=1,
                             tiebreak_games=0,
                             tiebreak_points=2)
        self.assertTrue(match.point(first_server=True))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         target_sets=1,
                         tiebreak_games=0,
                         tiebreak_points=2))
        match = tennis.Match(sets=[
            tennis.Set(games=[
                tennis.Tiebreak(first_returner_points=2, target_points=2)
            ],
                       tiebreak_games=0,
                       tiebreak_points=2),
            tennis.Set(games=[
                tennis.Tiebreak(first_returner_points=1, target_points=2)
            ],
                       tiebreak_games=0,
                       tiebreak_points=2)
        ],
                             tiebreak_games=0,
                             tiebreak_points=2,
                             final_set_target_games=3,
                             final_set_deciding_point=True,
                             final_set_tiebreak_games=4,
                             final_set_tiebreak_points=5)
        self.assertIsNone(match.point(first_server=True))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[tennis.Game(deciding_point=True)],
                           target_games=3,
                           deciding_point=True,
                           tiebreak_games=4,
                           tiebreak_points=5)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2,
                         final_set_target_games=3,
                         final_set_deciding_point=True,
                         final_set_tiebreak_games=4,
                         final_set_tiebreak_points=5))
        match = tennis.Match(tiebreak_games=0, tiebreak_points=2)
        self.assertIsNone(match.point(first_server=False))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=1, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        self.assertIsNone(match.point(first_server=False))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[tennis.Tiebreak(target_points=2)],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        self.assertIsNone(match.point(first_server=False))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=1, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        self.assertFalse(match.point(first_server=False))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2))
        match = tennis.Match(sets=[
            tennis.Set(games=[
                tennis.Tiebreak(first_returner_points=1, target_points=2)
            ],
                       tiebreak_games=0,
                       tiebreak_points=2)
        ],
                             target_sets=1,
                             tiebreak_games=0,
                             tiebreak_points=2)
        self.assertFalse(match.point(first_server=False))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_returner_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2)
            ],
                         target_sets=1,
                         tiebreak_games=0,
                         tiebreak_points=2))
        match = tennis.Match(sets=[
            tennis.Set(games=[
                tennis.Tiebreak(first_server_points=2, target_points=2)
            ],
                       tiebreak_games=0,
                       tiebreak_points=2),
            tennis.Set(games=[
                tennis.Tiebreak(first_server_points=1, target_points=2)
            ],
                       tiebreak_games=0,
                       tiebreak_points=2)
        ],
                             tiebreak_games=0,
                             tiebreak_points=2,
                             final_set_target_games=3,
                             final_set_deciding_point=True,
                             final_set_tiebreak_games=4,
                             final_set_tiebreak_points=5)
        self.assertIsNone(match.point(first_server=False))
        self.assertEqual(
            match,
            tennis.Match(sets=[
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[
                    tennis.Tiebreak(first_server_points=2, target_points=2)
                ],
                           tiebreak_games=0,
                           tiebreak_points=2),
                tennis.Set(games=[tennis.Game(deciding_point=True)],
                           target_games=3,
                           deciding_point=True,
                           tiebreak_games=4,
                           tiebreak_points=5)
            ],
                         tiebreak_games=0,
                         tiebreak_points=2,
                         final_set_target_games=3,
                         final_set_deciding_point=True,
                         final_set_tiebreak_games=4,
                         final_set_tiebreak_points=5))
Exemple #20
0
    def test_point(self):
        with self.assertRaisesRegex(
                RuntimeError, '^{}$'.format(
                    re.escape(
                        'Cannot advance this set\'s score because the set is over.'
                    ))):
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4)
            ] * 3).point(first_server=True)

        zet = tennis.Set(deciding_point=True)
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=1,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=2,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=3,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=1,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=2,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=3,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=1,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=2,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=3,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=1,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=2,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=3,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=1,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=2,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=3,
                            returner_points=0,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=1,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=2,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=3,
                            deciding_point=True)
            ],
                       deciding_point=True))
        self.assertTrue(zet.point(first_server=True))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True),
                tennis.Game(server_points=4,
                            returner_points=0,
                            deciding_point=True),
                tennis.Game(server_points=0,
                            returner_points=4,
                            deciding_point=True)
            ],
                       deciding_point=True))

        zet = tennis.Set()
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(
                games=[tennis.Game(server_points=0, returner_points=1)]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(
                games=[tennis.Game(server_points=0, returner_points=2)]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(
                games=[tennis.Game(server_points=0, returner_points=3)]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game()
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=1, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=2, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=3, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game()
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=1)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=2)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=3)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game()
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=1, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=2, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=3, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game()
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=1)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=2)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=3)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game()
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=1, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=2, returner_points=0)
            ]))
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=3, returner_points=0)
            ]))
        self.assertFalse(zet.point(first_server=False))
        self.assertEqual(
            zet,
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0)
            ]))

        zet = tennis.Set(
          games=[tennis.Game(server_points=4, returner_points=0)] * 3 + \
            [tennis.Game(server_points=3, returner_points=0)],
          tiebreak_games=2,
          tiebreak_points=3
        )
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 4 + \
              [tennis.Tiebreak(first_server_points=0, first_returner_points=0, target_points=3)],
            tiebreak_games=2,
            tiebreak_points=3
          )
        )
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 4 + \
              [tennis.Tiebreak(first_server_points=1, first_returner_points=0, target_points=3)],
            tiebreak_games=2,
            tiebreak_points=3
          )
        )
        self.assertIsNone(zet.point(first_server=True))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 4 + \
              [tennis.Tiebreak(first_server_points=2, first_returner_points=0, target_points=3)],
            tiebreak_games=2,
            tiebreak_points=3
          )
        )
        self.assertTrue(zet.point(first_server=True))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 4 + \
              [tennis.Tiebreak(first_server_points=3, first_returner_points=0, target_points=3)],
            tiebreak_games=2,
            tiebreak_points=3
          )
        )

        zet = tennis.Set(games=[
            tennis.Game(server_points=4, returner_points=0),
            tennis.Game(server_points=3, returner_points=0)
        ],
                         tiebreak_games=1,
                         tiebreak_points=2)
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 2 + \
              [tennis.Tiebreak(first_server_points=0, first_returner_points=0, target_points=2)],
            tiebreak_games=1,
            tiebreak_points=2
          )
        )
        self.assertIsNone(zet.point(first_server=False))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 2 + \
              [tennis.Tiebreak(first_server_points=0, first_returner_points=1, target_points=2)],
            tiebreak_games=1,
            tiebreak_points=2
          )
        )
        self.assertFalse(zet.point(first_server=False))
        self.assertEqual(
          zet,
          tennis.Set(
            games=[tennis.Game(server_points=4, returner_points=0)] * 2 + \
              [tennis.Tiebreak(first_server_points=0, first_returner_points=2, target_points=2)],
            tiebreak_games=1,
            tiebreak_points=2
          )
        )
Exemple #21
0
    def test_winner(self):
        self.assertIsNone(tennis.Set(
          games=[tennis.Game(server_points=4, returner_points=0)] * 2 + \
            [tennis.Tiebreak(first_server_points=0, first_returner_points=0, target_points=2)],
          tiebreak_games=1,
          tiebreak_points=2
        ).winner)

        self.assertTrue(
            tennis.Set(games=[
                tennis.Tiebreak(first_server_points=2,
                                first_returner_points=0,
                                target_points=0)
            ],
                       tiebreak_games=0,
                       tiebreak_points=0).winner)

        self.assertFalse(tennis.Set(
          games=[tennis.Game(server_points=4, returner_points=0)] * 4 + \
            [tennis.Tiebreak(first_server_points=0, first_returner_points=4, target_points=4)],
          tiebreak_games=2,
          tiebreak_points=4
        ).winner)

        self.assertIsNone(
            tennis.Set(
                games=[tennis.Game(server_points=4, returner_points=0)] * 10 +
                [tennis.Game()],
                tiebreak_games=None,
                tiebreak_points=None).winner)

        self.assertIsNone(
            tennis.Set(
                games=[tennis.Game(server_points=4, returner_points=0)] * 11 +
                [tennis.Game()],
                tiebreak_games=None,
                tiebreak_points=None).winner)

        self.assertIsNone(
            tennis.Set(
                games=[tennis.Game(server_points=4, returner_points=0)] * 12 +
                [tennis.Game()],
                tiebreak_games=None,
                tiebreak_points=None).winner)

        self.assertIsNone(
            tennis.Set(
                games=[tennis.Game(server_points=4, returner_points=0)] * 13 +
                [tennis.Game()],
                tiebreak_games=None,
                tiebreak_points=None).winner)

        self.assertTrue(tennis.Set(
          games=[tennis.Game(server_points=4, returner_points=0)] * 13 + \
            [tennis.Game(server_points=0, returner_points=4)],
          tiebreak_games=None,
          tiebreak_points=None
        ).winner)

        self.assertIsNone(tennis.Set(
          games=[tennis.Game(server_points=4, returner_points=0)] * 12 + \
            [tennis.Game(server_points=0, returner_points=4), tennis.Game()],
          tiebreak_games=None,
          tiebreak_points=None
        ).winner)

        self.assertFalse(
            tennis.Set(
                games=[tennis.Game(server_points=4, returner_points=0)] * 12 +
                [
                    tennis.Game(server_points=0, returner_points=4),
                    tennis.Game(server_points=4, returner_points=0)
                ],
                tiebreak_games=None,
                tiebreak_points=None).winner)

        self.assertTrue(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4)
            ],
                       target_games=2).winner)

        self.assertFalse(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0)
            ],
                       target_games=2).winner)
Exemple #22
0
 def test_eq(self):
     self.assertEqual(
         tennis.Match(sets=[
             tennis.Set(games=[
                 tennis.Game(server_points=1,
                             returner_points=2,
                             deciding_point=True)
             ],
                        target_games=3,
                        deciding_point=True,
                        tiebreak_games=4,
                        tiebreak_points=5)
         ],
                      target_sets=6,
                      target_games=3,
                      deciding_point=True,
                      tiebreak_games=4,
                      tiebreak_points=5,
                      final_set_target_games=6,
                      final_set_deciding_point=False,
                      final_set_tiebreak_games=7,
                      final_set_tiebreak_points=8),
         tennis.Match(sets=[
             tennis.Set(games=[
                 tennis.Game(server_points=1,
                             returner_points=2,
                             deciding_point=True)
             ],
                        target_games=3,
                        deciding_point=True,
                        tiebreak_games=4,
                        tiebreak_points=5)
         ],
                      target_sets=6,
                      target_games=3,
                      deciding_point=True,
                      tiebreak_games=4,
                      tiebreak_points=5,
                      final_set_target_games=6,
                      final_set_deciding_point=False,
                      final_set_tiebreak_games=7,
                      final_set_tiebreak_points=8))
     self.assertNotEqual(tennis.Match(sets=None), tennis.Match(sets=[]))
     self.assertNotEqual(tennis.Match(target_sets=1),
                         tennis.Match(target_sets=2))
     self.assertNotEqual(tennis.Match(target_games=3),
                         tennis.Match(target_games=4))
     self.assertNotEqual(tennis.Match(deciding_point=True),
                         tennis.Match(deciding_point=False))
     self.assertNotEqual(tennis.Match(tiebreak_games=5),
                         tennis.Match(tiebreak_games=6))
     self.assertNotEqual(tennis.Match(tiebreak_points=7),
                         tennis.Match(tiebreak_points=8))
     self.assertNotEqual(tennis.Match(final_set_target_games=9),
                         tennis.Match(final_set_target_games=10))
     self.assertNotEqual(tennis.Match(final_set_deciding_point=True),
                         tennis.Match(final_set_deciding_point=False))
     self.assertNotEqual(tennis.Match(final_set_tiebreak_games=11),
                         tennis.Match(final_set_tiebreak_games=12))
     self.assertNotEqual(tennis.Match(final_set_tiebreak_points=13),
                         tennis.Match(final_set_tiebreak_points=14))
Exemple #23
0
    def test_first_returner_games(self):
        self.assertEqual(tennis.Set().first_returner_games(), 0)
        self.assertEqual(
            tennis.Set(games=[tennis.Game(server_points=0, returner_points=4)
                              ]).first_returner_games(), 1)
        self.assertEqual(
            tennis.Set(games=[tennis.Game(server_points=4, returner_points=0)
                              ]).first_returner_games(), 0)

        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game()
            ]).first_returner_games(), 1)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=0, returner_points=4)
            ]).first_returner_games(), 1)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0)
            ]).first_returner_games(), 2)

        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Tiebreak(first_server_points=0,
                                first_returner_points=0,
                                target_points=7)
            ]).first_returner_games(), 2)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Tiebreak(first_server_points=0,
                                first_returner_points=7,
                                target_points=7)
            ]).first_returner_games(), 3)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=0, returner_points=4),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Tiebreak(first_server_points=7,
                                first_returner_points=0,
                                target_points=7)
            ]).first_returner_games(), 2)

        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game()
            ]).first_returner_games(), 0)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=0, returner_points=4)
            ]).first_returner_games(), 0)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=4, returner_points=0)
            ]).first_returner_games(), 1)

        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Tiebreak(first_server_points=0,
                                first_returner_points=0,
                                target_points=7)
            ]).first_returner_games(), 1)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Tiebreak(first_server_points=0,
                                first_returner_points=7,
                                target_points=7)
            ]).first_returner_games(), 2)
        self.assertEqual(
            tennis.Set(games=[
                tennis.Game(server_points=4, returner_points=0),
                tennis.Game(server_points=4, returner_points=0),
                tennis.Tiebreak(first_server_points=7,
                                first_returner_points=0,
                                target_points=7)
            ]).first_returner_games(), 1)
Exemple #24
0
    def __init__(self,
                 *,
                 sets=None,
                 target_sets=2,
                 target_games=6,
                 deciding_point=False,
                 tiebreak_games=6,
                 tiebreak_points=7,
                 final_set_target_games=6,
                 final_set_deciding_point=False,
                 final_set_tiebreak_games=6,
                 final_set_tiebreak_points=7):
        # TODO(abw333): validate sets

        if target_sets < 1:
            raise RuntimeError('target_sets must be at least 1.')

        if min(target_games, final_set_target_games) < 0:
            raise RuntimeError('Point scores must be non-negative.')

        if (tiebreak_games is None) != (tiebreak_points is None):
            raise RuntimeError(
                'tiebreak_games and tiebreak_points must both be None or non-None.'
            )

        if (final_set_tiebreak_games is None) != (final_set_tiebreak_points is
                                                  None):
            raise RuntimeError(
                'final_set_tiebreak_games and final_set_tiebreak_points must both be None or non-None.'
            )

        if tiebreak_games is not None and min(tiebreak_games,
                                              tiebreak_points) < 0:
            raise RuntimeError('Point scores must be non-negative.')

        if final_set_tiebreak_games is not None:
            if min(final_set_tiebreak_games, final_set_tiebreak_points) < 0:
                raise RuntimeError('Point scores must be non-negative.')

        if sets is not None:
            self.sets = sets
        elif target_sets == 1:
            self.sets = [
                tennis.Set(games=None,
                           target_games=final_set_target_games,
                           deciding_point=final_set_deciding_point,
                           tiebreak_games=final_set_tiebreak_games,
                           tiebreak_points=final_set_tiebreak_points)
            ]
        else:
            self.sets = [
                tennis.Set(games=None,
                           target_games=target_games,
                           deciding_point=deciding_point,
                           tiebreak_games=tiebreak_games,
                           tiebreak_points=tiebreak_points)
            ]

        self.target_sets = target_sets
        self.target_games = target_games
        self.deciding_point = deciding_point
        self.tiebreak_games = tiebreak_games
        self.tiebreak_points = tiebreak_points
        self.final_set_target_games = final_set_target_games
        self.final_set_deciding_point = final_set_deciding_point
        self.final_set_tiebreak_games = final_set_tiebreak_games
        self.final_set_tiebreak_points = final_set_tiebreak_points
        self.first_server_served_first = tuple(
            self._compute_first_server_served_first())
        self.winner = self._compute_winner()
Exemple #25
0
 def test_eq(self):
     self.assertEqual(
         tennis.Set(games=[
             tennis.Game(server_points=1,
                         returner_points=2,
                         deciding_point=True)
         ],
                    target_games=4,
                    deciding_point=True,
                    tiebreak_games=2,
                    tiebreak_points=3),
         tennis.Set(games=[
             tennis.Game(server_points=1,
                         returner_points=2,
                         deciding_point=True)
         ],
                    target_games=4,
                    deciding_point=True,
                    tiebreak_games=2,
                    tiebreak_points=3))
     self.assertNotEqual(tennis.Set(games=None),
                         tennis.Set(games=[tennis.Tiebreak()]))
     self.assertNotEqual(tennis.Set(target_games=5),
                         tennis.Set(target_games=6))
     self.assertNotEqual(tennis.Set(deciding_point=True),
                         tennis.Set(deciding_point=False))
     self.assertNotEqual(tennis.Set(tiebreak_games=1),
                         tennis.Set(tiebreak_games=2))
     self.assertNotEqual(tennis.Set(tiebreak_points=3),
                         tennis.Set(tiebreak_points=4))