public void NoDamagedWorkpieces(Model model) { var modelChecker = new SafetyAnalysis { Configuration = { StateCapacity = 1 << 22, GenerateCounterExample = false } }; var result = modelChecker.ComputeMinimalCriticalSets(model, model.Workpieces.Any(w => w.IsDamaged), maxCardinality: 2); Console.WriteLine(result); }
public void AllWorkpiecesCompleteEventually(Model model) { var modelChecker = new SafetyAnalysis { Configuration = { StateCapacity = 1 << 22, GenerateCounterExample = false } }; var result = modelChecker.ComputeMinimalCriticalSets(model, model.ObserverController._stepCount >= ObserverController.MaxSteps && !model.Workpieces.All(w => w.IsDamaged || w.IsDiscarded || w.IsComplete), maxCardinality: 2); Console.WriteLine(result); }
public void FalseAlarmOriginalDesign( [Values(SafetyAnalysisBackend.FaultOptimizedStateGraph, SafetyAnalysisBackend.FaultOptimizedOnTheFly)] SafetyAnalysisBackend backend) { var model = Model.CreateOriginal(); var analysis = new SafetyAnalysis { Backend = backend, Heuristics = { new MaximalSafeSetHeuristic(model) } }; var result = analysis.ComputeMinimalCriticalSets(model, model.FalseAlarm); result.SaveCounterExamples("counter examples/height control/dcca/false alarm/original"); var orderResult = OrderAnalysis.ComputeOrderRelationships(result); Console.WriteLine(orderResult); }
public void CollisionOriginalDesign( [Values(SafetyAnalysisBackend.FaultOptimizedStateGraph, SafetyAnalysisBackend.FaultOptimizedOnTheFly)] SafetyAnalysisBackend backend) { var model = Model.CreateOriginal(); // As collisions cannot occur without any overheight vehicles driving on the left lane, we // force the activation of the LeftOHV fault to improve safety analysis times significantly model.VehicleSet.LeftOHV.Activation = Activation.Forced; var analysis = new SafetyAnalysis { Backend = backend, Heuristics = { new MaximalSafeSetHeuristic(model) } }; var result = analysis.ComputeMinimalCriticalSets(model, model.Collision); result.SaveCounterExamples("counter examples/height control/dcca/collision/original"); var orderResult = OrderAnalysis.ComputeOrderRelationships(result); Console.WriteLine(orderResult); }
private static void Dcca(Model model) { var safetyAnalysis = new SafetyAnalysis { Configuration = { CpuCount = 1, StateCapacity = 1 << 20, GenerateCounterExample = false }, FaultActivationBehavior = FaultActivationBehavior.ForceOnly, Heuristics = { RedundancyHeuristic(model), new SubsumptionHeuristic(model) } }; var result = safetyAnalysis.ComputeMinimalCriticalSets(model, model.ObserverController.ReconfigurationState == ReconfStates.Failed); Console.WriteLine(result); }
public void Collision(Model model, string variantName) { // As collisions cannot occur without any overheight vehicles driving on the left lane, we // force the activation of the LeftOHV fault to improve safety analysis times significantly model.VehicleSet.LeftOHV.Activation = Activation.Forced; var analysis = new SafetyAnalysis { Heuristics = { new MaximalSafeSetHeuristic(model, cardinalityLevel: 4) } }; var result = analysis.ComputeMinimalCriticalSets(model, model.Collision); result.SaveCounterExamples($"counter examples/height control/dcca/collision/{variantName}"); Console.WriteLine(result); }
public void FalseAlarm(Model model, string variantName) { var analysis = new SafetyAnalysis { Heuristics = { new MaximalSafeSetHeuristic(model) } }; var result = analysis.ComputeMinimalCriticalSets(model, model.FalseAlarm); result.SaveCounterExamples($"counter examples/height control/dcca/false alarm/{variantName}"); Console.WriteLine(result); }
private void Dcca(Model model, FaultActivationBehavior activation, params IFaultSetHeuristic[] heuristics) { var modelChecker = new SafetyAnalysis { Configuration = { StateCapacity = 1 << 16, CpuCount = 4, GenerateCounterExample = false } }; modelChecker.Heuristics.AddRange(heuristics); modelChecker.FaultActivationBehavior = activation; var result = modelChecker.ComputeMinimalCriticalSets(model, model.ObserverController.Unsatisfiable); Console.WriteLine(result); Assert.AreEqual(0, result.Exceptions.Count); }
protected SafetyAnalysisResults DccaWithMaxCardinality(ModelBase model, Formula hazard, int maxCardinality) { var analysis = new SafetyAnalysis { Backend = (SafetyAnalysisBackend)Arguments[0], Configuration = { StateCapacity = 1 << 10, TransitionCapacity = 1 << 12, GenerateCounterExample = !SuppressCounterExampleGeneration } }; analysis.OutputWritten += message => Output.Log("{0}", message); if (Heuristics != null) analysis.Heuristics.AddRange(Heuristics); var result = analysis.ComputeMinimalCriticalSets(model, hazard, maxCardinality); Output.Log("{0}", result); result.Model.ShouldBe(model); return result; }
public void DialyzingFluidDeliverySystemWorks_ModelChecking() { var specification = new DialyzingFluidDeliverySystemTestEnvironment(); var analysis = new SafetyAnalysis(); var result = analysis.ComputeMinimalCriticalSets(specification, specification.Dialyzer.MembraneIntact == false); result.SaveCounterExamples("counter examples/hdmachine"); Console.WriteLine(result); }
public void DialysisFinishedAndBloodNotCleaned_ModelChecking( [Values(SafetyAnalysisBackend.FaultOptimizedStateGraph, SafetyAnalysisBackend.FaultOptimizedOnTheFly)] SafetyAnalysisBackend backend) { var specification = new Model(); var analysis = new SafetyAnalysis { Configuration = { StateCapacity = 1310720 }, Backend = backend }; var result = analysis.ComputeMinimalCriticalSets(specification, specification.BloodNotCleanedAndDialyzingFinished); result.SaveCounterExamples("counter examples/hdmachine_unsuccessful"); var orderResult = OrderAnalysis.ComputeOrderRelationships(result); Console.WriteLine(orderResult); }
public void IncomingBloodIsContaminated_ModelChecking( [Values(SafetyAnalysisBackend.FaultOptimizedStateGraph, SafetyAnalysisBackend.FaultOptimizedOnTheFly)] SafetyAnalysisBackend backend) { var specification = new Model(); var analysis = new SafetyAnalysis { Configuration = { StateCapacity = 1310720 }, Backend = backend, Heuristics = { new MaximalSafeSetHeuristic(specification) } }; var result = analysis.ComputeMinimalCriticalSets(specification, specification.IncomingBloodWasNotOk); result.SaveCounterExamples("counter examples/hdmachine_contamination"); var orderResult = OrderAnalysis.ComputeOrderRelationships(result); Console.WriteLine(orderResult); }
public void ExtracorporealBloodCircuitWorks_ModelChecking() { var specification = new ExtracorporealBloodCircuitTestEnvironment(); var analysis = new SafetyAnalysis(); var result = analysis.ComputeMinimalCriticalSets(specification, specification.Dialyzer.MembraneIntact == false); result.SaveCounterExamples("counter examples/hdmachine"); Console.WriteLine(result); }