修改
This commit is contained in:
86
tests/test_integration.py
Normal file
86
tests/test_integration.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""
|
||||
Integration tests for the main program
|
||||
"""
|
||||
|
||||
import pytest
|
||||
import sys
|
||||
import io
|
||||
from unittest.mock import patch
|
||||
from poker.hand_evaluator import HandEvaluator
|
||||
|
||||
|
||||
class TestMainProgram:
|
||||
"""Integration tests for main program functionality"""
|
||||
|
||||
def test_example_input(self):
|
||||
"""Test the example input from the requirements"""
|
||||
cards_str = "AsKs AhAdAc6s7s"
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
|
||||
assert str(ranking) == "Quad(A)"
|
||||
|
||||
def test_various_hand_types(self):
|
||||
"""Test various hand types work correctly end-to-end"""
|
||||
test_cases = [
|
||||
("AhKhQhJhTh2c3c", "Royal Flush"),
|
||||
("2h3h4h5h6h7s8s", "Straight Flush(6 high)"),
|
||||
("AsKs AhAdAc6s7s", "Quad(A)"),
|
||||
("AsAhAd KsKh6s7s", "Full House(A over K)"),
|
||||
("AhKh6h4h2h7s8s", "Flush(A high)"),
|
||||
("AsTsJhQdKh7s8s", "Straight(A high)"),
|
||||
("AsAhAd6s7h8s9s", "Three of a Kind(A)"),
|
||||
("AsAh6d6s7h8s9s", "Two Pair(A and 6)"),
|
||||
("AsAh6d4s2h3cJd", "Pair(A)"),
|
||||
("As6h4d8s9hJdKc", "High Card(A)"),
|
||||
]
|
||||
|
||||
for cards_str, expected_result in test_cases:
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
assert str(ranking) == expected_result, f"Failed for {cards_str}"
|
||||
|
||||
def test_wheel_straight(self):
|
||||
"""Test A-2-3-4-5 straight (wheel)"""
|
||||
cards_str = "As2h3d4c5h7s8s"
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
|
||||
assert str(ranking) == "Straight(5 high)"
|
||||
|
||||
def test_different_card_formats(self):
|
||||
"""Test different ways of writing the same cards"""
|
||||
# These should all represent the same hand
|
||||
formats = [
|
||||
"AsKsAhAdAc6s7s",
|
||||
"As Ks Ah Ad Ac 6s 7s",
|
||||
"As Ks Ah Ad Ac 6s 7s",
|
||||
]
|
||||
|
||||
expected_result = "Quad(A)"
|
||||
|
||||
for cards_str in formats:
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
assert str(ranking) == expected_result
|
||||
|
||||
def test_case_insensitive_suits(self):
|
||||
"""Test that suits are case insensitive"""
|
||||
cards_str = "AsKsAhAdAc6s7s"
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
|
||||
assert str(ranking) == "Quad(A)"
|
||||
|
||||
def test_edge_cases(self):
|
||||
"""Test edge cases and boundary conditions"""
|
||||
# All same rank except one
|
||||
cards_str = "2s2h2d2c3s4h5d"
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
assert str(ranking) == "Quad(2)"
|
||||
|
||||
# Minimum straight
|
||||
cards_str = "As2h3d4c5h6s7s"
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
# Should pick 3-4-5-6-7 over A-2-3-4-5
|
||||
assert "Straight(7 high)" in str(ranking)
|
||||
|
||||
# Maximum straight
|
||||
cards_str = "9sTsJhQdKhAsAd"
|
||||
ranking = HandEvaluator.evaluate_from_input(cards_str)
|
||||
assert str(ranking) == "Straight(A high)"
|
||||
Reference in New Issue
Block a user