public void TestGetExpectedValueOfRerollingDice(int numDice, int numSides, double expectedExpectedValue)
        {
            var diceRerollOptimizer = new DiceRerollOptimizer();
            var actualExpectedValue = diceRerollOptimizer.GetExpectedValueOfRerollingDice(numDice, numSides) / numDice;

            Assert.LessOrEqual(Math.Abs(actualExpectedValue - expectedExpectedValue), epsilon);
        }
        public void TestCalculateExpectedValueOfCurrentDiceRoll(int[] diceRoll, double expectedExpectedValue)
        {
            var diceRerollOptimizer = new DiceRerollOptimizer();
            var memo = new Dictionary <int, double> {
                { 0, 0 }, { 1, 3.5 }, { 2, 4.11805556 }
            };
            var actualExpectedValue = diceRerollOptimizer.CalculateExpectedValueOfCurrentDiceRoll(diceRoll.ToList(), diceRoll.Length, memo);

            Assert.LessOrEqual(Math.Abs(actualExpectedValue - expectedExpectedValue), epsilon);
        }