public void OddSplitWinnings()
        {
            Tournament tournament = new Tournament()
            {
                BuyIn        = 333,
                PrizePool    = 999,
                PayoutScheme = PayoutScheme.FIFTY_FIFY,
                Entries      = new List <TournamentEntry>()
                {
                    new TournamentEntry()
                    {
                        Chips  = 5000,
                        UserId = "roger"
                    },
                    new TournamentEntry()
                    {
                        Chips  = 5000,
                        UserId = "jennifer"
                    },
                    new TournamentEntry()
                    {
                        Chips  = 1000,
                        UserId = "billy"
                    },
                }
            };

            PayoutEngine calculator = new PayoutEngine();
            IReadOnlyList <TournamentPayout> payouts = calculator.Calculate(tournament);

            Assert.AreEqual(2, payouts.Count);
            Assert.AreEqual(999, payouts.Sum(p => p.Payout));
            Assert.That(payouts[0].Payout == 500 || payouts[0].Payout == 499);
            Assert.That(payouts[1].Payout == 500 || payouts[1].Payout == 499);
        }
        public void TwoEntries()
        {
            Tournament tournament = new Tournament()
            {
                BuyIn        = 250,
                PrizePool    = 500,
                PayoutScheme = PayoutScheme.FIFTY_FIFY,
                Entries      = new List <TournamentEntry>()
                {
                    new TournamentEntry()
                    {
                        Chips  = 10000,
                        UserId = "roger"
                    },
                    new TournamentEntry()
                    {
                        Chips  = 1000,
                        UserId = "jennifer"
                    }
                }
            };

            PayoutEngine calculator = new PayoutEngine();
            IReadOnlyList <TournamentPayout> payouts = calculator.Calculate(tournament);

            Assert.AreEqual(1, payouts.Count);
            Assert.AreEqual(500, payouts.Sum(p => p.Payout));
        }
        public void SplitWinnings()
        {
            Tournament tournament = new Tournament()
            {
                BuyIn        = 250,
                PrizePool    = 750,
                PayoutScheme = PayoutScheme.WINNER_TAKES_ALL,
                Entries      = new List <TournamentEntry>()
                {
                    new TournamentEntry()
                    {
                        Chips  = 5000,
                        UserId = "roger"
                    },
                    new TournamentEntry()
                    {
                        Chips  = 5000,
                        UserId = "jennifer"
                    },
                    new TournamentEntry()
                    {
                        Chips  = 1000,
                        UserId = "billy"
                    },
                }
            };

            PayoutEngine calculator = new PayoutEngine();
            IReadOnlyList <TournamentPayout> payouts = calculator.Calculate(tournament);

            Assert.AreEqual(2, payouts.Count);
            Assert.AreEqual(750, payouts.Sum(p => p.Payout));
            Assert.AreEqual(375, payouts[0].Payout);
            Assert.AreEqual(375, payouts[1].Payout);
        }