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.

452 lines
30 KiB

  1. #include "gtest/gtest.h"
  2. #include "storm-config.h"
  3. #ifdef STORM_HAVE_MSAT
  4. #include "src/parser/PrismParser.h"
  5. #include "src/storage/prism/menu_games/AbstractProgram.h"
  6. #include "src/storage/expressions/Expression.h"
  7. #include "src/storage/dd/Add.h"
  8. #include "src/storage/dd/Bdd.h"
  9. #include "src/models/symbolic/StandardRewardModel.h"
  10. #include "src/utility/solver.h"
  11. TEST(PrismMenuGame, DieAbstractionTest) {
  12. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/die.pm");
  13. std::vector<storm::expressions::Expression> initialPredicates;
  14. storm::expressions::ExpressionManager& manager = program.getManager();
  15. initialPredicates.push_back(manager.getVariableExpression("s") < manager.integer(3));
  16. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  17. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  18. EXPECT_EQ(10, game.getNumberOfTransitions());
  19. EXPECT_EQ(2, game.getNumberOfStates());
  20. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  21. }
  22. TEST(PrismMenuGame, DieAbstractionAndRefinementTest) {
  23. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/die.pm");
  24. std::vector<storm::expressions::Expression> initialPredicates;
  25. storm::expressions::ExpressionManager& manager = program.getManager();
  26. initialPredicates.push_back(manager.getVariableExpression("s") < manager.integer(3));
  27. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  28. ASSERT_NO_THROW(abstractProgram.refine({manager.getVariableExpression("s") == manager.integer(7)}));
  29. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  30. EXPECT_EQ(10, game.getNumberOfTransitions());
  31. EXPECT_EQ(3, game.getNumberOfStates());
  32. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  33. }
  34. TEST(PrismMenuGame, DieFullAbstractionTest) {
  35. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/die.pm");
  36. std::vector<storm::expressions::Expression> initialPredicates;
  37. storm::expressions::ExpressionManager& manager = program.getManager();
  38. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(0));
  39. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(1));
  40. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(2));
  41. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(3));
  42. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(4));
  43. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(5));
  44. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(6));
  45. initialPredicates.push_back(manager.getVariableExpression("s") == manager.integer(7));
  46. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(0));
  47. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(1));
  48. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(2));
  49. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(3));
  50. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(4));
  51. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(5));
  52. initialPredicates.push_back(manager.getVariableExpression("d") == manager.integer(6));
  53. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  54. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  55. EXPECT_EQ(20, game.getNumberOfTransitions());
  56. EXPECT_EQ(13, game.getNumberOfStates());
  57. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  58. }
  59. TEST(PrismMenuGame, CrowdsAbstractionTest) {
  60. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
  61. program = program.substituteConstants();
  62. std::vector<storm::expressions::Expression> initialPredicates;
  63. storm::expressions::ExpressionManager& manager = program.getManager();
  64. initialPredicates.push_back(manager.getVariableExpression("phase") < manager.integer(3));
  65. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  66. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  67. EXPECT_EQ(11, game.getNumberOfTransitions());
  68. EXPECT_EQ(2, game.getNumberOfStates());
  69. EXPECT_EQ(1, game.getBottomStates().getNonZeroCount());
  70. }
  71. TEST(PrismMenuGame, CrowdsAbstractionAndRefinementTest) {
  72. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
  73. program = program.substituteConstants();
  74. std::vector<storm::expressions::Expression> initialPredicates;
  75. storm::expressions::ExpressionManager& manager = program.getManager();
  76. initialPredicates.push_back(manager.getVariableExpression("phase") < manager.integer(3));
  77. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  78. ASSERT_NO_THROW(abstractProgram.refine({manager.getVariableExpression("observe0") + manager.getVariableExpression("observe1") + manager.getVariableExpression("observe2") + manager.getVariableExpression("observe3") + manager.getVariableExpression("observe4") <= manager.getVariableExpression("runCount")}));
  79. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  80. EXPECT_EQ(28, game.getNumberOfTransitions());
  81. EXPECT_EQ(4, game.getNumberOfStates());
  82. EXPECT_EQ(2, game.getBottomStates().getNonZeroCount());
  83. }
  84. TEST(PrismMenuGame, CrowdsFullAbstractionTest) {
  85. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
  86. program = program.substituteConstants();
  87. std::vector<storm::expressions::Expression> initialPredicates;
  88. storm::expressions::ExpressionManager& manager = program.getManager();
  89. initialPredicates.push_back(manager.getVariableExpression("phase") == manager.integer(0));
  90. initialPredicates.push_back(manager.getVariableExpression("phase") == manager.integer(1));
  91. initialPredicates.push_back(manager.getVariableExpression("phase") == manager.integer(2));
  92. initialPredicates.push_back(manager.getVariableExpression("phase") == manager.integer(3));
  93. initialPredicates.push_back(manager.getVariableExpression("phase") == manager.integer(4));
  94. initialPredicates.push_back(manager.getVariableExpression("good"));
  95. initialPredicates.push_back(manager.getVariableExpression("runCount") == manager.integer(0));
  96. initialPredicates.push_back(manager.getVariableExpression("runCount") == manager.integer(1));
  97. initialPredicates.push_back(manager.getVariableExpression("runCount") == manager.integer(2));
  98. initialPredicates.push_back(manager.getVariableExpression("runCount") == manager.integer(3));
  99. initialPredicates.push_back(manager.getVariableExpression("runCount") == manager.integer(4));
  100. initialPredicates.push_back(manager.getVariableExpression("runCount") == manager.integer(5));
  101. initialPredicates.push_back(manager.getVariableExpression("observe0") == manager.integer(0));
  102. initialPredicates.push_back(manager.getVariableExpression("observe0") == manager.integer(1));
  103. initialPredicates.push_back(manager.getVariableExpression("observe0") == manager.integer(2));
  104. initialPredicates.push_back(manager.getVariableExpression("observe0") == manager.integer(3));
  105. initialPredicates.push_back(manager.getVariableExpression("observe0") == manager.integer(4));
  106. initialPredicates.push_back(manager.getVariableExpression("observe0") == manager.integer(5));
  107. initialPredicates.push_back(manager.getVariableExpression("observe1") == manager.integer(0));
  108. initialPredicates.push_back(manager.getVariableExpression("observe1") == manager.integer(1));
  109. initialPredicates.push_back(manager.getVariableExpression("observe1") == manager.integer(2));
  110. initialPredicates.push_back(manager.getVariableExpression("observe1") == manager.integer(3));
  111. initialPredicates.push_back(manager.getVariableExpression("observe1") == manager.integer(4));
  112. initialPredicates.push_back(manager.getVariableExpression("observe1") == manager.integer(5));
  113. initialPredicates.push_back(manager.getVariableExpression("observe2") == manager.integer(0));
  114. initialPredicates.push_back(manager.getVariableExpression("observe2") == manager.integer(1));
  115. initialPredicates.push_back(manager.getVariableExpression("observe2") == manager.integer(2));
  116. initialPredicates.push_back(manager.getVariableExpression("observe2") == manager.integer(3));
  117. initialPredicates.push_back(manager.getVariableExpression("observe2") == manager.integer(4));
  118. initialPredicates.push_back(manager.getVariableExpression("observe2") == manager.integer(5));
  119. initialPredicates.push_back(manager.getVariableExpression("observe3") == manager.integer(0));
  120. initialPredicates.push_back(manager.getVariableExpression("observe3") == manager.integer(1));
  121. initialPredicates.push_back(manager.getVariableExpression("observe3") == manager.integer(2));
  122. initialPredicates.push_back(manager.getVariableExpression("observe3") == manager.integer(3));
  123. initialPredicates.push_back(manager.getVariableExpression("observe3") == manager.integer(4));
  124. initialPredicates.push_back(manager.getVariableExpression("observe3") == manager.integer(5));
  125. initialPredicates.push_back(manager.getVariableExpression("observe4") == manager.integer(0));
  126. initialPredicates.push_back(manager.getVariableExpression("observe4") == manager.integer(1));
  127. initialPredicates.push_back(manager.getVariableExpression("observe4") == manager.integer(2));
  128. initialPredicates.push_back(manager.getVariableExpression("observe4") == manager.integer(3));
  129. initialPredicates.push_back(manager.getVariableExpression("observe4") == manager.integer(4));
  130. initialPredicates.push_back(manager.getVariableExpression("observe4") == manager.integer(5));
  131. initialPredicates.push_back(manager.getVariableExpression("lastSeen") == manager.integer(0));
  132. initialPredicates.push_back(manager.getVariableExpression("lastSeen") == manager.integer(1));
  133. initialPredicates.push_back(manager.getVariableExpression("lastSeen") == manager.integer(2));
  134. initialPredicates.push_back(manager.getVariableExpression("lastSeen") == manager.integer(3));
  135. initialPredicates.push_back(manager.getVariableExpression("lastSeen") == manager.integer(4));
  136. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  137. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  138. EXPECT_EQ(15113, game.getNumberOfTransitions());
  139. EXPECT_EQ(8607, game.getNumberOfStates());
  140. EXPECT_EQ(1260, game.getBottomStates().getNonZeroCount());
  141. }
  142. TEST(PrismMenuGame, TwoDiceAbstractionTest) {
  143. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/two_dice.nm");
  144. program = program.substituteConstants();
  145. program = program.flattenModules(std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>());
  146. std::vector<storm::expressions::Expression> initialPredicates;
  147. storm::expressions::ExpressionManager& manager = program.getManager();
  148. initialPredicates.push_back(manager.getVariableExpression("s1") < manager.integer(3));
  149. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(0));
  150. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  151. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  152. EXPECT_EQ(34, game.getNumberOfTransitions());
  153. EXPECT_EQ(4, game.getNumberOfStates());
  154. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  155. }
  156. TEST(PrismMenuGame, TwoDiceAbstractionAndRefinementTest) {
  157. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/two_dice.nm");
  158. program = program.substituteConstants();
  159. program = program.flattenModules(std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>());
  160. std::vector<storm::expressions::Expression> initialPredicates;
  161. storm::expressions::ExpressionManager& manager = program.getManager();
  162. initialPredicates.push_back(manager.getVariableExpression("s1") < manager.integer(3));
  163. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(0));
  164. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  165. ASSERT_NO_THROW(abstractProgram.refine({manager.getVariableExpression("d1") + manager.getVariableExpression("d2") == manager.integer(7)}));
  166. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  167. EXPECT_EQ(164, game.getNumberOfTransitions());
  168. EXPECT_EQ(8, game.getNumberOfStates());
  169. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  170. }
  171. TEST(PrismMenuGame, TwoDiceFullAbstractionTest) {
  172. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/two_dice.nm");
  173. program = program.substituteConstants();
  174. program = program.flattenModules(std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>());
  175. std::vector<storm::expressions::Expression> initialPredicates;
  176. storm::expressions::ExpressionManager& manager = program.getManager();
  177. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(0));
  178. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(1));
  179. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(2));
  180. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(3));
  181. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(4));
  182. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(5));
  183. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(6));
  184. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(7));
  185. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(0));
  186. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(1));
  187. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(2));
  188. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(3));
  189. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(4));
  190. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(5));
  191. initialPredicates.push_back(manager.getVariableExpression("d1") == manager.integer(6));
  192. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(0));
  193. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(1));
  194. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(2));
  195. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(3));
  196. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(4));
  197. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(5));
  198. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(6));
  199. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(7));
  200. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(0));
  201. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(1));
  202. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(2));
  203. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(3));
  204. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(4));
  205. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(5));
  206. initialPredicates.push_back(manager.getVariableExpression("d2") == manager.integer(6));
  207. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  208. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  209. EXPECT_EQ(436, game.getNumberOfTransitions());
  210. EXPECT_EQ(169, game.getNumberOfStates());
  211. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  212. }
  213. TEST(PrismMenuGame, WlanAbstractionTest) {
  214. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/wlan0-2-4.nm");
  215. program = program.substituteConstants();
  216. program = program.flattenModules(std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>());
  217. std::vector<storm::expressions::Expression> initialPredicates;
  218. storm::expressions::ExpressionManager& manager = program.getManager();
  219. initialPredicates.push_back(manager.getVariableExpression("s1") < manager.integer(5));
  220. initialPredicates.push_back(manager.getVariableExpression("bc1") == manager.integer(0));
  221. initialPredicates.push_back(manager.getVariableExpression("c1") == manager.getVariableExpression("c2"));
  222. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  223. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  224. EXPECT_EQ(283, game.getNumberOfTransitions());
  225. EXPECT_EQ(4, game.getNumberOfStates());
  226. EXPECT_EQ(4, game.getBottomStates().getNonZeroCount());
  227. }
  228. TEST(PrismMenuGame, WlanAbstractionAndRefinementTest) {
  229. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/wlan0-2-4.nm");
  230. program = program.substituteConstants();
  231. program = program.flattenModules(std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>());
  232. std::vector<storm::expressions::Expression> initialPredicates;
  233. storm::expressions::ExpressionManager& manager = program.getManager();
  234. initialPredicates.push_back(manager.getVariableExpression("s1") < manager.integer(5));
  235. initialPredicates.push_back(manager.getVariableExpression("bc1") == manager.integer(0));
  236. initialPredicates.push_back(manager.getVariableExpression("c1") == manager.getVariableExpression("c2"));
  237. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  238. ASSERT_NO_THROW(abstractProgram.refine({manager.getVariableExpression("backoff1") < manager.integer(7)}));
  239. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  240. EXPECT_EQ(568, game.getNumberOfTransitions());
  241. EXPECT_EQ(8, game.getNumberOfStates());
  242. EXPECT_EQ(8, game.getBottomStates().getNonZeroCount());
  243. }
  244. TEST(PrismMenuGame, WlanFullAbstractionTest) {
  245. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/wlan0-2-4.nm");
  246. program = program.substituteConstants();
  247. program = program.flattenModules(std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>());
  248. std::vector<storm::expressions::Expression> initialPredicates;
  249. storm::expressions::ExpressionManager& manager = program.getManager();
  250. initialPredicates.push_back(manager.getVariableExpression("col") == manager.integer(0));
  251. initialPredicates.push_back(manager.getVariableExpression("col") == manager.integer(1));
  252. initialPredicates.push_back(manager.getVariableExpression("col") == manager.integer(2));
  253. initialPredicates.push_back(manager.getVariableExpression("c1") == manager.integer(0));
  254. initialPredicates.push_back(manager.getVariableExpression("c1") == manager.integer(1));
  255. initialPredicates.push_back(manager.getVariableExpression("c1") == manager.integer(2));
  256. initialPredicates.push_back(manager.getVariableExpression("c2") == manager.integer(0));
  257. initialPredicates.push_back(manager.getVariableExpression("c2") == manager.integer(1));
  258. initialPredicates.push_back(manager.getVariableExpression("c2") == manager.integer(2));
  259. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(0));
  260. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(1));
  261. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(2));
  262. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(3));
  263. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(4));
  264. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(5));
  265. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(6));
  266. initialPredicates.push_back(manager.getVariableExpression("x1") == manager.integer(7));
  267. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(1));
  268. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(2));
  269. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(3));
  270. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(4));
  271. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(5));
  272. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(6));
  273. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(7));
  274. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(8));
  275. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(9));
  276. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(10));
  277. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(11));
  278. initialPredicates.push_back(manager.getVariableExpression("s1") == manager.integer(12));
  279. initialPredicates.push_back(manager.getVariableExpression("slot1") == manager.integer(0));
  280. initialPredicates.push_back(manager.getVariableExpression("slot1") == manager.integer(1));
  281. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(0));
  282. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(1));
  283. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(2));
  284. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(3));
  285. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(4));
  286. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(5));
  287. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(6));
  288. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(7));
  289. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(8));
  290. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(9));
  291. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(10));
  292. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(11));
  293. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(12));
  294. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(13));
  295. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(14));
  296. initialPredicates.push_back(manager.getVariableExpression("backoff1") == manager.integer(15));
  297. initialPredicates.push_back(manager.getVariableExpression("bc1") == manager.integer(0));
  298. initialPredicates.push_back(manager.getVariableExpression("bc1") == manager.integer(1));
  299. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(0));
  300. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(1));
  301. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(2));
  302. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(3));
  303. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(4));
  304. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(5));
  305. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(6));
  306. initialPredicates.push_back(manager.getVariableExpression("x2") == manager.integer(7));
  307. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(1));
  308. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(2));
  309. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(3));
  310. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(4));
  311. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(5));
  312. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(6));
  313. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(7));
  314. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(8));
  315. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(9));
  316. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(10));
  317. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(11));
  318. initialPredicates.push_back(manager.getVariableExpression("s2") == manager.integer(12));
  319. initialPredicates.push_back(manager.getVariableExpression("slot2") == manager.integer(0));
  320. initialPredicates.push_back(manager.getVariableExpression("slot2") == manager.integer(1));
  321. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(0));
  322. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(1));
  323. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(2));
  324. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(3));
  325. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(4));
  326. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(5));
  327. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(6));
  328. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(7));
  329. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(8));
  330. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(9));
  331. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(10));
  332. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(11));
  333. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(12));
  334. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(13));
  335. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(14));
  336. initialPredicates.push_back(manager.getVariableExpression("backoff2") == manager.integer(15));
  337. initialPredicates.push_back(manager.getVariableExpression("bc2") == manager.integer(0));
  338. initialPredicates.push_back(manager.getVariableExpression("bc2") == manager.integer(1));
  339. storm::prism::menu_games::AbstractProgram<storm::dd::DdType::CUDD, double> abstractProgram(program.getManager(), program, initialPredicates, std::make_unique<storm::utility::solver::MathsatSmtSolverFactory>(), false);
  340. storm::prism::menu_games::MenuGame<storm::dd::DdType::CUDD, double> game = abstractProgram.getAbstractGame();
  341. EXPECT_EQ(9503, game.getNumberOfTransitions());
  342. EXPECT_EQ(5523, game.getNumberOfStates());
  343. EXPECT_EQ(0, game.getBottomStates().getNonZeroCount());
  344. }
  345. #endif