コード例 #1
0
        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}");
        }
コード例 #2
0
        /// <summary>
        ///   Initializes a new instance.
        /// </summary>
        /// <param name="result">The result of the analysis</param>
        /// <param name="firstFault">The fault that must be activated first.</param>
        /// <param name="secondFault">The fault that must be activated subsequently.</param>
        /// <param name="kind">Determines the kind of the order relationship.</param>
        internal OrderRelationship(InvariantAnalysisResult result, Fault firstFault, Fault secondFault, OrderRelationshipKind kind)
        {
            Requires.NotNull(result, nameof(result));
            Requires.NotNull(firstFault, nameof(firstFault));
            Requires.NotNull(secondFault, nameof(secondFault));
            Requires.InRange(kind, nameof(kind));

            Witness     = result.CounterExample;
            FirstFault  = firstFault;
            SecondFault = secondFault;
            Kind        = kind;
        }
コード例 #3
0
        /// <summary>
        ///   Checks whether the <paramref name="invariants" /> holds in all states of the <paramref name="model" />.
        /// </summary>
        /// <param name="createModel">The creator for the model that should be checked.</param>
        /// <param name="invariants">The invariants that should be checked.</param>
        public InvariantAnalysisResult[] CheckInvariants(params Formula[] invariants)
        {
            Requires.NotNull(invariants, nameof(invariants));
            Requires.That(invariants.Length > 0, nameof(invariants), "Expected at least one invariant.");

            var qualitativeChecker = new QualitativeChecker <TExecutableModel>(ModelCreator);

            qualitativeChecker.Configuration = Configuration;

            var stateGraph = qualitativeChecker.GenerateStateGraph();
            var results    = new InvariantAnalysisResult[invariants.Length];

            for (var i = 0; i < invariants.Length; ++i)
            {
                results[i] = qualitativeChecker.CheckInvariant(stateGraph, invariants[i]);
            }

            return(results);
        }
コード例 #4
0
        public static SafetySharpInvariantAnalysisResult FromInvariantAnalysisResult(InvariantAnalysisResult result, CoupledExecutableModelCreator <SafetySharpRuntimeModel> modelCreator)
        {
            var executableModel          = modelCreator?.Create(0);
            var executableCounterExample = executableModel != null && result.CounterExample != null
                                ? new ExecutableCounterExample <SafetySharpRuntimeModel>(executableModel, result.CounterExample)
                                : null;
            var enhancedResult = new SafetySharpInvariantAnalysisResult
            {
                CounterExample           = result.CounterExample,
                ExecutableCounterExample = executableCounterExample,
                FormulaHolds             = result.FormulaHolds,
                StateCount              = result.StateCount,
                TransitionCount         = result.TransitionCount,
                ComputedTransitionCount = result.TransitionCount,
                LevelCount              = result.LevelCount,
            };

            return(enhancedResult);
        }
コード例 #5
0
 public static ExecutableCounterExample <TExecutableModel> ExecutableCounterExample <TExecutableModel>(this InvariantAnalysisResult result, CoupledExecutableModelCreator <TExecutableModel> modelCreator) where TExecutableModel : ExecutableModel <TExecutableModel>
 {
     if (result.CounterExample != null)
     {
         return(new ExecutableCounterExample <TExecutableModel>(modelCreator.Create(0), result.CounterExample));
     }
     return(null);
 }