public void shouldNotBeSatisfiedByHandsWithMoreThanFiveCardsButThatHaveAllTheWheelCards() { var Hand = new Hand( new string[] { "5-H", "4-C", "3-S", "2-D", "A-H", "3-D", }.Select( cardString => { var CardBuilder = new CardBuilder(); return CardBuilder.fromString(cardString); } ).ToList() ); Assert.IsFalse(Specification.isSatisfiedBy(Hand), "A Hand with more than 5 cards cannot be a Wheel!"); }
protected List<Card> theFiveCardsAre(params string[] cards) { if (cards.Length != 5) { Assert.Fail("lrn2count"); } var Cards = new List<Card>(); var CardBuilder = new CardBuilder(); foreach (string cardString in cards) { Cards.Add(CardBuilder.fromString(cardString)); } return Cards; }
protected Card makeCardFromString(string cardString) { var CardBuilder = new CardBuilder(); return CardBuilder.fromString(cardString); }
protected List<Card> asCardArray(params string[] cardStrings) { return cardStrings.Select( cardString => { var CardBuilder = new CardBuilder(); return CardBuilder.fromString(cardString); } ).ToList(); }
public object[] getSomeCardsAndTheExpectedBestHandFromThem() { object[][] data = { new object[] { new string[] {"A-S", "K-D", "K-S", "K-H", "K-D", "Q-S", "J-S", "J-H", "J-C", "10-S"}, "RoyalFlush", new string[] {"A-S", "K-S", "Q-S", "J-S", "10-S"}}, new object[] { new string[] {"10-S", "9-D", "6-S", "6-H", "6-D", "4-D", "3-S", "3-H", "3-C", "3-D"}, "FourOfAKind", new string[] {"10-S", "3-S", "3-H", "3-C", "3-D"}}, new object[] { new string[] {"A-C", "K-S", "K-H", "J-D", "6-D", "5-S", "3-S", "3-H", "3-C", "3-D"}, "FourOfAKind", new string[] {"A-C", "3-S", "3-H", "3-C", "3-D"}}, new object[] { new string[] {"A-C", "A-S", "K-H", "J-D", "6-D", "5-S", "2-S", "2-H", "2-C", "2-D"}, "FourOfAKind", new string[] {"A-S", "2-S", "2-H", "2-C", "2-D"}}, new object[] { new string[] {"K-D", "9-H", "6-S", "6-H", "6-C", "6-D", "4-D", "3-C", "2-S", "2-H"}, "FourOfAKind", new string[] {"K-D", "6-S", "6-H", "6-C", "6-D"}}, new object[] { new string[] {"K-S", "K-H", "K-C", "K-D", "Q-S", "Q-C", "7-S", "5-D", "3-S", "2-S"}, "FourOfAKind", new string[] {"K-S", "K-H", "K-C", "K-D", "Q-S"}}, new object[] { new string[] {"10-D", "8-C", "7-S", "7-H", "7-D", "6-S", "6-C", "6-D", "5-H", "3-C",}, "FullHouse", new string[] {"7-S", "7-H", "7-D", "6-S", "6-C",},}, new object[] { new string[] {"8-H", "7-C", "6-S", "4-H", "4-C", "4-D", "3-S", "2-S", "2-C", "2-D",}, "FullHouse", new string[] {"4-H", "4-C", "4-D", "2-S", "2-C",},}, new object[] { new string[] {"A-D", "10-S", "9-S", "9-H", "9-D", "8-H", "8-C", "8-D", "7-D", "6-D",}, "FullHouse", new string[] {"9-S", "9-H", "9-D", "8-H", "8-C",},}, new object[] { new string[] {"A-D", "Q-D", "8-S", "8-H", "8-C", "7-S", "7-H", "7-C", "3-H", "3-C",}, "FullHouse", new string[] {"8-S", "8-H", "8-C", "7-S", "7-H",},}, new object[] { new string[] {"A-S", "10-S", "10-H", "10-C", "8-S", "8-C", "7-H", "7-C", "7-D", "2-C",}, "FullHouse", new string[] {"10-S", "10-H", "10-C", "8-S", "8-C",},}, new object[] { new string[] {"A-S", "A-C", "A-D", "Q-H", "10-S", "10-C", "10-D", "5-S", "4-H", "2-S",}, "FullHouse", new string[] {"A-S", "A-C", "A-D", "10-S", "10-C",},}, new object[] { new string[] {"A-S", "A-H", "A-D", "K-D", "9-D", "8-S", "4-S", "4-C", "4-D", "3-S",}, "FullHouse", new string[] {"A-S", "A-H", "A-D", "4-S", "4-C",},}, new object[] { new string[] {"K-D", "Q-S", "Q-H", "Q-D", "J-H", "8-D", "3-S", "3-H", "3-D", "2-D",}, "FullHouse", new string[] {"Q-S", "Q-H", "Q-D", "3-S", "3-H",},}, new object[] { new string[] {"K-S", "K-C", "K-D", "Q-S", "J-H", "8-S", "7-S", "7-H", "7-D", "2-C",}, "FullHouse", new string[] {"K-S", "K-C", "K-D", "7-S", "7-H",},}, new object[] { new string[] {"Q-H", "J-S", "9-D", "8-S", "8-H", "8-C", "4-S", "4-H", "4-D", "2-C",}, "FullHouse", new string[] {"8-S", "8-H", "8-C", "4-S", "4-H",},}, new object[] { new string[] {"K-S", "K-C", "K-D", "Q-S", "J-H", "8-S", "7-S", "7-H", "7-D", "2-C",}, "FullHouse", new string[] {"K-S", "K-C", "K-D", "7-S", "7-H",},}, new object[] { new string[] {"A-H", "K-D", "Q-S", "Q-C", "Q-D", "10-S", "10-C", "10-D", "9-S", "9-D",}, "FullHouse", new string[] {"Q-S", "Q-C", "Q-D", "10-S", "10-C",},}, new object[] { new string[] {"A-H", "K-S", "J-S", "J-H", "J-C", "10-S", "10-H", "10-D", "7-C", "4-S",}, "FullHouse", new string[] {"J-S", "J-H", "J-C", "10-S", "10-H",},}, new object[] { new string[] {"10-D", "8-C", "7-S", "7-H", "7-D", "6-S", "6-C", "6-D", "5-H", "3-C"}, "FullHouse", new string[] {"7-S", "7-H", "7-D","6-S", "6-C",}}, new object[] { new string[] {"8-H", "7-C", "6-S", "4-H", "4-C", "4-D", "3-S", "2-S", "2-C", "2-D"}, "FullHouse", new string[] {"4-H", "4-C", "4-D","2-S", "2-C",}}, new object[] { new string[] {"A-D", "Q-D", "8-S", "8-H", "8-C", "7-S", "7-H", "7-C", "3-H", "3-C"}, "FullHouse", new string[] {"8-S", "8-H", "8-C","7-S", "7-H",}}, new object[] { new string[] {"A-D", "10-S", "9-S", "9-H", "9-D", "8-H", "8-C", "8-D", "7-D", "6-D"}, "FullHouse", new string[] {"9-S", "9-H", "9-D","8-H", "8-C",}}, new object[] { new string[] {"Q-H", "J-S", "9-D", "8-S", "8-H", "8-C", "4-S", "4-H", "4-D", "2-C"}, "FullHouse", new string[] {"8-S", "8-H", "8-C","4-S", "4-H",}}, new object[] { new string[] {"A-S", "10-S", "10-H", "10-C", "8-S", "8-C", "7-H", "7-C", "7-D", "2-C"}, "FullHouse", new string[] {"10-S", "10-H", "10-C","8-S", "8-C",}}, new object[] { new string[] {"A-S", "A-C", "A-D", "Q-H", "10-S", "10-C", "10-D", "5-S", "4-H", "2-S"}, "FullHouse", new string[] {"A-S", "A-C", "A-D","10-S", "10-C",}}, new object[] { new string[] {"A-S", "A-H", "A-D", "K-D", "9-D", "8-S", "4-S", "4-C", "4-D", "3-S"}, "FullHouse", new string[] {"A-S", "A-H", "A-D","4-S", "4-C",}}, new object[] { new string[] {"K-S", "K-C", "K-D", "Q-S", "J-H", "8-S", "7-S", "7-H", "7-D", "2-C"}, "FullHouse", new string[] {"K-S", "K-C", "K-D","7-S", "7-H",}}, new object[] { new string[] {"A-D", "Q-H", "J-H", "10-D", "9-C", "8-S", "7-C", "6-C", "5-C", "4-C",}, "Flush", new string[] {"9-C", "7-C", "6-C", "5-C", "4-C",},}, new object[] { new string[] {"A-H", "Q-D", "J-S", "9-S", "8-D", "6-D", "5-D", "4-C", "3-C", "2-D",}, "Flush", new string[] {"Q-D", "8-D", "6-D", "5-D", "2-D",},}, new object[] { new string[] {"A-S", "Q-S", "J-S", "10-C", "9-S", "8-H", "7-D", "4-H", "3-H", "2-S",}, "Flush", new string[] {"A-S", "Q-S", "J-S", "9-S", "2-S",},}, new object[] { new string[] {"A-H", "K-S", "Q-S", "J-S", "7-S", "7-C", "7-D", "5-S", "4-S", "3-S",}, "Flush", new string[] {"K-S", "Q-S", "J-S", "7-S", "5-S",},}, new object[] { new string[] {"A-S", "A-H", "A-D", "K-H", "Q-H", "9-D", "8-H", "6-H", "5-S", "4-C",}, "Flush", new string[] {"A-H","K-H", "Q-H", "8-H", "6-H",},}, new object[] { new string[] {"K-D", "Q-D", "J-S", "9-D", "8-H", "7-D", "6-D", "5-C", "4-S", "2-C",}, "Flush", new string[] {"K-D", "Q-D", "9-D", "7-D", "6-D",},}, new object[] { new string[] {"K-D", "Q-S", "J-S", "10-S", "9-S", "7-S", "6-D", "5-S", "3-S", "2-C",}, "Flush", new string[] {"Q-S", "J-S", "10-S", "9-S", "7-S",},}, new object[] { new string[] {"K-S", "Q-S", "J-D", "10-S", "9-D", "8-H", "7-S", "6-S", "5-H", "4-S",}, "Flush", new string[] {"K-S", "Q-S", "10-S", "7-S", "6-S",},}, new object[] { new string[] {"A-H", "K-H", "Q-H", "J-S", "10-H", "9-S", "8-S", "7-H", "6-S", "2-H",}, "Flush", new string[] {"A-H", "K-H", "Q-H", "10-H", "7-H"},}, new object[] { new string[] {"A-C", "K-C", "J-S", "J-H", "J-C", "10-S", "9-H", "8-C", "7-C", "6-D",}, "Flush", new string[] {"A-C", "K-C", "J-C", "8-C", "7-C"},}, new object[] { new string[] {"A-S", "K-D", "Q-S", "J-D", "10-S", "7-H", "5-S", "5-C", "5-D", "4-S",}, "Flush", new string[] {"A-S", "Q-S", "10-S", "5-S", "4-S"},}, new object[] { new string[] {"A-D", "K-C", "Q-C", "J-D", "10-C", "7-H", "7-C", "7-D", "6-D", "2-D",}, "Flush", new string[] {"A-D", "J-D", "7-D", "6-D", "2-D"},}, new object[] { new string[] {"Q-S", "Q-H", "Q-C", "J-H", "10-C", "9-C", "8-C", "5-C", "3-C", "2-C",}, "Flush", new string[] {"Q-C", "10-C", "9-C", "8-C", "5-C"},}, new object[] { new string[] {"A-C", "10-H", "9-S", "8-C", "7-S", "6-S", "5-D", "4-D", "3-D", "2-C",}, "Straight", new string[] {"10-H", "9-S", "8-C", "7-S", "6-S",},}, new object[] { new string[] {"A-C", "K-S", "Q-H", "J-D", "10-H", "9-H", "8-C", "6-C", "4-H", "2-S",}, "Straight", new string[] {"A-C", "K-S", "Q-H", "J-D", "10-H",},}, new object[] { new string[] {"K-C", "J-H", "10-S", "9-C", "8-H", "7-S", "6-H", "5-D", "3-S", "2-C",}, "Straight", new string[] {"J-H", "10-S", "9-C", "8-H", "7-S",},}, new object[] { new string[] {"A-D", "K-D", "Q-S", "J-H", "10-H", "6-S", "5-S", "4-D", "3-H", "2-H",}, "Straight", new string[] {"A-D", "K-D", "Q-S", "J-H", "10-H",},}, new object[] { new string[] {"J-C", "10-S", "7-D", "6-S", "5-H", "4-S", "4-H", "4-D", "3-C", "2-H",}, "Straight", new string[] {"7-D", "6-S", "5-H", "4-S", "3-C",},}, new object[] { new string[] {"K-H", "10-H", "9-C", "8-S", "8-C", "8-D", "7-S", "6-S", "5-H", "4-D",}, "Straight", new string[] {"10-H", "9-C", "8-S", "7-S", "6-S",},}, new object[] { new string[] {"K-S", "K-C", "K-D", "Q-S", "9-H", "6-H", "5-D", "4-C", "3-S", "2-D",}, "Straight", new string[] {"6-H", "5-D", "4-C", "3-S", "2-D",},}, new object[] { new string[] {"Q-S", "J-S", "J-C", "J-D", "10-H", "6-S", "5-H", "4-C", "3-H", "2-C",}, "Straight", new string[] {"6-S", "5-H", "4-C", "3-H", "2-C",},}, new object[] { new string[] {"Q-S", "J-S", "J-H", "J-D", "8-C", "7-S", "6-H", "5-C", "4-D", "3-S",}, "Straight", new string[] {"8-C", "7-S", "6-H", "5-C", "4-D",},}, new object[] { new string[] {"A-C", "10-H", "9-S", "8-C", "7-S", "6-S", "5-D", "4-D", "3-D", "2-C"}, "Straight", new string[] {"10-H", "9-S", "8-C", "7-S", "6-S"},}, new object[] { new string[] {"A-C", "K-C", "4-S", "5-H", "J-C", "10-S", "9-H", "8-D", "7-C", "6-D"}, "Straight", new string[] {"J-C", "10-S", "9-H", "8-D", "7-C",}}, new object[] { new string[] {"A-C", "K-S", "Q-H", "J-D", "10-H", "9-H", "8-C", "6-C", "4-H", "2-S"}, "Straight", new string[] {"A-C", "K-S", "Q-H", "J-D", "10-H",},}, new object[] { new string[] {"A-H", "K-C", "Q-C", "J-D", "10-C", "7-H", "7-C", "7-D", "6-D", "2-D"}, "Straight", new string[] {"A-H", "K-C", "Q-C", "J-D", "10-C",}}, new object[] { new string[] {"A-D", "K-D", "Q-S", "J-H", "10-H", "6-S", "5-S", "4-D", "3-H", "2-H"}, "Straight", new string[] {"A-D", "K-D", "Q-S", "J-H", "10-H",},}, new object[] { new string[] {"A-C", "K-D", "Q-S", "J-D", "10-S", "7-H", "5-S", "5-C", "5-D", "4-S"}, "Straight", new string[] {"A-C", "K-D", "Q-S", "J-D", "10-S",}}, new object[] { new string[] {"J-C", "10-S", "7-D", "6-S", "5-H", "4-S", "4-H", "4-D", "3-C", "2-H"}, "Straight", new string[] {"7-D", "6-S", "5-H", "4-S", "3-C",}}, new object[] { new string[] {"K-C", "J-H", "10-S", "9-C", "8-H", "7-S", "6-H", "5-D", "3-S", "2-C"}, "Straight", new string[] {"J-H", "10-S", "9-C", "8-H", "7-S",}}, new object[] { new string[] {"K-H", "10-H", "9-C", "8-S", "8-C", "8-D", "7-S", "6-S", "5-H", "4-D"}, "Straight", new string[] {"10-H", "9-C", "8-S", "7-S", "6-S",}}, new object[] { new string[] {"K-S", "K-C", "K-D", "Q-S", "9-H", "6-H", "5-D", "4-C", "3-S", "2-D"}, "Straight", new string[] {"6-H", "5-D", "4-C", "3-S", "2-D",}}, new object[] { new string[] {"K-D", "Q-D", "J-S", "9-D", "8-H", "7-D", "6-D", "5-C", "4-S", "2-C"}, "Flush", new string[] {"K-D", "Q-D", "9-D", "7-D", "6-D",}}, new object[] { new string[] {"K-D", "Q-S", "J-S", "10-S", "9-S", "7-S", "6-D", "5-S", "3-S", "2-C"}, "Flush", new string[] {"Q-S", "J-S", "10-S", "9-S", "7-S",}}, new object[] { new string[] {"K-S", "Q-S", "J-D", "10-S", "9-D", "8-H", "7-S", "6-S", "5-H", "4-S"}, "Flush", new string[] {"K-S", "Q-S", "10-S", "7-S", "6-S",}}, new object[] { new string[] {"A-D", "Q-H", "J-H", "10-D", "9-C", "8-S", "7-C", "6-C", "5-C", "4-C"}, "Flush", new string[] {"9-C","7-C", "6-C", "5-C", "4-C",}}, new object[] { new string[] {"A-H", "K-H", "Q-H", "J-S", "10-H", "9-S", "8-S", "7-H", "6-S", "2-H"}, "Flush", new string[] {"A-H", "K-H", "Q-H", "10-H", "7-H",},}, new object[] { new string[] {"A-H", "K-S", "Q-S", "J-S", "7-S", "7-C", "7-D", "5-S", "4-S", "3-S"}, "Flush", new string[] {"K-S", "Q-S", "J-S", "7-S", "5-S",}}, new object[] { new string[] {"A-H", "Q-D", "J-S", "9-S", "8-D", "6-D", "5-D", "4-C", "3-C", "2-D"}, "Flush", new string[] {"Q-D","8-D", "6-D", "5-D", "2-D",}}, new object[] { new string[] {"A-S", "A-H", "A-D", "K-H", "Q-H", "9-D", "8-H", "6-H", "5-S", "4-C"}, "Flush", new string[] {"A-H", "K-H", "Q-H", "8-H", "6-H",}}, new object[] { new string[] {"A-S", "Q-S", "J-S", "10-C", "9-S", "8-H", "7-D", "4-H", "3-H", "2-S"}, "Flush", new string[] {"A-S", "Q-S", "J-S","9-S", "2-S",}}, }; return (object[]) data.Select( datum => { string[] cardStrings = (string[]) datum[0]; string[] expectedCardStrings = (string[]) datum[2]; List<Card> ProvidedCards = cardStrings.Select( cardString => { var cb = new CardBuilder(); return cb.fromString(cardString); } ).ToList(); List<Card> ExpectedCards = expectedCardStrings.Select( cardString => { var cb = new CardBuilder(); return cb.fromString(cardString); } ).ToList(); string cardClass = (string) datum[1]; var Instantiator = new Dictionary<string, Func<List<Card>, Hand>> { {"Flush", cards => { return new Flush(cards); } }, {"FourOfAKind", cards => { return new FourOfAKind(cards); } }, {"FullHouse", cards => { return new FullHouse(cards); } }, {"HighCard", cards => { return new HighCard(cards); } }, {"RoyalFlush", cards => { return new RoyalFlush(cards); } }, {"SteelWheel", cards => { return new SteelWheel(cards); } }, {"Straight", cards => { return new Straight(cards); } }, {"StraightFlush", cards => { return new StraightFlush(cards); } }, {"ThreeOfAKind", cards => { return new ThreeOfAKind(cards); } }, {"TwoOfAKind", cards => { return new TwoOfAKind(cards); } }, {"TwoPair", cards => { return new TwoPair(cards); } }, {"Wheel", cards => { return new Wheel(cards); } }, }; return new object[] { ProvidedCards, Instantiator[cardClass].Invoke(ExpectedCards) }; } ).ToArray(); }
public void shouldBeAbleToIdentifyFourOfAKindWhereHighCardIsNotOneOfTheFourOfAKind() { var ProvidedCards = new string[] {"K-C", "Q-S", "J-H", "9-D", "6-D", "5-S", "3-S", "3-H", "3-C", "3-D"}.Select( cardString => { var cb = new CardBuilder(); return cb.fromString(cardString); } ).ToList(); var ExpectedBestHand = new FourOfAKind( new string[] {"K-C", "3-S", "3-H", "3-C", "3-D"}.Select( cardString => { var cb = new CardBuilder(); return cb.fromString(cardString); } ).ToList() ); IdentifiedHand = HandIdentifier.identify(ProvidedCards); Assert.AreEqual(ExpectedBestHand, IdentifiedHand, "{0} was expected but {1} was identified", ExpectedBestHand, IdentifiedHand); }
public void setUp() { CardBuilder = new CardBuilder(); }