rock_paper_scissors / tests /test_game_logic.py
trtd56's picture
Initial commit
24836e5
"""ゲームロジックのテスト"""
import pytest
from rock_paper_scissors.game.states import Hand, GameResult
from rock_paper_scissors.game.game_logic import determine_winner, get_random_hand
class TestDetermineWinner:
"""勝敗判定のテスト"""
def test_rock_beats_scissors(self):
"""グーはチョキに勝つ"""
result = determine_winner(Hand.ROCK, Hand.SCISSORS)
assert result == GameResult.WIN
def test_scissors_beats_paper(self):
"""チョキはパーに勝つ"""
result = determine_winner(Hand.SCISSORS, Hand.PAPER)
assert result == GameResult.WIN
def test_paper_beats_rock(self):
"""パーはグーに勝つ"""
result = determine_winner(Hand.PAPER, Hand.ROCK)
assert result == GameResult.WIN
def test_rock_loses_to_paper(self):
"""グーはパーに負ける"""
result = determine_winner(Hand.ROCK, Hand.PAPER)
assert result == GameResult.LOSE
def test_scissors_loses_to_rock(self):
"""チョキはグーに負ける"""
result = determine_winner(Hand.SCISSORS, Hand.ROCK)
assert result == GameResult.LOSE
def test_paper_loses_to_scissors(self):
"""パーはチョキに負ける"""
result = determine_winner(Hand.PAPER, Hand.SCISSORS)
assert result == GameResult.LOSE
def test_same_hand_is_draw(self):
"""同じ手はあいこ"""
assert determine_winner(Hand.ROCK, Hand.ROCK) == GameResult.DRAW
assert determine_winner(Hand.PAPER, Hand.PAPER) == GameResult.DRAW
assert determine_winner(Hand.SCISSORS, Hand.SCISSORS) == GameResult.DRAW
def test_unknown_hand_is_draw(self):
"""認識不可の手はあいこ"""
assert determine_winner(Hand.ROCK, Hand.UNKNOWN) == GameResult.DRAW
assert determine_winner(Hand.PAPER, Hand.UNKNOWN) == GameResult.DRAW
assert determine_winner(Hand.SCISSORS, Hand.UNKNOWN) == GameResult.DRAW
class TestGetRandomHand:
"""ランダムな手生成のテスト"""
def test_returns_valid_hand(self):
"""有効な手を返す"""
for _ in range(100):
hand = get_random_hand()
assert hand in [Hand.ROCK, Hand.PAPER, Hand.SCISSORS]
def test_returns_different_hands(self):
"""異なる手を返す(確率的テスト)"""
hands = {get_random_hand() for _ in range(100)}
# 100回試行すれば3種類全て出る確率は非常に高い
assert len(hands) == 3