This commit is contained in:
2025-09-23 09:59:55 +08:00
commit 674a7b16b7
16 changed files with 1413 additions and 0 deletions

86
tests/test_integration.py Normal file
View 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)"