예제 #1
0
        protected override void Check()
        {
            var         c = new C();
            Probability probabilityOfFinal2;
            Probability probabilityOfFinal3;

            Formula valueIs2 = c.Value == 2;
            Formula valueIs3 = c.Value == 3;
            var     final2   = new UnaryFormula(valueIs2, UnaryOperator.Finally);
            var     final3   = new UnaryFormula(valueIs3, UnaryOperator.Finally);

            var markovChainGenerator = new SafetySharpDtmcFromExecutableModelGenerator(TestModel.InitializeModel(c));

            markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small;
            markovChainGenerator.AddFormulaToCheck(final2);
            markovChainGenerator.AddFormulaToCheck(final3);
            var dtmc = markovChainGenerator.GenerateMarkovChain();
            var typeOfModelChecker = (Type)Arguments[0];
            var modelChecker       = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter());

            using (modelChecker)
            {
                probabilityOfFinal2 = modelChecker.CalculateProbability(final2);
                probabilityOfFinal3 = modelChecker.CalculateProbability(final3);
            }

            probabilityOfFinal2.Is(0.3, tolerance: 0.0001).ShouldBe(true);
            probabilityOfFinal3.Is(0.6, tolerance: 0.0001).ShouldBe(true);
        }
        protected override void Check()
        {
            var         c = new C();
            Probability probabilityOfStep11FrozenValue2AndInvariantViolated;
            Probability probabilityOfStep11FrozenValue3AndInvariantViolated;
            Probability probabilityOfStep11FrozenValue2AndInvariantNotViolated;
            Probability probabilityOfStep11FrozenValue3AndInvariantNotViolated;


            Formula formulaProbabilityOfStep11FrozenValue2AndInvariantViolated    = c._timestep == 11 && c._frozenValue == 2 && c.ViolateInvariant;
            Formula formulaProbabilityOfStep11FrozenValue3AndInvariantViolated    = c._timestep == 11 && c._frozenValue == 3 && c.ViolateInvariant;
            Formula formulaProbabilityOfStep11FrozenValue2AndInvariantNotViolated = c._timestep == 11 && c._frozenValue == 2 && !c.ViolateInvariant;
            Formula formulaProbabilityOfStep11FrozenValue3AndInvariantNotViolated = c._timestep == 11 && c._frozenValue == 3 && !c.ViolateInvariant;

            var finallyFormulaProbabilityOfStep11FrozenValue2AndInvariantViolated    = new UnaryFormula(formulaProbabilityOfStep11FrozenValue2AndInvariantViolated, UnaryOperator.Finally);
            var finallyFormulaProbabilityOfStep11FrozenValue3AndInvariantViolated    = new UnaryFormula(formulaProbabilityOfStep11FrozenValue3AndInvariantViolated, UnaryOperator.Finally);
            var finallyFormulaProbabilityOfStep11FrozenValue2AndInvariantNotViolated = new UnaryFormula(formulaProbabilityOfStep11FrozenValue2AndInvariantNotViolated, UnaryOperator.Finally);
            var finallyFormulaProbabilityOfStep11FrozenValue3AndInvariantNotViolated = new UnaryFormula(formulaProbabilityOfStep11FrozenValue3AndInvariantNotViolated, UnaryOperator.Finally);

            var markovChainGenerator = new SafetySharpDtmcFromExecutableModelGenerator(TestModel.InitializeModel(c));

            markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small;
            markovChainGenerator.AddFormulaToCheck(finallyFormulaProbabilityOfStep11FrozenValue2AndInvariantViolated);
            markovChainGenerator.AddFormulaToCheck(finallyFormulaProbabilityOfStep11FrozenValue3AndInvariantViolated);
            markovChainGenerator.AddFormulaToCheck(finallyFormulaProbabilityOfStep11FrozenValue2AndInvariantNotViolated);
            markovChainGenerator.AddFormulaToCheck(finallyFormulaProbabilityOfStep11FrozenValue3AndInvariantNotViolated);
            var dtmc = markovChainGenerator.GenerateMarkovChain();

            var typeOfModelChecker = (Type)Arguments[0];
            var modelChecker       = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter()); using (modelChecker)
            {
                probabilityOfStep11FrozenValue2AndInvariantViolated    = modelChecker.CalculateProbability(finallyFormulaProbabilityOfStep11FrozenValue2AndInvariantViolated);
                probabilityOfStep11FrozenValue3AndInvariantViolated    = modelChecker.CalculateProbability(finallyFormulaProbabilityOfStep11FrozenValue3AndInvariantViolated);
                probabilityOfStep11FrozenValue2AndInvariantNotViolated = modelChecker.CalculateProbability(finallyFormulaProbabilityOfStep11FrozenValue2AndInvariantNotViolated);
                probabilityOfStep11FrozenValue3AndInvariantNotViolated = modelChecker.CalculateProbability(finallyFormulaProbabilityOfStep11FrozenValue3AndInvariantNotViolated);
            }

            var probabilitiesSummedUp =
                probabilityOfStep11FrozenValue2AndInvariantViolated +
                probabilityOfStep11FrozenValue3AndInvariantViolated +
                probabilityOfStep11FrozenValue2AndInvariantNotViolated +
                probabilityOfStep11FrozenValue3AndInvariantNotViolated;

            probabilitiesSummedUp.Is(1.0, 0.000001).ShouldBe(true);
        }
예제 #3
0
        protected override void Check()
        {
            var         c = new C();
            Probability probabilityOfFinal1;

            var final1Formula = new UnaryFormula(c.IsInStateFinal1(), UnaryOperator.Finally);

            var markovChainGenerator = new SafetySharpDtmcFromExecutableModelGenerator(TestModel.InitializeModel(c));

            markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small;
            markovChainGenerator.AddFormulaToCheck(final1Formula);
            var dtmc = markovChainGenerator.GenerateMarkovChain();
            var typeOfModelChecker = (Type)Arguments[0];
            var modelChecker       = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter());

            using (modelChecker)
            {
                probabilityOfFinal1 = modelChecker.CalculateProbability(final1Formula);
            }

            probabilityOfFinal1.Between(0.1, 0.2).ShouldBe(true);
        }
        protected override void Check()
        {
            var         c = new C();
            Probability probabilityOfInvariantViolation;

            Formula invariantViolated        = c.ViolateInvariant;
            var     finallyInvariantViolated = new UnaryFormula(invariantViolated, UnaryOperator.Finally);

            var markovChainGenerator = new SafetySharpDtmcFromExecutableModelGenerator(TestModel.InitializeModel(c));

            markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small;
            markovChainGenerator.AddFormulaToCheck(finallyInvariantViolated);
            var dtmc = markovChainGenerator.GenerateMarkovChain();
            var typeOfModelChecker = (Type)Arguments[0];
            var modelChecker       = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter());

            using (modelChecker)
            {
                probabilityOfInvariantViolation = modelChecker.CalculateProbability(finallyInvariantViolated);
            }

            // 1.0-(1.0-0.1)^4 = 0.68618940391
            probabilityOfInvariantViolation.Is(0.3439, 0.00001).ShouldBe(true);
        }