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.
		
		
		
		
		
			
		
			
				
					
					
						
							129 lines
						
					
					
						
							5.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							129 lines
						
					
					
						
							5.9 KiB
						
					
					
				| import stormpy | |
| from helpers.helper import get_example_path | |
| 
 | |
| 
 | |
| class TestState: | |
|     def test_states_dtmc(self): | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("dtmc", "die.tra"), | |
|                                                          get_example_path("dtmc", "die.lab")) | |
|         i = 0 | |
|         states = model.states | |
|         assert len(states) == 13 | |
|         for state in states: | |
|             assert state.id == i | |
|             i += 1 | |
|         assert i == model.nr_states | |
|         state = model.states[2] | |
|         assert state.id == 2 | |
|         state = states[5] | |
|         assert state.id == 5 | |
| 
 | |
|     def test_states_mdp(self): | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("mdp", "two_dice.tra"), | |
|                                                          get_example_path("mdp", "two_dice.lab")) | |
|         i = 0 | |
|         assert len(model.states) == 169 | |
|         for state in model.states: | |
|             assert state.id == i | |
|             i += 1 | |
|         assert i == model.nr_states | |
|         states = model.states | |
|         state = model.states[6] | |
|         assert state.id == 6 | |
|         state = states[1] | |
|         assert state.id == 1 | |
| 
 | |
|     def test_labels_dtmc(self): | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("dtmc", "die.tra"), | |
|                                                          get_example_path("dtmc", "die.lab")) | |
|         labelsOrig = [["init"], [], [], [], [], [], [], ["one", "done"], ["two", "done"], ["three", "done"], | |
|                       ["four", "done"], ["five", "done"], ["six", "done"]] | |
|         i = 0 | |
|         for state in model.states: | |
|             labels = state.labels | |
|             for label in labelsOrig[i]: | |
|                 assert label in labels | |
|             i += 1 | |
| 
 | |
|     def test_actions_dtmc(self): | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("dtmc", "die.tra"), | |
|                                                          get_example_path("dtmc", "die.lab")) | |
|         for state in model.states: | |
|             assert len(state.actions) == 1 | |
|             for action in state.actions: | |
|                 assert action.id == 0 | |
| 
 | |
|     def test_actions_mdp(self): | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("mdp", "two_dice.tra"), | |
|                                                          get_example_path("mdp", "two_dice.lab")) | |
|         for state in model.states: | |
|             assert len(state.actions) == 1 or len(state.actions) == 2 | |
|             for action in state.actions: | |
|                 assert action.id == 0 or action.id == 1 | |
| 
 | |
|     def test_transitions_dtmc(self): | |
|         transitions_orig = [(0, 1, 0.5), (0, 2, 0.5), (1, 3, 0.5), (1, 4, 0.5), | |
|                             (2, 5, 0.5), (2, 6, 0.5), (3, 1, 0.5), (3, 7, 0.5), | |
|                             (4, 8, 0.5), (4, 9, 0.5), (5, 10, 0.5), (5, 11, 0.5), | |
|                             (6, 2, 0.5), (6, 12, 0.5), (7, 7, 1), (8, 8, 1), | |
|                             (9, 9, 1), (10, 10, 1), (11, 11, 1), (12, 12, 1) | |
|                             ] | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("dtmc", "die.tra"), | |
|                                                          get_example_path("dtmc", "die.lab")) | |
|         i = 0 | |
|         for state in model.states: | |
|             for action in state.actions: | |
|                 assert (state.id < 7 and len(action.transitions) == 2) or ( | |
|                     state.id >= 7 and len(action.transitions) == 1) | |
|                 for transition in action.transitions: | |
|                     transition_orig = transitions_orig[i] | |
|                     i += 1 | |
|                     assert state.id == transition_orig[0] | |
|                     assert transition.column == transition_orig[1] | |
|                     assert transition.value() == transition_orig[2] | |
| 
 | |
|     def test_transitions_mdp(self): | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("mdp", "two_dice.tra"), | |
|                                                          get_example_path("mdp", "two_dice.lab")) | |
|         assert model.states[1].id == 1 | |
|         for state in model.states: | |
|             i = 0 | |
|             for action in state.actions: | |
|                 i += 1 | |
|                 for transition in action.transitions: | |
|                     assert transition.value() == 0.5 or transition.value() == 1 | |
|             assert i == 1 or i == 2 | |
| 
 | |
|     def test_row_iterator(self): | |
|         transitions_orig = [(0, 1, 0.5), (0, 2, 0.5), (1, 3, 0.5), (1, 4, 0.5), | |
|                             (2, 5, 0.5), (2, 6, 0.5), (3, 1, 0.5), (3, 7, 0.5), | |
|                             (4, 8, 0.5), (4, 9, 0.5), (5, 10, 0.5), (5, 11, 0.5), | |
|                             (6, 2, 0.5), (6, 12, 0.5), (7, 7, 1), (8, 8, 1), | |
|                             (9, 9, 1), (10, 10, 1), (11, 11, 1), (12, 12, 1) | |
|                             ] | |
|         model = stormpy.build_sparse_model_from_explicit(get_example_path("dtmc", "die.tra"), | |
|                                                          get_example_path("dtmc", "die.lab")) | |
|         i = 0 | |
|         for state in model.states: | |
|             for transition in model.transition_matrix.row_iter(state.id, state.id): | |
|                 transition_orig = transitions_orig[i] | |
|                 i += 1 | |
|                 assert state.id == transition_orig[0] | |
|                 assert transition.column == transition_orig[1] | |
|                 assert transition.value() == transition_orig[2] | |
| 
 | |
|     def test_parametric_transitions(self): | |
|         program = stormpy.parse_prism_program(get_example_path("pmdp", "two_dice.nm")) | |
|         model = stormpy.build_parametric_model(program) | |
|         assert model.states[1].id == 1 | |
|         one = stormpy.FactorizedPolynomial(stormpy.RationalRF(1)) | |
|         i = 0 | |
|         for state in model.states: | |
|             assert state.id == i | |
|             i += 1 | |
|             j = 0 | |
|             for action in state.actions: | |
|                 assert j == 0 or j == 1 | |
|                 j += 1 | |
|                 for transition in action.transitions: | |
|                     assert transition.value().denominator == one
 |