コード例 #1
0
        private static void AssertExpectedDistribution(int numberOfSides, DiscreteValueProbabilityDistribution actualDistribution)
        {
            var rng = MockRepository.GenerateStub <IRandomNumberGenerator>();
            var die = new NumericalDie(numberOfSides, rng);

            DiscreteValueProbabilityDistribution expectedDistribution = die.ProbabilityDistribution;

            AssertEquals(expectedDistribution, actualDistribution);
        }
コード例 #2
0
        public void Constructor_ExpectedValues(int numberOfSides)
        {
            // Setup
            var rng = MockRepository.GenerateStub <IRandomNumberGenerator>();

            // Call
            var die = new NumericalDie(numberOfSides, rng);

            // Assert
            Assert.IsInstanceOf <AbstractDie>(die);
            Assert.AreEqual(numberOfSides, die.NumberOfSides);
        }
コード例 #3
0
        public void ProbabilityDistribution_ForSomeNumberOfSides_DefinesUniformProbabilityDistribution(int numberOfSides)
        {
            // Setup
            var rng = MockRepository.GenerateStub <IRandomNumberGenerator>();

            var die = new NumericalDie(numberOfSides, rng);

            // Call
            DiscreteValueProbabilityDistribution distribution = die.ProbabilityDistribution;

            // Assert
            double uniformProbability = 1.0 / numberOfSides;

            foreach (ValueProbabilityPair pair in distribution.Specification)
            {
                Assert.AreEqual(uniformProbability, pair.Probability);
            }

            CollectionAssert.AreEquivalent(Enumerable.Range(1, numberOfSides), distribution.Specification.Select(p => p.Value));
        }
コード例 #4
0
        public void Roll_ReturnRandomlyGeneratedValuesAccordingToProbabilityDistribution()
        {
            // Setup
            const double uniformProbability         = 1.0 / 6.0;
            var          rngValueAndExpectedResults = new[]
            {
                Tuple.Create(0.0, 1),
                Tuple.Create(0.45 * uniformProbability, 1),
                Tuple.Create(uniformProbability, 1),
                Tuple.Create(uniformProbability + 1e-6, 2),
                Tuple.Create(1.34 * uniformProbability, 2),
                Tuple.Create(2 * uniformProbability, 2),
                Tuple.Create((2 * uniformProbability) + 1e-6, 3),
                Tuple.Create(2.89 * uniformProbability, 3),
                Tuple.Create(3 * uniformProbability, 3),
                Tuple.Create((3 * uniformProbability) + 1e-6, 4),
                Tuple.Create(3.75 * uniformProbability, 4),
                Tuple.Create(4 * uniformProbability, 4),
                Tuple.Create((4 * uniformProbability) + 1e-6, 5),
                Tuple.Create(4.28 * uniformProbability, 5),
                Tuple.Create(5 * uniformProbability, 5),
                Tuple.Create((5 * uniformProbability) + 1e-6, 6),
                Tuple.Create(5.83 * uniformProbability, 6),
                Tuple.Create(6 * uniformProbability, 6),
            };
            var rng = new TestingRandomNumberGenerator();

            rng.AddFactorValues(rngValueAndExpectedResults.Select(t => t.Item1));

            var die = new NumericalDie(6, rng);

            foreach (Tuple <double, int> pair in rngValueAndExpectedResults)
            {
                // Call
                int dieResult = die.Roll();

                // Assert
                Assert.AreEqual(pair.Item2, dieResult, $"Asserting for probability value {pair.Item1}.");
            }
        }
コード例 #5
0
        public void ProbabilityDistribution_AddingValueTo1D6_ReturnExpectedDistribution(int modifierValue)
        {
            // Setup
            var rng = MockRepository.GenerateStub <IRandomNumberGenerator>();
            var die = new NumericalDie(6, rng);

            var modifier = new DiceModifier(die, modifierValue, rng);

            // Call
            DiscreteValueProbabilityDistribution distribution = modifier.ProbabilityDistribution;

            // Assert
            ReadOnlyCollection <ValueProbabilityPair> specification = die.ProbabilityDistribution.Specification;

            Assert.AreEqual(specification.Count, distribution.Specification.Count);
            for (int i = 0; i < specification.Count; i++)
            {
                ValueProbabilityPair referencePair = specification[i];
                ValueProbabilityPair actualPair    = distribution.Specification[i];
                Assert.AreEqual(referencePair.Probability, actualPair.Probability);
                Assert.AreEqual(referencePair.Value + modifierValue, actualPair.Value);
            }
        }