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_ids = stormpy.dft.compute_relevant_events(dft, formulas)
|
|
assert len(relevant_ids) == 1
|
|
index = next(iter(relevant_ids))
|
|
assert dft.get_element(index).name == "A"
|
|
results = stormpy.dft.analyze_dft(dft, formulas, relevant_events = relevant_ids)
|
|
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_ids = stormpy.dft.compute_relevant_events(dft, formulas, ["B", "C"])
|
|
assert len(relevant_ids) == 2
|
|
assert 0 in relevant_ids
|
|
assert 1 in relevant_ids
|
|
results = stormpy.dft.analyze_dft(dft, formulas, relevant_events = relevant_ids)
|
|
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)
|