Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
GameBasedMdpModelCheckerTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
3#include "test/storm_gtest.h"
4
8#include "storm/api/storm.h"
16
17class Cudd {
18 public:
19 static void checkLibraryAvailable() {
20#ifndef STORM_HAVE_CUDD
21 GTEST_SKIP() << "Library CUDD not available.";
22#endif
23 }
24
26};
27
28class Sylvan {
29 public:
30 static void checkLibraryAvailable() {
31#ifndef STORM_HAVE_SYLVAN
32 GTEST_SKIP() << "Library Sylvan not available.";
33#endif
34 }
35
37};
38
39template<typename TestType>
40class GameBasedMdpModelCheckerTest : public ::testing::Test {
41 public:
42 static const storm::dd::DdType DdType = TestType::DdType;
43
44 protected:
45 void SetUp() override {
46#ifndef STORM_HAVE_MATHSAT
47 GTEST_SKIP() << "MathSAT not available.";
48#endif
49 TestType::checkLibraryAvailable();
50 }
51};
52typedef ::testing::Types<Cudd, Sylvan> TestingTypes;
54
56 const storm::dd::DdType DdType = TestFixture::DdType;
57 std::string programFile = STORM_TEST_RESOURCES_DIR "/mdp/two_dice.nm";
58
60
61 // Build the die model
63 std::shared_ptr<storm::models::symbolic::Model<DdType>> model = storm::builder::DdPrismModelBuilder<DdType>().build(storm::Environment(), program, options);
64
65 ASSERT_EQ(model->getNumberOfStates(), 169ull);
66 ASSERT_EQ(model->getNumberOfTransitions(), 436ull);
67
68 std::shared_ptr<storm::models::symbolic::Mdp<DdType>> mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
69 auto mdpModelchecker = std::make_shared<storm::gbar::modelchecker::GameBasedMdpModelChecker<DdType, storm::models::symbolic::Mdp<DdType>>>(program);
70
71 // A parser that we use for conveniently constructing the formulas.
72 storm::parser::FormulaParser formulaParser;
73
74 std::shared_ptr<storm::logic::Formula const> formula = formulaParser.parseSingleFormulaFromString("Pmin=? [F \"two\"]");
76
77 std::unique_ptr<storm::modelchecker::CheckResult> result = mdpModelchecker->check(task);
79
80 EXPECT_NEAR(0.0277777612209320068, quantitativeResult1[0],
82
83 formula = formulaParser.parseSingleFormulaFromString("Pmax=? [F \"two\"]");
85
86 result = mdpModelchecker->check(task);
88
89 EXPECT_NEAR(0.0277777612209320068, quantitativeResult2[0],
91
92 formula = formulaParser.parseSingleFormulaFromString("Pmin=? [F \"three\"]");
94
95 result = mdpModelchecker->check(task);
97
98 EXPECT_NEAR(0.0555555224418640136, quantitativeResult3[0],
100
101 formula = formulaParser.parseSingleFormulaFromString("Pmax=? [F \"three\"]");
103
104 result = mdpModelchecker->check(task);
106
107 EXPECT_NEAR(0.0555555224418640136, quantitativeResult4[0],
109
110 formula = formulaParser.parseSingleFormulaFromString("Pmin=? [F \"four\"]");
112
113 result = mdpModelchecker->check(task);
115
116 EXPECT_NEAR(0.083333283662796020508, quantitativeResult5[0],
118
119 formula = formulaParser.parseSingleFormulaFromString("Pmax=? [F \"four\"]");
121
122 result = mdpModelchecker->check(task);
124
125 EXPECT_NEAR(0.083333283662796020508, quantitativeResult6[0],
127}
TYPED_TEST(GameBasedMdpModelCheckerTest, Dice)
TYPED_TEST_SUITE(GameBasedMdpModelCheckerTest, TestingTypes,)
static void checkLibraryAvailable()
static const storm::dd::DdType DdType
Definition GraphTest.cpp:33
static const storm::dd::DdType DdType
static const storm::dd::DdType DdType
Definition GraphTest.cpp:44
static void checkLibraryAvailable()
std::shared_ptr< storm::models::symbolic::Model< Type, ValueType > > build(storm::Environment const &env, storm::prism::Program const &program, Options const &options=Options())
Translates the given program into a symbolic model (i.e.
ExplicitQuantitativeCheckResult< ValueType > & asExplicitQuantitativeCheckResult()
std::shared_ptr< storm::logic::Formula const > parseSingleFormulaFromString(std::string const &formulaString) const
Parses the formula given by the provided string.
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
SettingsType const & getModule()
Get module.
::testing::Types< Cudd, Sylvan > TestingTypes
Definition GraphTest.cpp:61