Exemple #1
0
        public void Roll_BasedOnProbabilityDistribution_ReturnExpectedResult(ComparisonType comparisonType)
        {
            // Setup
            var spec = new[]
            {
                new ValueProbabilityPair(1, 0.25),
                new ValueProbabilityPair(4, 0.5),
                new ValueProbabilityPair(8, 0.25),
            };
            var die = MockRepository.GenerateStub <IAbstractDie>();

            die.Stub(d => d.ProbabilityDistribution).Return(new DiscreteValueProbabilityDistribution(spec));

            var rng = new TestingRandomNumberGenerator();

            const int referenceValue   = 4;
            var       thresholdCompare = new ThresholdCompare(die, comparisonType, referenceValue, rng);

            double successProbability            = thresholdCompare.ProbabilityDistribution.SuccessProbability;
            var    expectedValueAndProbabilities = new[]
            {
                Tuple.Create(true, 0.0),
                Tuple.Create(true, successProbability - 0.1),
                Tuple.Create(true, successProbability),
                Tuple.Create(false, successProbability + 1e-6),
                Tuple.Create(false, successProbability + 0.1),
                Tuple.Create(false, 1.0),
            };

            rng.AddFactorValues(expectedValueAndProbabilities.Select(t => t.Item2));

            foreach (Tuple <bool, double> expectedValueAndProbability in expectedValueAndProbabilities)
            {
                // Call
                bool rolledResult = thresholdCompare.Roll();

                // Assert
                Assert.AreEqual(rolledResult, expectedValueAndProbability.Item1);
            }
        }