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);
 }
Beispiel #4
0
 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);
    }