/// <summary> /// /// </summary> /// <param name="deck"></param> /// <param name="myHand"></param> /// <param name="boardHand"></param> /// <param name="numOpponents"></param> /// <param name="pokerOdds"></param> private void ExecuteCalculatePokerOddsForIteration(Deck deck, Hand myHand, Hand boardHand, int numOpponents, PokerOdds pokerOdds) { var clonedDeck = deck.Clone(); var clonedMyHand = myHand.Clone(); DealRequiredNumberOfCardsToHand(clonedMyHand, clonedDeck, 2); var clonedBoardHand = boardHand.Clone(); DealRequiredNumberOfCardsToHand(clonedBoardHand, clonedDeck, 5); clonedMyHand += clonedBoardHand; var myHandRank = _handRankCalculator.CalculateHandRank(clonedMyHand); var bestOpponentHand = SimulateOpponentHandsAndReturnBestHand(clonedDeck, clonedBoardHand, numOpponents); var bestOpponentHandRank = bestOpponentHand == null ? null : _handRankCalculator.CalculateHandRank(bestOpponentHand); if (myHandRank.IsLessThan(bestOpponentHandRank)) { pokerOdds.NumLosses++; } else if (myHandRank.IsGreaterThan(bestOpponentHandRank)) { pokerOdds.NumWins++; } else { pokerOdds.NumDraws++; } pokerOdds.PokerHandFrequencies[myHandRank.PokerHand]++; }
public void HandRankCalculator_SpeedTest1() { //arrange var deck = new Deck(); var handRankSpeedResults = new HandRankCalculatorSpeedTestsDataObject(); //act const int numIterations = 500000; for (var i = 0; i < numIterations; i++) { var randomCards = deck.GetRandomCards(5); var hand = new Hand(randomCards); var stopwatch = Stopwatch.StartNew(); var handRank = _instance.CalculateHandRank(hand); handRankSpeedResults.PokerHandResults[handRank.PokerHand].AddCalculationData(stopwatch.ElapsedTicks); } Console.WriteLine("Total Times:"); DisplaySpeedResults(handRankSpeedResults, x => x.TotalCalculationTicks); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Average Times:"); DisplaySpeedResults(handRankSpeedResults, x => x.AverageCalculationTicks); }