157 lines
9.0 KiB

  1. #include "gtest/gtest.h"
  2. #include "storm-config.h"
  3. #include "src/models/symbolic/Dtmc.h"
  4. #include "src/models/symbolic/Ctmc.h"
  5. #include "src/models/symbolic/Mdp.h"
  6. #include "src/storage/dd/Add.h"
  7. #include "src/storage/dd/Bdd.h"
  8. #include "src/models/symbolic/StandardRewardModel.h"
  9. #include "src/parser/PrismParser.h"
  10. #include "src/builder/DdJaniModelBuilder.h"
  11. TEST(DdJaniModelBuilderTest_Sylvan, Dtmc) {
  12. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/die.pm");
  13. storm::jani::Model janiModel = program.toJani();
  14. storm::builder::DdJaniModelBuilder<storm::dd::DdType::Sylvan, double> builder(janiModel);
  15. auto t1 = std::chrono::high_resolution_clock::now();
  16. std::shared_ptr<storm::models::symbolic::Model<storm::dd::DdType::Sylvan>> model = builder.translate();
  17. auto t2 = std::chrono::high_resolution_clock::now();
  18. std::cout << "die: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  19. // EXPECT_EQ(13ul, model->getNumberOfStates());
  20. // EXPECT_EQ(20ul, model->getNumberOfTransitions());
  21. program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/brp-16-2.pm");
  22. janiModel = program.toJani();
  23. builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::Sylvan, double>(janiModel);
  24. t1 = std::chrono::high_resolution_clock::now();
  25. model = builder.translate();
  26. t2 = std::chrono::high_resolution_clock::now();
  27. std::cout << "brp: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  28. // EXPECT_EQ(677ul, model->getNumberOfStates());
  29. // EXPECT_EQ(867ul, model->getNumberOfTransitions());
  30. program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
  31. janiModel = program.toJani();
  32. builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::Sylvan, double>(janiModel);
  33. t1 = std::chrono::high_resolution_clock::now();
  34. model = builder.translate();
  35. t2 = std::chrono::high_resolution_clock::now();
  36. std::cout << "crowds: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  37. // EXPECT_EQ(8607ul, model->getNumberOfStates());
  38. // EXPECT_EQ(15113ul, model->getNumberOfTransitions());
  39. program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader-3-5.pm");
  40. janiModel = program.toJani();
  41. builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::Sylvan, double>(janiModel);
  42. t1 = std::chrono::high_resolution_clock::now();
  43. model = builder.translate();
  44. t2 = std::chrono::high_resolution_clock::now();
  45. std::cout << "lead: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  46. // EXPECT_EQ(273ul, model->getNumberOfStates());
  47. // EXPECT_EQ(397ul, model->getNumberOfTransitions());
  48. program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/nand-5-2.pm");
  49. janiModel = program.toJani();
  50. t1 = std::chrono::high_resolution_clock::now();
  51. builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::Sylvan, double>(janiModel);
  52. model = builder.translate();
  53. t2 = std::chrono::high_resolution_clock::now();
  54. std::cout << "nand: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  55. // EXPECT_EQ(1728ul, model->getNumberOfStates());
  56. // EXPECT_EQ(2505ul, model->getNumberOfTransitions());
  57. }
  58. TEST(DdJaniModelBuilderTest_Cudd, Dtmc) {
  59. storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/die.pm");
  60. storm::jani::Model janiModel = program.toJani();
  61. storm::builder::DdJaniModelBuilder<storm::dd::DdType::CUDD, double> builder(janiModel);
  62. auto t1 = std::chrono::high_resolution_clock::now();
  63. std::shared_ptr<storm::models::symbolic::Model<storm::dd::DdType::CUDD>> model = builder.translate();
  64. auto t2 = std::chrono::high_resolution_clock::now();
  65. std::cout << "die: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  66. // EXPECT_EQ(13ul, model->getNumberOfStates());
  67. // EXPECT_EQ(20ul, model->getNumberOfTransitions());
  68. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/brp-2-2.pm");
  69. // janiModel = program.toJani();
  70. //
  71. // builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::CUDD, double>(janiModel);
  72. // t1 = std::chrono::high_resolution_clock::now();
  73. // builder.translate();
  74. // t2 = std::chrono::high_resolution_clock::now();
  75. // std::cout << "brp2: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  76. program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/brp-16-2.pm");
  77. janiModel = program.toJani();
  78. builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::CUDD, double>(janiModel);
  79. t1 = std::chrono::high_resolution_clock::now();
  80. model = builder.translate();
  81. t2 = std::chrono::high_resolution_clock::now();
  82. std::cout << "brp: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  83. // // EXPECT_EQ(677ul, model->getNumberOfStates());
  84. // // EXPECT_EQ(867ul, model->getNumberOfTransitions());
  85. //
  86. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
  87. // janiModel = program.toJani();
  88. // builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::CUDD, double>(janiModel);
  89. // t1 = std::chrono::high_resolution_clock::now();
  90. // model = builder.translate();
  91. // t2 = std::chrono::high_resolution_clock::now();
  92. // std::cout << "crowds: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  93. // // EXPECT_EQ(8607ul, model->getNumberOfStates());
  94. // // EXPECT_EQ(15113ul, model->getNumberOfTransitions());
  95. //
  96. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader-3-5.pm");
  97. // janiModel = program.toJani();
  98. // builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::CUDD, double>(janiModel);
  99. // t1 = std::chrono::high_resolution_clock::now();
  100. // model = builder.translate();
  101. // t2 = std::chrono::high_resolution_clock::now();
  102. // std::cout << "lead: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  103. // // EXPECT_EQ(273ul, model->getNumberOfStates());
  104. // // EXPECT_EQ(397ul, model->getNumberOfTransitions());
  105. //
  106. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/nand-5-2.pm");
  107. // janiModel = program.toJani();
  108. // builder = storm::builder::DdJaniModelBuilder<storm::dd::DdType::CUDD, double>(janiModel);
  109. // t1 = std::chrono::high_resolution_clock::now();
  110. // model = builder.translate();
  111. // t2 = std::chrono::high_resolution_clock::now();
  112. // std::cout << "nand: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << std::endl;
  113. // // EXPECT_EQ(1728ul, model->getNumberOfStates());
  114. // // EXPECT_EQ(2505ul, model->getNumberOfTransitions());
  115. }
  116. //TEST(DdPrismModelBuilderTest_Cudd, Dtmc) {
  117. // storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/die.pm");
  118. //
  119. // std::shared_ptr<storm::models::symbolic::Model<storm::dd::DdType::CUDD>> model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>().translateProgram(program);
  120. // EXPECT_EQ(13ul, model->getNumberOfStates());
  121. // EXPECT_EQ(20ul, model->getNumberOfTransitions());
  122. //
  123. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/brp-16-2.pm");
  124. // model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>().translateProgram(program);
  125. // EXPECT_EQ(677ul, model->getNumberOfStates());
  126. // EXPECT_EQ(867ul, model->getNumberOfTransitions());
  127. //
  128. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
  129. // model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>().translateProgram(program);
  130. // EXPECT_EQ(8607ul, model->getNumberOfStates());
  131. // EXPECT_EQ(15113ul, model->getNumberOfTransitions());
  132. //
  133. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/leader-3-5.pm");
  134. // model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>().translateProgram(program);
  135. // EXPECT_EQ(273ul, model->getNumberOfStates());
  136. // EXPECT_EQ(397ul, model->getNumberOfTransitions());
  137. //
  138. // program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/nand-5-2.pm");
  139. // model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::CUDD>().translateProgram(program);
  140. // EXPECT_EQ(1728ul, model->getNumberOfStates());
  141. // EXPECT_EQ(2505ul, model->getNumberOfTransitions());
  142. //}