コード例 #1
0
        public void DefaultReroll_ShouldBeNone()
        {
            var rollBuilder = RollBuilder.WithDie(Die.D6)
                              .Targeting(Target.ValueAndAbove(4)) as RollBuilder;

            rollBuilder.RerollBehaviour.GetType().Should().Be <RerollNone>();
        }
コード例 #2
0
        public void DefaultRollModifier_ShouldBeNoModifier()
        {
            var rollBuilder = RollBuilder.WithDie(Die.D6)
                              .Targeting(Target.ValueAndAbove(4)) as RollBuilder;

            rollBuilder.RollModifier.GetType().Should().Be <NoModifier>();
        }
コード例 #3
0
        public void GivenD6_NoReroll_NoModifier(int valueAndAboveTarget)
        {
            var roll = RollBuilder.WithDie(Die.D6)
                       .Targeting(Target.ValueAndAbove(valueAndAboveTarget))
                       .Build();

            // Calc - SuccessfulSideCount / Sides
            var expectedProbability = (7 - valueAndAboveTarget) / 6m;

            CheckProbability(roll, expectedProbability);
        }
コード例 #4
0
        public void GivenD6_NoReroll_NoModifier(int numberToGenerate, int expected)
        {
            var roll = RollBuilder.WithDie(Die.D6)
                       .WithNumbers(new ForcedNumberGenerator(numberToGenerate))
                       .Targeting(Target.ValueAndAbove(3))
                       .Build();

            var result = roll.Simulate();

            _output.WriteLine(result.ToString());
            result.Final.Should().Be(expected);
        }
コード例 #5
0
        public void GivenD6_RerollFailures_NoModifier(int targeting, int initialRoll, int reroll, bool expectedReroll, int expectedFinal, bool expectedSuccess)
        {
            var roll = RollBuilder.WithDie(Die.D6)
                       .WithNumbers(new ForcedNumberGenerator(initialRoll, reroll))
                       .Targeting(Target.ValueAndAbove(targeting))
                       .WithReroll(Reroll.Failures)
                       .Build();

            var result = roll.Simulate();

            _output.WriteLine(result.ToString());
            ValidateRollResult(result, initialRoll, reroll, expectedReroll, expectedFinal, expectedSuccess);
        }
コード例 #6
0
        public void GivenD6_RerollOnes_WhenOneIsSuccess()
        {
            var die  = Die.D6;
            var roll = RollBuilder.WithDie(die)
                       .Targeting(Target.ValueAndAbove(1))
                       .WithReroll(Reroll.Ones)
                       .Build();

            // Calc - If the base probability is already 100%, reroll should not increase it further as you should not be rerolling.
            var expectedProbability = 1m;

            CheckProbability(roll, expectedProbability);
        }
コード例 #7
0
        public void GivenD6_RerollOnes(int valueAndAboveTarget)
        {
            var die  = Die.D6;
            var roll = RollBuilder.WithDie(die)
                       .Targeting(Target.ValueAndAbove(valueAndAboveTarget))
                       .WithReroll(Reroll.Ones)
                       .Build();

            // Calc - (SuccessfulSideCount / Sides) + ((1 / Sides) * (SuccessfulSideCount / Sides))
            var decimalSides        = (decimal)die.TotalSides;
            var successfulSideCount = die.TotalSides + 1 - valueAndAboveTarget;
            var expectedProbability = successfulSideCount / decimalSides + 1 / decimalSides * (successfulSideCount / decimalSides);

            CheckProbability(roll, expectedProbability);
        }
コード例 #8
0
        public void GivenD6_RerollOnes_ModifierDecreaseByOne(int valueAndAboveTarget)
        {
            var modifier = -1;
            var die      = Die.D6;
            var roll     = RollBuilder.WithDie(die)
                           .Targeting(Target.ValueAndAbove(valueAndAboveTarget))
                           .WithReroll(Reroll.Ones)
                           .WithModifier(modifier)
                           .Build();

            // Calc - See CalcRerollWithModifier
            var successfulSideCount = die.TotalSides + 1 - valueAndAboveTarget;
            var expectedProbability = CalcProbabilityForRerollWithModifier(die.TotalSides, successfulSideCount, 1, modifier);

            CheckProbability(roll, expectedProbability);
        }
コード例 #9
0
        public void GivenD6_NoReroll_ModifierDecreaseByOne(int valueAndAboveTarget)
        {
            var modifier = -1;
            var die      = Die.D6;
            var roll     = RollBuilder.WithDie(die)
                           .Targeting(Target.ValueAndAbove(valueAndAboveTarget))
                           .WithReroll(Reroll.None)
                           .WithModifier(-1)
                           .Build();

            // Calc - ((SuccessfulSideCount + ModifierAmount) / Sides)
            var decimalSides        = (decimal)die.TotalSides;
            var successfulSideCount = die.TotalSides + 1 - valueAndAboveTarget;
            var expectedProbability = (successfulSideCount + modifier) / decimalSides;

            CheckProbability(roll, expectedProbability);
        }