public void Test_DetermineWinners_FullHouse_TwoWinners()
        {
            Player winner1 = new Player("Winner1", 1000);
            winner1.Cards.Add(new Card(Rank.Two, Suit.Spades));
            winner1.Cards.Add(new Card(Rank.Two, Suit.Hearts));

            Player winner2 = new Player("Winner2", 1000);
            winner2.Cards.Add(new Card(Rank.Two, Suit.Diamonds));
            winner2.Cards.Add(new Card(Rank.Two, Suit.Clubs));

            CardCollection communityCards = new CardCollection();
            communityCards.Add(new Card(Rank.Three, Suit.Hearts));
            communityCards.Add(new Card(Rank.Six, Suit.Clubs));
            communityCards.Add(new Card(Rank.King, Suit.Hearts));
            communityCards.Add(new Card(Rank.King, Suit.Spades));
            communityCards.Add(new Card(Rank.King, Suit.Diamonds));

            HandEvaluator eval = new HandEvaluator();

            Hand hand1 = eval.GetBestHand(winner1.Cards + communityCards);

            Hand hand2 = eval.GetBestHand(winner2.Cards + communityCards);

            Assert.AreEqual(0, HandEvaluator.Compare(hand1, hand2));
        }
            public EvaluationRoutine(TexasHoldemTable table)
                : base(table, TableState.Evaluating)
            {
                Evaluator = new HandEvaluator();

                ProfitOrLossCounter = new Dictionary<string, double>(Table.MAX_PLAYERS);

                PlayerHands = new Dictionary<string, Hand>(Table.MAX_PLAYERS);
            }
        public void Test_DetermineWinners_OnePairKicker_OneWinner()
        {
            Player winner = new Player("Winner", 1000);
            winner.Cards.Add(new Card(Rank.Four, Suit.Clubs));
            winner.Cards.Add(new Card(Rank.Queen, Suit.Spades));

            Player loser = new Player("Loser", 1000);
            loser.Cards.Add(new Card(Rank.Four, Suit.Diamonds));
            loser.Cards.Add(new Card(Rank.Five, Suit.Spades));

            CardCollection communityCards = new CardCollection();
            communityCards.Add(new Card(Rank.Two, Suit.Hearts));
            communityCards.Add(new Card(Rank.Nine, Suit.Clubs));
            communityCards.Add(new Card(Rank.Four, Suit.Spades));
            communityCards.Add(new Card(Rank.Ten, Suit.Diamonds));
            communityCards.Add(new Card(Rank.Jack, Suit.Diamonds));

            HandEvaluator eval = new HandEvaluator();

            Hand winnersHand = eval.GetBestHand(winner.Cards + communityCards);

            Hand losersHand = eval.GetBestHand(loser.Cards + communityCards);

            Assert.AreEqual(true, HandEvaluator.Compare(winnersHand, losersHand) == 1 && winnersHand.HighCard.Rank == Rank.Queen);
        }
        public void Test_GetBestHand_StraightHighCardIsEight()
        {
            CardCollection cards = new CardCollection();
            cards.Add(new Card(Rank.Six, Suit.Spades));
            cards.Add(new Card(Rank.Three, Suit.Hearts));
            cards.Add(new Card(Rank.Four, Suit.Diamonds));
            cards.Add(new Card(Rank.Eight, Suit.Hearts));
            cards.Add(new Card(Rank.Seven, Suit.Diamonds));
            cards.Add(new Card(Rank.Ace, Suit.Diamonds));
            cards.Add(new Card(Rank.Five, Suit.Diamonds));

            HandEvaluator eval = new HandEvaluator(cards);

            Hand bestHand = eval.GetBestHand();

            Assert.IsTrue(bestHand.BestCombination == Combination.Straight && bestHand.HighCard.Rank == Rank.Eight);
        }
        public void Test_DetermineWinner_FullHouse_OneWinner()
        {
            Player winner = new Player("Winner", 1000);
            winner.Cards.Add(new Card(Rank.King, Suit.Diamonds));
            winner.Cards.Add(new Card(Rank.Eight, Suit.Hearts));

            Player loser = new Player("Loser", 1000);
            loser.Cards.Add(new Card(Rank.Two, Suit.Spades));
            loser.Cards.Add(new Card(Rank.Seven, Suit.Hearts));

            CardCollection communityCards = new CardCollection();
            communityCards.Add(new Card(Rank.Two, Suit.Hearts));
            communityCards.Add(new Card(Rank.Two, Suit.Clubs));
            communityCards.Add(new Card(Rank.King, Suit.Hearts));
            communityCards.Add(new Card(Rank.King, Suit.Spades));
            communityCards.Add(new Card(Rank.Queen, Suit.Diamonds));

            HandEvaluator eval = new HandEvaluator();

            Hand winnersHand = eval.GetBestHand(winner.Cards + communityCards);

            Hand losersHand = eval.GetBestHand(loser.Cards + communityCards);

            Assert.AreEqual(1, HandEvaluator.Compare(winnersHand, losersHand));
        }