You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							2.8 KiB
						
					
					
				| import stormpy | |
| import stormpy.logic | |
| from helpers.helper import get_example_path | |
| 
 | |
| import math | |
| from configurations import dft | |
| 
 | |
| 
 | |
| @dft | |
| class TestAnalysis: | |
| 
 | |
|     def test_analyze_mttf(self): | |
|         dft = stormpy.dft.load_dft_json_file(get_example_path("dft", "and.json")) | |
|         formulas = stormpy.parse_properties("T=? [ F \"failed\" ]") | |
|         assert dft.nr_elements() == 3 | |
|         results = stormpy.dft.analyze_dft(dft, [formulas[0].raw_formula]) | |
|         assert math.isclose(results[0], 3) | |
| 
 | |
|     def test_relevant_events_property(self): | |
|         dft = stormpy.dft.load_dft_json_file(get_example_path("dft", "and.json")) | |
|         properties = stormpy.parse_properties("P=? [ F<=1 \"A_failed\" ]") | |
|         formulas = [p.raw_formula for p in properties] | |
|         relevant_events = stormpy.dft.compute_relevant_events(dft, formulas) | |
|         assert relevant_events.is_relevant("A") | |
|         assert not relevant_events.is_relevant("B") | |
|         assert not relevant_events.is_relevant("C") | |
|         results = stormpy.dft.analyze_dft(dft, formulas, relevant_events = relevant_events) | |
|         assert math.isclose(results[0], 0.1548181217) | |
| 
 | |
|     def test_relevant_events_additional(self): | |
|         dft = stormpy.dft.load_dft_json_file(get_example_path("dft", "and.json")) | |
|         properties = stormpy.parse_properties("P=? [ F<=1 \"failed\" ]") | |
|         formulas = [p.raw_formula for p in properties] | |
|         relevant_events = stormpy.dft.compute_relevant_events(dft, formulas, ["B", "C"]) | |
|         assert relevant_events.is_relevant("B") | |
|         assert relevant_events.is_relevant("C") | |
|         assert not relevant_events.is_relevant("A") | |
|         results = stormpy.dft.analyze_dft(dft, formulas, relevant_events = relevant_events) | |
|         assert math.isclose(results[0], 0.1548181217) | |
| 
 | |
|     def test_transformation(self): | |
|         dft = stormpy.dft.load_dft_galileo_file(get_example_path("dft", "rc2.dft")) | |
|         valid, output = stormpy.dft.is_well_formed(dft) | |
|         assert not valid | |
|         assert "not binary" in output | |
|         dft = stormpy.dft.transform_dft(dft, unique_constant_be=True, binary_fdeps=True) | |
|         valid, output = stormpy.dft.is_well_formed(dft) | |
|         assert valid | |
|         formulas = stormpy.parse_properties("Tmin=? [ F \"failed\" ]") | |
|         results = stormpy.dft.analyze_dft(dft, [formulas[0].raw_formula]) | |
|         assert math.isclose(results[0], 6.380930905) | |
| 
 | |
|     def test_fdep_conflicts(self): | |
|         dft = stormpy.dft.load_dft_galileo_file(get_example_path("dft", "rc2.dft")) | |
|         dft = stormpy.dft.transform_dft(dft, unique_constant_be=True, binary_fdeps=True) | |
|         has_conflicts = stormpy.dft.compute_dependency_conflicts(dft, use_smt=False, solver_timeout=0) | |
|         assert not has_conflicts | |
|         formulas = stormpy.parse_properties("T=? [ F \"failed\" ]") | |
|         results = stormpy.dft.analyze_dft(dft, [formulas[0].raw_formula]) | |
|         assert math.isclose(results[0], 6.380930905)
 |