Spaces:
Running
Running
| """ゲームロジックのテスト""" | |
| 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 | |