public void CheckTerminateEarly() { var m = new Model(); Probability probabilityOfFinally2; var stateIs2 = new SimpleStateInRangeFormula(2); var finally2 = new UnaryFormula(stateIs2, UnaryOperator.Finally); var markovChainGenerator = new SimpleDtmcFromExecutableModelGenerator(m); markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small; markovChainGenerator.AddFormulaToCheck(finally2); var dtmc = markovChainGenerator.GenerateMarkovChain(stateIs2); dtmc.ExportToGv(Output.TextWriterAdapter()); var typeOfModelChecker = typeof(BuiltinDtmcModelChecker); var modelChecker = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter()); using (modelChecker) { probabilityOfFinally2 = modelChecker.CalculateProbability(finally2); } probabilityOfFinally2.Between(0.33, 0.34).ShouldBe(true); }
public void CheckWithEarlyTermination() { var m = new Model(); Probability probabilityOfFinally3; var stateIs3 = new SimpleStateInRangeFormula(3); var finally3 = new UnaryFormula(stateIs3, UnaryOperator.Finally); var markovChainGenerator = new SimpleMarkovChainFromExecutableModelGenerator(m); markovChainGenerator.Configuration.ModelCapacity = ModelCapacityByMemorySize.Small; markovChainGenerator.Configuration.EnableEarlyTermination = true; markovChainGenerator.AddFormulaToCheck(finally3); var dtmc = markovChainGenerator.GenerateMarkovChain(); dtmc.ExportToGv(Output.TextWriterAdapter()); var typeOfModelChecker = typeof(BuiltinDtmcModelChecker); var modelChecker = (DtmcModelChecker)Activator.CreateInstance(typeOfModelChecker, dtmc, Output.TextWriterAdapter()); using (modelChecker) { probabilityOfFinally3 = modelChecker.CalculateProbability(finally3); } Assert.Equal(5, dtmc.States); Assert.Equal(5, dtmc.Transitions); probabilityOfFinally3.Between(0.66, 0.67).ShouldBe(true); }