Created
April 22, 2022 08:45
-
-
Save Riggs333/51c0cfc249e16bad5cf1a0fc2f33c8d9 to your computer and use it in GitHub Desktop.
Variant 1 from Tennis Refactoring Kata
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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