public void ProbabilityDistribution_OneD3_ReturnExpectedDistribution() { // Setup var rng = MockRepository.GenerateStub <IRandomNumberGenerator>(); var dice = new[] { new NumericalDie(3, rng), }; var sumOf2D6 = new SumOfDice(dice, rng); // Call DiscreteValueProbabilityDistribution distribution = sumOf2D6.ProbabilityDistribution; // Assert var expectedProbabilityValuePairs = new[] { Tuple.Create(1, 1.0 / 3.0), Tuple.Create(2, 1.0 / 3.0), Tuple.Create(3, 1.0 / 3.0), }; Assert.AreEqual(expectedProbabilityValuePairs.Length, distribution.Specification.Count); for (int i = 0; i < expectedProbabilityValuePairs.Length; i++) { Tuple <int, double> expectedPair = expectedProbabilityValuePairs[i]; ValueProbabilityPair actualPair = distribution.Specification[i]; Assert.AreEqual(expectedPair.Item1, actualPair.Value); Assert.AreEqual(expectedPair.Item2, actualPair.Probability, 1e-6); } }
private static void AssertExpectedDistribution(int numberOfDice, int numberOfSides, DiscreteValueProbabilityDistribution actualDistribution) { var rng = MockRepository.GenerateStub <IRandomNumberGenerator>(); IEnumerable <NumericalDie> dice = Enumerable.Repeat(numberOfSides, numberOfDice) .Select(nrOfSides => new NumericalDie(nrOfSides, rng)); var sumOfDice = new SumOfDice(dice, rng); DiscreteValueProbabilityDistribution expectedDistribution = sumOfDice.ProbabilityDistribution; AssertEquals(expectedDistribution, actualDistribution); }
public void Constructor_ExpectedValues() { // Setup var rng = MockRepository.GenerateStub <IRandomNumberGenerator>(); var die = MockRepository.GenerateStub <IAbstractDie>(); die.Stub(d => d.ProbabilityDistribution).Return(new DiscreteValueProbabilityDistribution(new[] { new ValueProbabilityPair(0, 1.0) })); var dice = new[] { die, }; // Call var sumOfDice = new SumOfDice(dice, rng); // Setup Assert.IsInstanceOf <IAbstractDie>(sumOfDice); }
public void Roll_ReturnRamdomlyGeneratedValueAccordingToProbabilityDistribution() { // Setup var rngExpectedValueAndProbability = new[] { Tuple.Create(2, 0.0), Tuple.Create(2, 0.68 / 36.0), Tuple.Create(2, 1.0 / 36.0), Tuple.Create(3, (1.0 + 1e-6) / 36.0), Tuple.Create(3, 1.234 / 36.0), Tuple.Create(3, 3.0 / 36.0), Tuple.Create(4, (3.0 + 1e-6) / 36.0), Tuple.Create(4, 4.768 / 36.0), Tuple.Create(4, 6.0 / 36.0), Tuple.Create(5, (6.0 + 1e-6) / 36.0), Tuple.Create(5, 8.96 / 36.0), Tuple.Create(5, 10.0 / 36.0), Tuple.Create(6, (10.0 + 1e-6) / 36.0), Tuple.Create(6, 12.5678 / 36.0), Tuple.Create(6, 15.0 / 36.0), Tuple.Create(7, (15.0 + 1e-6) / 36.0), Tuple.Create(7, 19.856 / 36.0), Tuple.Create(7, 21.0 / 36.0), Tuple.Create(8, (21.0 + 1e-6) / 36.0), Tuple.Create(8, 23.68 / 36.0), Tuple.Create(8, 26.0 / 36.0), Tuple.Create(9, (26.0 + 1e-6) / 36.0), Tuple.Create(9, 29.56 / 36.0), Tuple.Create(9, 30.0 / 36.0), Tuple.Create(10, (30.0 + 1e-6) / 36.0), Tuple.Create(10, 31.34 / 36.0), Tuple.Create(10, 33.0 / 36.0), Tuple.Create(11, (33.0 + 1e-6) / 36.0), Tuple.Create(11, 34.76 / 36.0), Tuple.Create(11, 35.0 / 36.0), Tuple.Create(12, (35.0 + 1e-6) / 36.0), Tuple.Create(12, 35.956 / 36.0), Tuple.Create(12, 1.0), }; var rng = new TestingRandomNumberGenerator(); rng.AddFactorValues(rngExpectedValueAndProbability.Select(t => t.Item2)); var rngStub = MockRepository.GenerateStub <IRandomNumberGenerator>(); var dice = new[] { new NumericalDie(6, rngStub), new NumericalDie(6, rngStub), }; var sumOf2D6 = new SumOfDice(dice, rng); foreach (Tuple <int, double> pair in rngExpectedValueAndProbability) { // Call int dieResult = sumOf2D6.Roll(); // Assert Assert.AreEqual(pair.Item1, dieResult, $"Asserting for probability value {pair.Item2}."); } }
private void UpdateForNewSumOfDiceParameters() { diceSum = new SumOfDice(GenerateDice(numberOfDice, numberOfSides), rng); }