Skip to content

Instantly share code, notes, and snippets.

@Riggs333
Created April 22, 2022 08:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Riggs333/51c0cfc249e16bad5cf1a0fc2f33c8d9 to your computer and use it in GitHub Desktop.
Save Riggs333/51c0cfc249e16bad5cf1a0fc2f33c8d9 to your computer and use it in GitHub Desktop.
Variant 1 from Tennis Refactoring Kata
class TennisGame1:
def __init__(self, player1Name, player2Name):
self.player1Name = player1Name
self.player2Name = player2Name
self.p1points = 0
self.p2points = 0
def won_point(self, playerName):
if playerName == self.player1Name:
self.p1points += 1
else:
self.p2points += 1
def score(self):
result = ""
tempScore = 0
if (self.p1points == self.p2points):
result = {
0: "Love-All",
1: "Fifteen-All",
2: "Thirty-All",
}.get(self.p1points, "Deuce")
result = result
elif (self.p1points >= 4 or self.p2points >= 4):
minusResult = self.p1points - self.p2points
if (minusResult == 1):
result = "Advantage " + self.player1Name
elif (minusResult == -1):
result = "Advantage " + self.player2Name
elif (minusResult >= 2):
result = "Win for " + self.player1Name
else:
result = "Win for " + self.player2Name
else:
for i in range(1, 3):
if (i == 1):
tempScore = self.p1points
else:
result += "-"
tempScore = self.p2points
result += {
0: "Love",
1: "Fifteen",
2: "Thirty",
3: "Forty",
}[tempScore]
return result
import pytest
from tennis1 import TennisGame1
test_cases = [
(0, 0, "Love-All", 'player1', 'player2'),
(1, 1, "Fifteen-All", 'player1', 'player2'),
(2, 2, "Thirty-All", 'player1', 'player2'),
(3, 3, "Deuce", 'player1', 'player2'),
(4, 4, "Deuce", 'player1', 'player2'),
(1, 0, "Fifteen-Love", 'player1', 'player2'),
(0, 1, "Love-Fifteen", 'player1', 'player2'),
(2, 0, "Thirty-Love", 'player1', 'player2'),
(0, 2, "Love-Thirty", 'player1', 'player2'),
(3, 0, "Forty-Love", 'player1', 'player2'),
(0, 3, "Love-Forty", 'player1', 'player2'),
(4, 0, "Win for player1", 'player1', 'player2'),
(0, 4, "Win for player2", 'player1', 'player2'),
(2, 1, "Thirty-Fifteen", 'player1', 'player2'),
(1, 2, "Fifteen-Thirty", 'player1', 'player2'),
(3, 1, "Forty-Fifteen", 'player1', 'player2'),
(1, 3, "Fifteen-Forty", 'player1', 'player2'),
(4, 1, "Win for player1", 'player1', 'player2'),
(1, 4, "Win for player2", 'player1', 'player2'),
(3, 2, "Forty-Thirty", 'player1', 'player2'),
(2, 3, "Thirty-Forty", 'player1', 'player2'),
(4, 2, "Win for player1", 'player1', 'player2'),
(2, 4, "Win for player2", 'player1', 'player2'),
(4, 3, "Advantage player1", 'player1', 'player2'),
(3, 4, "Advantage player2", 'player1', 'player2'),
(5, 4, "Advantage player1", 'player1', 'player2'),
(4, 5, "Advantage player2", 'player1', 'player2'),
(15, 14, "Advantage player1", 'player1', 'player2'),
(14, 15, "Advantage player2", 'player1', 'player2'),
(6, 4, 'Win for player1', 'player1', 'player2'),
(4, 6, 'Win for player2', 'player1', 'player2'),
(16, 14, 'Win for player1', 'player1', 'player2'),
(14, 16, 'Win for player2', 'player1', 'player2'),
(6, 4, 'Win for One', 'One', 'player2'),
(4, 6, 'Win for Two', 'player1', 'Two'),
(6, 5, 'Advantage One', 'One', 'player2'),
(5, 6, 'Advantage Two', 'player1', 'Two'),
]
class TestTennis:
@pytest.mark.parametrize('p1Points p2Points score p1Name p2Name'.split(), test_cases)
def test_get_score_game1(self, p1Points, p2Points, score, p1Name, p2Name):
game = play_game(TennisGame1, p1Points, p2Points, p1Name, p2Name)
assert score == game.score()
def play_game(TennisGame, p1Points, p2Points, p1Name, p2Name):
game = TennisGame(p1Name, p2Name)
for i in range(max(p1Points, p2Points)):
if i < p1Points:
game.won_point(p1Name)
if i < p2Points:
game.won_point(p2Name)
return game
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment