The source code and dockerfile for the GSW2024 AI Lab.
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
 

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)