public void TestInvalidCardCountException() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Two)); var board = new List <Card>(); board.Add(new Card(CardSuit.Diamonds, CardValue.Seven)); var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); }
public void TestRoyalFlushSimple() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Ace)); holeCards.Add(new Card(CardSuit.Clubs, CardValue.King)); var board = new List <Card>(); board.Add(new Card(CardSuit.Clubs, CardValue.Queen)); board.Add(new Card(CardSuit.Clubs, CardValue.Jack)); board.Add(new Card(CardSuit.Clubs, CardValue.Ten)); var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); Assert.AreEqual(HandRank.RoyalFlush, rank); }
/// <summary> /// Evaluates the handrank and maps it to the corresponding hand strength bucket. /// </summary> /// <param name="board">current community cards (or board)</param> /// <param name="holeCards">current hole cards of the player</param> /// <returns></returns> public static HandStrengthBucket MapToBucket(List <Card> board, List <Card> holeCards) { var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); if (rank >= HandRank.TwoPairs) { return(HandStrengthBucket.TopHands); } var topCards = evaluator.GetTopFiveCards(rank); if (rank == HandRank.Pair) { var pairValue = topCards.First().Value; var boardOrderedByValue = board.OrderBy(x => x.Value); var lowestValue = boardOrderedByValue.First().Value; var topValue = boardOrderedByValue.Last().Value; if (pairValue >= topValue) { // either a overpair (e.g. Pocket Aces) or top pair return(HandStrengthBucket.TopPair); } else if (pairValue < topValue && pairValue > lowestValue) { return(HandStrengthBucket.MiddlePair); } else { return(HandStrengthBucket.LowPair); } } else { //highcard bool hasAce = topCards.Any(x => x.Value == CardValue.Ace); if (hasAce) { return(HandStrengthBucket.HighCardAce); } else { return(HandStrengthBucket.HighCardElse); } } }
public void TestHighCard() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Seven)); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Six)); var board = new List <Card>(); board.Add(new Card(CardSuit.Spades, CardValue.Ten)); board.Add(new Card(CardSuit.Hearts, CardValue.Queen)); board.Add(new Card(CardSuit.Clubs, CardValue.Ace)); var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); Assert.AreEqual(rank, HandRank.HighCard); }
public void TestFourOfAKind() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Six)); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Six)); var board = new List <Card>(); board.Add(new Card(CardSuit.Spades, CardValue.Six)); board.Add(new Card(CardSuit.Hearts, CardValue.Six)); board.Add(new Card(CardSuit.Clubs, CardValue.Eight)); var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); Assert.AreEqual(rank, HandRank.FourOfAKind); }
public void TestFlush() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Two)); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Nine)); var board = new List <Card>(); board.Add(new Card(CardSuit.Diamonds, CardValue.Eight)); board.Add(new Card(CardSuit.Clubs, CardValue.Eight)); board.Add(new Card(CardSuit.Clubs, CardValue.Six)); board.Add(new Card(CardSuit.Clubs, CardValue.Seven)); var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); Assert.AreEqual(rank, HandRank.Flush); }
public void TestFullHouse() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Seven)); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Seven)); var board = new List <Card>(); board.Add(new Card(CardSuit.Spades, CardValue.Ten)); board.Add(new Card(CardSuit.Diamonds, CardValue.Nine)); board.Add(new Card(CardSuit.Hearts, CardValue.Ten)); board.Add(new Card(CardSuit.Diamonds, CardValue.Jack)); board.Add(new Card(CardSuit.Diamonds, CardValue.Ten)); var evaluator = new HandEvaluator(holeCards, board); var rank = evaluator.GetHandRank(); Assert.AreEqual(rank, HandRank.FullHouse); }
public void TestStraightCards() { var holeCards = new List <Card>(); holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Six)); holeCards.Add(new Card(CardSuit.Clubs, CardValue.Ten)); var board = new List <Card>(); board.Add(new Card(CardSuit.Diamonds, CardValue.Nine)); board.Add(new Card(CardSuit.Spades, CardValue.Seven)); board.Add(new Card(CardSuit.Hearts, CardValue.Six)); board.Add(new Card(CardSuit.Clubs, CardValue.Eight)); var evaluator = new HandEvaluator(holeCards, board); var topCards = evaluator.GetTopFiveCards(evaluator.GetHandRank()); Assert.AreEqual(topCards.Count, 5); }