/// <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(AnalysisResult 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; }
protected bool CheckInvariant(Formula invariant, params IComponent[] components) { var modelChecker = CreateModelChecker(); if (Arguments.Length > 1 && (bool)Arguments[1]) { var results = modelChecker.CheckInvariants(TestModel.InitializeModel(components), invariant); CounterExample = results[0].CounterExample; return results[0].FormulaHolds; } Result = modelChecker.CheckInvariant(TestModel.InitializeModel(components), invariant); CounterExample = Result.CounterExample; return Result.FormulaHolds; }
protected void GenerateStateSpace(params IComponent[] components) { var serializer = new RuntimeModelSerializer(); serializer.Serialize(TestModel.InitializeModel(components), new StateFormula(() => true)); var configuration = AnalysisConfiguration.Default; configuration.StateCapacity = 10000; configuration.StackCapacity = 10000; configuration.CpuCount = 1; var checker = new InvariantChecker( () => new ActivationMinimalExecutedModel(serializer.Load, configuration.SuccessorCapacity), s => Output.Log("{0}", s), 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}"); }
/// <summary> /// Checks whether the <paramref name="invariants" /> holds in all states of the <paramref name="model" />. /// </summary> /// <param name="model">The model that should be checked.</param> /// <param name="invariants">The invariants that should be checked.</param> public AnalysisResult[] CheckInvariants(ModelBase model, params Formula[] invariants) { Requires.NotNull(model, nameof(model)); Requires.NotNull(invariants, nameof(invariants)); Requires.That(invariants.Length > 0, nameof(invariants), "Expected at least one invariant."); var stateGraph = GenerateStateGraph(model, invariants); var results = new AnalysisResult[invariants.Length]; for (var i = 0; i < invariants.Length; ++i) results[i] = CheckInvariant(stateGraph, invariants[i]); return results; }