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");
        }
示例#3
0
        public void ToString_Normal_ShouldReturnKnownValue()
        {
            var arranged = new MadeHand(HandTypes.HighCard, HighHand, CreateBasicAlternates());

            Assert.AreEqual("HighCard: 2h 3d 4c 5s 6h", arranged.ToString());
        }
示例#4
0
        public void Ctor_SerializedValid_ShouldConstruct()
        {
            var actual = new MadeHand(Convert.FromBase64String("ASEiJAAyMzQAQwAAAFQAAABhAAAA"));

            Assert.AreEqual("ASEiJAAyMzQAQwAAAFQAAABhAAAA", Convert.ToBase64String(actual.Serialize()));
        }
示例#5
0
        public void Ctor_Score_ShouldBeCorrect()
        {
            var actual = new MadeHand(HandTypes.HighCard, HighHand);

            Assert.AreEqual(1108152157446, actual.Score);
        }
示例#6
0
        public void Ctor_Played_ShouldSet()
        {
            var actual = new MadeHand(HandTypes.HighCard, HighHand);

            Assert.AreEqual(HighHand.ToCardString(), actual.Played.ToCardString());
        }
示例#7
0
        public void Ctor_Type_ShouldSet()
        {
            var actual = new MadeHand(HandTypes.ThreeOfAKind, HighHand);

            Assert.AreEqual(HandTypes.ThreeOfAKind, actual.Type);
        }
示例#8
0
        public void Serialize_Normal_ShouldSerialize()
        {
            var arranged = new MadeHand(HandTypes.HighCard, HighHand, CreateBasicAlternates());

            Assert.AreEqual("ASEiJAAyMzQAQwAAAFQAAABhAAAA", Convert.ToBase64String(arranged.Serialize()));
        }