public void FourOfAKind() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), }); var expected = new ReturnTypes.FourOfAKindReturn(true, PokerEntities.CardRank.Ten, PokerEntities.CardRank.Ace); Assert.AreEqual(expected, testHand.Cards.FourOfAKind()); }
public void FourOfAKindIsNotThreeOfAKind() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), }); var expected = new ReturnTypes.ThreeOfAKindReturn(false, null, null, null); Assert.AreEqual(expected, testHand.Cards.ThreeOfAKind()); }
public void AceStraight() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Two), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Four), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Three), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Five), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var expected = new ReturnTypes.StraightReturn(true, PokerEntities.CardRank.Five); Assert.AreEqual(expected, testHand.Cards.Straight()); }
public void Flush() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Six), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var expected = new ReturnTypes.FlushReturn(true, new List<PokerEntities.CardRank> { PokerEntities.CardRank.Ace, PokerEntities.CardRank.King, PokerEntities.CardRank.Jack, PokerEntities.CardRank.Ten, PokerEntities.CardRank.Six, }); Assert.AreEqual(expected, testHand.Cards.Flush()); }
public void SingleStraightFlushHandWinsGame() { var expected = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var fourOfAKindHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), }); var fullHouseHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), }); var flushHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Six), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var straightHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ace), }); var threeOfAKindHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), }); var twoPairHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var onePairHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Seven), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var highCardHand= new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Seven), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Two), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var asserted = new List<PokerEntities.Hand> { expected, fourOfAKindHand, fullHouseHand, flushHand, straightHand, threeOfAKindHand, twoPairHand, onePairHand, highCardHand }.CalculatePoker(); Assert.AreEqual(1, asserted.Count); Assert.AreEqual(expected, asserted.First()); }
public void TwoStraightsShareGameWin() { var straightHandOne = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ace), }); var straightHandTwo = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ace), }); var threeOfAKindHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), }); var twoPairHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var onePairHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Seven), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var highCardHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Seven), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Two), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var asserted = new List<PokerEntities.Hand> { //flipped around the natural order to demonstrate no dependency on input list order threeOfAKindHand, twoPairHand, straightHandOne, onePairHand, straightHandTwo, highCardHand }.CalculatePoker(); Assert.AreEqual(2, asserted.Count); Assert.Contains(straightHandOne, asserted); Assert.Contains(straightHandTwo, asserted); }
public void TestDeal() { var twoPairHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var onePairHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Seven), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var highCardHand = new PokerEntities.Hand(new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Seven), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Two), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); //notice we don't shuffle the deck here, and the dealing is non-regular // i.e. we give one player all his cards, the we give next player all his, and so on.. var theDeck = twoPairHand.Cards.Concat(onePairHand.Cards.Concat(highCardHand.Cards)); var dealtCards = PokerFunctions.Deal(theDeck.ToList(), 3); Assert.AreEqual(twoPairHand, dealtCards[0]); Assert.AreEqual(onePairHand,dealtCards[1]); Assert.AreEqual(highCardHand, dealtCards[2]); }
public void TwoPairIsNotPair() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Six), }); var expected = new ReturnTypes.OnePairReturn(false, null, null, null, null); Assert.AreEqual(expected, testHand.Cards.OnePair()); }
public void TwoPair() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Eight), }); var expected = new ReturnTypes.TwoPairReturn(true, PokerEntities.CardRank.Ten, PokerEntities.CardRank.Nine, PokerEntities.CardRank.Eight); Assert.AreEqual(expected, testHand.Cards.TwoPair()); }
public void TwoAceNoStraight() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Two), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Four), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Three), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ace), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var expected = new ReturnTypes.StraightReturn(false, null); Assert.AreEqual(expected, testHand.Cards.Straight()); }
public void StraightFlushIsNoFlush() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var expected = new ReturnTypes.FlushReturn(false, null); Assert.AreEqual(expected, testHand.Cards.Flush()); }
public void StraightFlush() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Eight), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Nine), }); var expected = new ReturnTypes.StraightFlushReturn(true, PokerEntities.CardRank.Queen); Assert.AreEqual(expected, testHand.Cards.StraightFlush()); }
public void Straight() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Jack), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Queen), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.King), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ace), }); var expected = new ReturnTypes.StraightReturn(true, PokerEntities.CardRank.Ace); Assert.AreEqual(expected, testHand.Cards.Straight()); }
public void NoFullHouse() { var testHand = new PokerEntities.Hand( new List<PokerEntities.Card> { new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Clubs, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Spades, PokerEntities.CardRank.Ten), new PokerEntities.Card(PokerEntities.CardSuit.Diamonds, PokerEntities.CardRank.Nine), new PokerEntities.Card(PokerEntities.CardSuit.Hearts, PokerEntities.CardRank.Ace), }); var expected = new ReturnTypes.FullHouseReturn(false, null, null); Assert.AreEqual(expected, testHand.Cards.FullHouse()); }