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.
69 lines
2.6 KiB
69 lines
2.6 KiB
import os
|
|
import math
|
|
|
|
import stormpy
|
|
|
|
from helpers.helper import get_example_path
|
|
from configurations import gspn, xml
|
|
|
|
|
|
@gspn
|
|
class TestGSPNJani:
|
|
def test_custom_property(self):
|
|
gspn_parser = stormpy.gspn.GSPNParser()
|
|
gspn = gspn_parser.parse(get_example_path("gspn", "philosophers_4.pnpro"))
|
|
assert gspn.get_name() == "Philosophers4"
|
|
assert gspn.get_number_of_timed_transitions() == 12
|
|
assert gspn.get_number_of_immediate_transitions() == 0
|
|
assert gspn.get_number_of_places() == 16
|
|
|
|
# Build jani program
|
|
jani_builder = stormpy.gspn.GSPNToJaniBuilder(gspn)
|
|
jani_program = jani_builder.build()
|
|
|
|
# Set properties
|
|
properties = stormpy.parse_properties_for_jani_model('P=? [F<=10 eating1=1]', jani_program)
|
|
|
|
# Build model
|
|
model = stormpy.build_model(jani_program, properties)
|
|
|
|
# Model checking
|
|
initial_state = model.initial_states[0]
|
|
assert initial_state == 0
|
|
result = stormpy.model_checking(model, properties[0])
|
|
assert math.isclose(result.at(initial_state), 0.4372171069840004)
|
|
|
|
|
|
def test_standard_properties(self):
|
|
gspn_parser = stormpy.gspn.GSPNParser()
|
|
gspn = gspn_parser.parse(get_example_path("gspn", "philosophers_4.pnpro"))
|
|
assert gspn.get_name() == "Philosophers4"
|
|
assert gspn.get_number_of_timed_transitions() == 12
|
|
assert gspn.get_number_of_immediate_transitions() == 0
|
|
assert gspn.get_number_of_places() == 16
|
|
|
|
# Build jani program
|
|
jani_builder = stormpy.gspn.GSPNToJaniBuilder(gspn)
|
|
jani_program = jani_builder.build()
|
|
|
|
# Use standard properties
|
|
properties = jani_builder.create_deadlock_properties(jani_program)
|
|
|
|
# Instantiate constants
|
|
jani_program, properties = stormpy.preprocess_symbolic_input(jani_program, properties, "TIME_BOUND=1")
|
|
jani_program = jani_program.as_jani_model()
|
|
|
|
# Build model
|
|
# Leads to incorrect result
|
|
#model = stormpy.build_model(jani_program, properties)
|
|
model = stormpy.build_model(jani_program)
|
|
|
|
# Model checking
|
|
initial_state = model.initial_states[0]
|
|
assert initial_state == 0
|
|
result = stormpy.model_checking(model, properties[0])
|
|
assert math.isclose(result.at(initial_state), 1.0)
|
|
result = stormpy.model_checking(model, properties[1])
|
|
assert math.isclose(result.at(initial_state), 0.09123940783)
|
|
result = stormpy.model_checking(model, properties[2])
|
|
assert math.isclose(result.at(initial_state), 5.445544554455446)
|