private bool Match(Card[] expected, MadeHand actual) { Guards.Assert(expected.Length == actual.Played.Length, "Impossible match"); var expectedSorted = expected.SortByFace(); var actualSorted = actual.Played.SortByFace(); // Run each position for (int i = 0; i < expectedSorted.Length; i++) { var expect = expectedSorted[i]; // If it is not a match in the hand if (!expect.Equals(actualSorted[i])) { // Check to see if it is an alternate if (!(actual.Alternates?.ContainsKey(actualSorted[i]) ?? false)) { return(false); } if (!actual.Alternates[actualSorted[i]].Any(_ => _.Equals(expect))) { return(false); } } } return(true); }
public void SamplePlays_Pure_ShouldMatchResults() { var counts = new CountsBy <X>(); Parallel.ForEach(SampleHand.Load(@"PokerPlays.bin", true), hand => { int?expectedWinner = null; int?actualWinner = null; var madePlays = new List <MadeHand>(); // Run every player's hand for (int iPlayer = 0; iPlayer < hand.Plays.Count; iPlayer++) { var play = hand.Plays[iPlayer]; var cards = play.Pocket.Concat(play.Board).Where(_ => _.IsValid).ToArray(); var made = MadeHand.MakeHand(cards); madePlays.Add(made); if (play.BestHandType != made.Type) { throw new Exception("Failed"); } if (play.Won == 'y' && expectedWinner != null) { throw new Exception("Failed"); } if (play.Won == 'y') { expectedWinner = iPlayer; } play.Result = made.Played; if (actualWinner == null || madePlays[actualWinner.Value].Score < made.Score) { actualWinner = iPlayer; } } var match = expectedWinner == actualWinner; counts.Increment(X.X, match); }); counts.Report(); Assert.IsTrue(counts.Success, $"Some failed"); }
public void ToString_Normal_ShouldReturnKnownValue() { var arranged = new MadeHand(HandTypes.HighCard, HighHand, CreateBasicAlternates()); Assert.AreEqual("HighCard: 2h 3d 4c 5s 6h", arranged.ToString()); }
public void Ctor_SerializedValid_ShouldConstruct() { var actual = new MadeHand(Convert.FromBase64String("ASEiJAAyMzQAQwAAAFQAAABhAAAA")); Assert.AreEqual("ASEiJAAyMzQAQwAAAFQAAABhAAAA", Convert.ToBase64String(actual.Serialize())); }
public void Ctor_Score_ShouldBeCorrect() { var actual = new MadeHand(HandTypes.HighCard, HighHand); Assert.AreEqual(1108152157446, actual.Score); }
public void Ctor_Played_ShouldSet() { var actual = new MadeHand(HandTypes.HighCard, HighHand); Assert.AreEqual(HighHand.ToCardString(), actual.Played.ToCardString()); }
public void Ctor_Type_ShouldSet() { var actual = new MadeHand(HandTypes.ThreeOfAKind, HighHand); Assert.AreEqual(HandTypes.ThreeOfAKind, actual.Type); }
public void Serialize_Normal_ShouldSerialize() { var arranged = new MadeHand(HandTypes.HighCard, HighHand, CreateBasicAlternates()); Assert.AreEqual("ASEiJAAyMzQAQwAAAFQAAABhAAAA", Convert.ToBase64String(arranged.Serialize())); }