Пример #1
0
		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);
		}
Пример #2
0
		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);
		}
Пример #3
0
		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);
		}
Пример #4
0
		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);
		}
Пример #5
0
		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);
		}
Пример #6
0
		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);
		}
Пример #7
0
		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);
		}
Пример #8
0
		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);
		}
Пример #9
0
		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);
			
		}
Пример #11
0
		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);
		}
Пример #12
0
		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);
		}