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.

152 lines
3.8 KiB

  1. /*
  2. * LtlParserTest.cpp
  3. *
  4. * Created on: 22.04.2013
  5. * Author: thomas
  6. */
  7. #include "gtest/gtest.h"
  8. #include "storm-config.h"
  9. #include "src/parser/LtlParser.h"
  10. TEST(LtlParserTest, parseApOnlyTest) {
  11. std::string ap = "ap";
  12. storm::parser::LtlParser* ltlParser = nullptr;
  13. ASSERT_NO_THROW(
  14. ltlParser = new storm::parser::LtlParser(ap);
  15. );
  16. ASSERT_NE(ltlParser->getFormula(), nullptr);
  17. ASSERT_EQ(ltlParser->getFormula()->toString(), ap);
  18. delete ltlParser->getFormula();
  19. delete ltlParser;
  20. }
  21. TEST(LtlParserTest, parsePropositionalFormulaTest) {
  22. storm::parser::LtlParser* ltlParser = nullptr;
  23. ASSERT_NO_THROW(
  24. ltlParser = new storm::parser::LtlParser("!(a & b) | a & ! c")
  25. );
  26. ASSERT_NE(ltlParser->getFormula(), nullptr);
  27. ASSERT_EQ(ltlParser->getFormula()->toString(), "(!(a & b) | (a & !c))");
  28. delete ltlParser->getFormula();
  29. delete ltlParser;
  30. }
  31. /*!
  32. * The following test checks whether in the formula "F & b", F is correctly interpreted as proposition instead of the
  33. * "Eventually" operator.
  34. */
  35. TEST(LtlParserTest, parseAmbiguousFormulaTest) {
  36. storm::parser::LtlParser* ltlParser = nullptr;
  37. ASSERT_NO_THROW(
  38. ltlParser = new storm::parser::LtlParser("F & b")
  39. );
  40. ASSERT_NE(ltlParser->getFormula(), nullptr);
  41. ASSERT_EQ(ltlParser->getFormula()->toString(), "(F & b)");
  42. delete ltlParser->getFormula();
  43. delete ltlParser;
  44. }
  45. /*!
  46. * The following test checks whether in the formula "F F", F is interpreted as "eventually" operator or atomic proposition,
  47. * depending where it occurs.
  48. */
  49. TEST(LtlParserTest, parseAmbiguousFormulaTest2) {
  50. storm::parser::LtlParser* ltlParser = nullptr;
  51. ASSERT_NO_THROW(
  52. ltlParser = new storm::parser::LtlParser("F F")
  53. );
  54. ASSERT_NE(ltlParser->getFormula(), nullptr);
  55. ASSERT_EQ(ltlParser->getFormula()->toString(), "F F");
  56. delete ltlParser->getFormula();
  57. delete ltlParser;
  58. }
  59. TEST(LtlParserTest, parseBoundedEventuallyFormulaTest) {
  60. storm::parser::LtlParser* ltlParser = nullptr;
  61. ASSERT_NO_THROW(
  62. ltlParser = new storm::parser::LtlParser("F<=5 a")
  63. );
  64. ASSERT_NE(ltlParser->getFormula(), nullptr);
  65. storm::property::ltl::BoundedEventually<double>* op = static_cast<storm::property::ltl::BoundedEventually<double>*>(ltlParser->getFormula());
  66. ASSERT_EQ(static_cast<uint_fast64_t>(5), op->getBound());
  67. ASSERT_EQ(ltlParser->getFormula()->toString(), "F<=5 a");
  68. delete ltlParser->getFormula();
  69. delete ltlParser;
  70. }
  71. TEST(LtlParserTest, parseBoundedUntilFormulaTest) {
  72. storm::parser::LtlParser* ltlParser = nullptr;
  73. ASSERT_NO_THROW(
  74. ltlParser = new storm::parser::LtlParser("a U<=3 b")
  75. );
  76. ASSERT_NE(ltlParser->getFormula(), nullptr);
  77. storm::property::ltl::BoundedUntil<double>* op = static_cast<storm::property::ltl::BoundedUntil<double>*>(ltlParser->getFormula());
  78. ASSERT_EQ(static_cast<uint_fast64_t>(3), op->getBound());
  79. ASSERT_EQ("(a U<=3 b)", ltlParser->getFormula()->toString());
  80. delete ltlParser->getFormula();
  81. delete ltlParser;
  82. }
  83. TEST(LtlParserTest, parseComplexUntilTest) {
  84. storm::parser::LtlParser* ltlParser = nullptr;
  85. ASSERT_NO_THROW(
  86. ltlParser = new storm::parser::LtlParser("a U b U<=3 c")
  87. );
  88. ASSERT_NE(ltlParser->getFormula(), nullptr);
  89. ASSERT_EQ(ltlParser->getFormula()->toString(), "((a U b) U<=3 c)");
  90. delete ltlParser->getFormula();
  91. delete ltlParser;
  92. }
  93. TEST(LtlParserTest, parseComplexFormulaTest) {
  94. storm::parser::LtlParser* ltlParser = nullptr;
  95. ASSERT_NO_THROW(
  96. ltlParser = new storm::parser::LtlParser("a U F b | G a & F<=3 a U<=7 b")
  97. );
  98. ASSERT_NE(ltlParser->getFormula(), nullptr);
  99. ASSERT_EQ("(a U F (b | G (a & F<=3 (a U<=7 b))))", ltlParser->getFormula()->toString());
  100. delete ltlParser->getFormula();
  101. delete ltlParser;
  102. }
  103. TEST(LtlParserTest, wrongFormulaTest) {
  104. storm::parser::LtlParser* ltlParser = nullptr;
  105. ASSERT_THROW(
  106. ltlParser = new storm::parser::LtlParser("(a | b) & +"),
  107. storm::exceptions::WrongFormatException
  108. );
  109. delete ltlParser;
  110. }