public void FiveCardStudScoreTest_ThreeOfAKind()
        {
            var hand = new PlayingCardHand();

            hand.SetCards(new[]
            {
                new PlayingCard(Suit.Clubs, CardValue.Ace),
                new PlayingCard(Suit.Diamonds, CardValue.Ace),
                new PlayingCard(Suit.Hearts, CardValue.Ace),
                new PlayingCard(Suit.Hearts, CardValue.Two),
                new PlayingCard(Suit.Spades, CardValue.Three)
            });
            var expectedRank = new int[]
            {
                (int)CardValue.Ace,
                (int)CardValue.Ace,
                (int)CardValue.Ace,
                (int)CardValue.Three,
                (int)CardValue.Two,
            };

            var score = new FiveCardStudScore(hand);

            Assert.AreEqual(HandType.ThreeOfAKind, score.HandType);
            Assert.IsTrue(expectedRank.SequenceEqual(score.Rank));
        }
        public void FiveCardStudScoreTest_StraightFlush()
        {
            var hand = new PlayingCardHand();

            hand.SetCards(new[]
            {
                new PlayingCard(Suit.Hearts, CardValue.Ten),
                new PlayingCard(Suit.Hearts, CardValue.King),
                new PlayingCard(Suit.Hearts, CardValue.Queen),
                new PlayingCard(Suit.Hearts, CardValue.Jack),
                new PlayingCard(Suit.Hearts, CardValue.Ace)
            });
            var expectedRank = new int[]
            {
                (int)CardValue.Ace,
                (int)CardValue.King,
                (int)CardValue.Queen,
                (int)CardValue.Jack,
                (int)CardValue.Ten
            };

            var score = new FiveCardStudScore(hand);

            Assert.AreEqual(HandType.StraightFlush, score.HandType);
            Assert.IsTrue(expectedRank.SequenceEqual(score.Rank));
        }
        public void FiveCardStudScoreTest_InvalidHand()
        {
            var invalidCardValues = new CardValue[] { CardValue.AceLow, CardValue.None, CardValue.Joker };
            var invalidSuits      = new Suit[] { Suit.None, Suit.JokerOne, Suit.JokerTwo };

            var hand = new PlayingCardHand();

            for (var i = 0; i < invalidCardValues.Length; i++)
            {
                try
                {
                    hand.SetCards(new[]
                    {
                        new PlayingCard(Suit.Hearts, CardValue.Ten),
                        new PlayingCard(Suit.Hearts, CardValue.King),
                        new PlayingCard(Suit.Hearts, CardValue.Queen),
                        new PlayingCard(Suit.Hearts, CardValue.Jack),
                        new PlayingCard(Suit.Hearts, invalidCardValues[i])
                    });
                    var score = new FiveCardStudScore(hand);
                }
                catch (Exception e)
                {
                    continue;
                }
                Assert.Fail("Expected Exception Not Thrown!");
            }

            for (var i = 0; i < invalidSuits.Length; i++)
            {
                try
                {
                    hand.SetCards(new[]
                    {
                        new PlayingCard(Suit.Hearts, CardValue.Ten),
                        new PlayingCard(Suit.Hearts, CardValue.King),
                        new PlayingCard(Suit.Hearts, CardValue.Queen),
                        new PlayingCard(Suit.Hearts, CardValue.Jack),
                        new PlayingCard(invalidSuits[i], CardValue.Ace)
                    });
                    var score = new FiveCardStudScore(hand);
                }
                catch (Exception e)
                {
                    continue;
                }
                Assert.Fail("Expected Exception Not Thrown!");
            }
        }