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); }
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); }