65 lines
2.6 KiB

  1. import stormpy
  2. class TestMatrix:
  3. def test_sparse_matrix(self):
  4. model = stormpy.parse_explicit_model("../examples/dtmc/die/die.tra", "../examples/dtmc/die/die.lab")
  5. matrix = model.transition_matrix()
  6. assert type(matrix) is stormpy.storage.SparseMatrix
  7. assert matrix.nr_rows() == model.nr_states()
  8. assert matrix.nr_columns() == model.nr_states()
  9. assert matrix.nr_entries() == 27 #model.nr_transitions()
  10. for e in matrix:
  11. assert e.val() == 0.5 or e.val() == 0 or (e.val() == 1 and e.column() > 6)
  12. def test_change_sparse_matrix(self):
  13. model = stormpy.parse_explicit_model("../examples/dtmc/die/die.tra", "../examples/dtmc/die/die.lab")
  14. matrix = model.transition_matrix()
  15. for e in matrix:
  16. assert e.val() == 0.5 or e.val() == 0 or e.val() == 1
  17. i = 0
  18. for e in matrix:
  19. e.set_val(i)
  20. i += 0.1
  21. i = 0
  22. for e in matrix:
  23. assert e.val() == i
  24. i += 0.1
  25. def test_change_sparse_matrix_modelchecking(self):
  26. import stormpy.logic
  27. model = stormpy.parse_explicit_model("../examples/dtmc/die/die.tra", "../examples/dtmc/die/die.lab")
  28. matrix = model.transition_matrix()
  29. # Check matrix
  30. for e in matrix:
  31. assert e.val() == 0.5 or e.val() == 0 or e.val() == 1
  32. # First model checking
  33. formulas = stormpy.parse_formulas("P=? [ F \"one\" ]")
  34. result = stormpy.model_checking(model, formulas[0])
  35. assert result == 0.16666666666666663
  36. # Change probabilities
  37. i = 0
  38. for e in matrix:
  39. if e.val() == 0.5:
  40. if i % 2 == 0:
  41. e.set_val(0.3)
  42. else:
  43. e.set_val(0.7)
  44. i += 1
  45. for e in matrix:
  46. assert e.val() == 0.3 or e.val() == 0.7 or e.val() == 1 or e.val() == 0
  47. # Second model checking
  48. result = stormpy.model_checking(model, formulas[0])
  49. assert result == 0.06923076923076932
  50. # Change probabilities again
  51. for state in stormpy.state.State(0, model):
  52. for action in state.actions():
  53. for transition in action.transitions():
  54. if transition.val() == 0.3:
  55. transition.set_val(0.8)
  56. elif transition.val() == 0.7:
  57. transition.set_val(0.2)
  58. # Third model checking
  59. result = stormpy.model_checking(model, formulas[0])
  60. assert result == 0.3555555555555556 or result == 0.3555555555555557