protected void GenerateStateSpace(params IComponent[] components) { _modelCreator = SafetySharpRuntimeModel.CreateExecutedModelCreator(TestModel.InitializeModel(components), new ExecutableStateFormula(() => true)); var configuration = AnalysisConfiguration.Default; configuration.ModelCapacity = ModelCapacityByMemorySize.Small; configuration.StackCapacity = 10000; configuration.CpuCount = 1; configuration.DefaultTraceOutput = Output.TextWriterAdapter(); configuration.AllowFaultsOnInitialTransitions = AllowFaultsOnInitialTransitions; var analysisModelCreator = new AnalysisModelCreator(() => new ActivationMinimalExecutedModel <SafetySharpRuntimeModel>(_modelCreator, 0, configuration)); var checker = new InvariantChecker(analysisModelCreator, configuration, formulaIndex: 0); _result = checker.Check(); CounterExample.ShouldBe(null); Output.Log($"States: {_result.StateCount}"); Output.Log($"Actual Transitions: {_result.TransitionCount}"); Output.Log($"Computed Transitions: {_result.ComputedTransitionCount}"); }
protected OrderAnalysisResults <SafetySharpRuntimeModel> AnalyzeOrder(Formula hazard, params IComponent[] components) { var configuration = AnalysisConfiguration.Default; configuration.ModelCapacity = ModelCapacityByMemorySize.Tiny; configuration.GenerateCounterExample = !SuppressCounterExampleGeneration; configuration.ProgressReportsOnly = true; configuration.DefaultTraceOutput = Output.TextWriterAdapter(); var analysis = new SafetySharpOrderAnalysis(DccaWithMaxCardinality(hazard, Int32.MaxValue, components), configuration); var result = analysis.ComputeOrderRelationships(); Output.Log("{0}", result); return(result); }
protected SafetyAnalysisResults <SafetySharpRuntimeModel> DccaWithMaxCardinality(ModelBase model, Formula hazard, int maxCardinality, ModelCapacity capacity) { var analysis = new SafetySharpSafetyAnalysis { Backend = (SafetyAnalysisBackend)Arguments[0], Configuration = { ModelCapacity = capacity, GenerateCounterExample = !SuppressCounterExampleGeneration, DefaultTraceOutput = Output.TextWriterAdapter() } }; if (Heuristics != null) { analysis.Heuristics.AddRange(Heuristics); } var result = analysis.ComputeMinimalCriticalSets(model, hazard, maxCardinality); Output.Log("{0}", result); return(result); }
protected bool CheckInvariant(Formula invariant, params IComponent[] components) { var analysisTestsVariant = (AnalysisTestsVariant)Arguments[0]; analysisTestsVariant.SetModelCheckerParameter(SuppressCounterExampleGeneration, Output.TextWriterAdapter()); analysisTestsVariant.SetExecutionParameter(AllowFaultsOnInitialTransitions); var modelCreator = SafetySharpRuntimeModel.CreateExecutedModelCreator(TestModel.InitializeModel(components), invariant); var useCheckInvariantsInsteadOfCheckInvariant = Arguments.Length > 1 && (bool)Arguments[1]; if (useCheckInvariantsInsteadOfCheckInvariant) { var results = analysisTestsVariant.CheckInvariants(modelCreator, invariant); CounterExample = results[0].ExecutableCounterExample(modelCreator); return(results[0].FormulaHolds); } Result = analysisTestsVariant.CheckInvariant(modelCreator, invariant); CounterExample = Result.ExecutableCounterExample(modelCreator); return(Result.FormulaHolds); }
protected bool Check(Formula formula, params IComponent[] components) { var analysisTestsVariant = (AnalysisTestsVariant)Arguments[0]; var modelCreator = SafetySharpRuntimeModel.CreateExecutedModelCreator(TestModel.InitializeModel(components), formula); analysisTestsVariant.SetModelCheckerParameter(SuppressCounterExampleGeneration, Output.TextWriterAdapter()); analysisTestsVariant.SetExecutionParameter(AllowFaultsOnInitialTransitions); var result = analysisTestsVariant.Check(modelCreator, formula); CounterExample = result.ExecutableCounterExample(modelCreator); return(result.FormulaHolds); }
protected bool[] CheckInvariants(IComponent component, params Formula[] invariants) { var analysisTestsVariant = (AnalysisTestsVariant)Arguments[0]; var modelCreator = SafetySharpRuntimeModel.CreateExecutedModelCreator(TestModel.InitializeModel(component), invariants); analysisTestsVariant.SetModelCheckerParameter(SuppressCounterExampleGeneration, Output.TextWriterAdapter()); analysisTestsVariant.SetExecutionParameter(AllowFaultsOnInitialTransitions); var results = analysisTestsVariant.CheckInvariants(modelCreator, invariants); CounterExamples = results.Select(result => result.ExecutableCounterExample(modelCreator)).ToArray(); return(results.Select(result => result.FormulaHolds).ToArray()); }