namespace CamelCards.Tests; public class HandTests { [Theory] [MemberData(nameof(TestData.HandTypeTestData), MemberType = typeof(TestData))] public void Type_WhenGivenListOfCards_ItShouldReturnExpectedHandType(List cards, HandType expectedHandType) { var hand = new Hand(cards); hand.Type.Should().Be(expectedHandType); } [Theory] [MemberData(nameof(TestData.CompareToTestData), MemberType = typeof(TestData))] public void CompareTo_WhenGivenHandWithHigherType_ItShouldReturnNegative1(Hand hand, Hand otherHand, int sortResult) { hand.CompareTo(otherHand).Should().Be(sortResult); } public static class TestData { public static IEnumerable CompareToTestData => new List { new object[] { new Hand( [ new('A'), new('A'), new('A'), new('A'), new('A'), ] ), new Hand( [ new('A'), new('A'), new('8'), new('A'), new('A'), ] ), 1, }, new object[] { new Hand( [ new('A'), new('A'), new('8'), new('A'), new('A'), ] ), new Hand( [ new('A'), new('A'), new('A'), new('A'), new('A'), ] ), -1, }, new object[] { new Hand( [ new('A'), new('A'), new('A'), new('A'), new('A'), ] ), new Hand( [ new('A'), new('A'), new('A'), new('A'), new('A'), ] ), 0, }, new object[] { new Hand( [ new('3'), new('3'), new('3'), new('3'), new('2'), ] ), new Hand( [ new('2'), new('A'), new('A'), new('A'), new('A'), ] ), 1, } }; public static IEnumerable HandTypeTestData => new List { new object[] { new List { new('A'), new('A'), new('A'), new('A'), new('A'), }, HandType.FiveOfAKind, }, new object[] { new List { new('A'), new('A'), new('8'), new('A'), new('A'), }, HandType.FourOfAKind, }, new object[] { new List { new('2'), new('3'), new('3'), new('3'), new('2'), }, HandType.FullHouse, }, new object[] { new List { new('T'), new('T'), new('T'), new('9'), new('8'), }, HandType.ThreeOfAKind, }, new object[] { new List { new('2'), new('3'), new('4'), new('3'), new('2'), }, HandType.TwoPair, }, new object[] { new List { new('A'), new('2'), new('3'), new('A'), new('4'), }, HandType.OnePair, }, new object[] { new List { new('2'), new('3'), new('4'), new('5'), new('6'), }, HandType.HighCard, }, }; } }