Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DdPrismModelBuilderTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
3#include "test/storm_gtest.h"
4
15
16class Cudd {
17 public:
18 static void checkLibraryAvailable() {
19#ifndef STORM_HAVE_CUDD
20 GTEST_SKIP() << "Library CUDD not available.";
21#endif
22 }
23
25};
26
27class Sylvan {
28 public:
29 static void checkLibraryAvailable() {
30#ifndef STORM_HAVE_SYLVAN
31 GTEST_SKIP() << "Library Sylvan not available.";
32#endif
33 }
34
36};
37
38template<typename TestType>
39class DdPrismModelBuilderTest : public ::testing::Test {
40 public:
41 void SetUp() override {
42 TestType::checkLibraryAvailable();
43 }
44
45 static const storm::dd::DdType DdType = TestType::DdType;
46};
47
48typedef ::testing::Types<Cudd, Sylvan> TestingTypes;
50
52 const storm::dd::DdType DdType = TestFixture::DdType;
54 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/die.pm");
55 storm::prism::Program program = modelDescription.preprocess().asPrismProgram();
56
57 std::shared_ptr<storm::models::symbolic::Model<DdType>> model = storm::builder::DdPrismModelBuilder<DdType>().build(env, program);
58 EXPECT_EQ(13ul, model->getNumberOfStates());
59 EXPECT_EQ(20ul, model->getNumberOfTransitions());
60
61 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/brp-16-2.pm");
62 program = modelDescription.preprocess().asPrismProgram();
64 EXPECT_EQ(677ul, model->getNumberOfStates());
65 EXPECT_EQ(867ul, model->getNumberOfTransitions());
66
67 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/crowds-5-5.pm");
68 program = modelDescription.preprocess().asPrismProgram();
70 EXPECT_EQ(8607ul, model->getNumberOfStates());
71 EXPECT_EQ(15113ul, model->getNumberOfTransitions());
72
73 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/leader-3-5.pm");
74 program = modelDescription.preprocess().asPrismProgram();
76 EXPECT_EQ(273ul, model->getNumberOfStates());
77 EXPECT_EQ(397ul, model->getNumberOfTransitions());
78
79 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/nand-5-2.pm");
80 program = modelDescription.preprocess().asPrismProgram();
82 EXPECT_EQ(1728ul, model->getNumberOfStates());
83 EXPECT_EQ(2505ul, model->getNumberOfTransitions());
84}
85
87 const storm::dd::DdType DdType = TestFixture::DdType;
89 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ctmc/cluster2.sm", true);
90 storm::prism::Program program = modelDescription.preprocess().asPrismProgram();
91
92 std::shared_ptr<storm::models::symbolic::Model<DdType>> model = storm::builder::DdPrismModelBuilder<DdType>().build(env, program);
93 EXPECT_EQ(276ul, model->getNumberOfStates());
94 EXPECT_EQ(1120ul, model->getNumberOfTransitions());
95
96 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ctmc/embedded2.sm", true);
97 program = modelDescription.preprocess().asPrismProgram();
99 EXPECT_EQ(3478ul, model->getNumberOfStates());
100 EXPECT_EQ(14639ul, model->getNumberOfTransitions());
101
102 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ctmc/polling2.sm", true);
103 program = modelDescription.preprocess().asPrismProgram();
105 EXPECT_EQ(12ul, model->getNumberOfStates());
106 EXPECT_EQ(22ul, model->getNumberOfTransitions());
107
108 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ctmc/fms2.sm", true);
109 program = modelDescription.preprocess().asPrismProgram();
111 EXPECT_EQ(810ul, model->getNumberOfStates());
112 EXPECT_EQ(3699ul, model->getNumberOfTransitions());
113
114 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ctmc/tandem5.sm", true);
115 program = modelDescription.preprocess().asPrismProgram();
117 EXPECT_EQ(66ul, model->getNumberOfStates());
118 EXPECT_EQ(189ul, model->getNumberOfTransitions());
119}
120
122 const storm::dd::DdType DdType = TestFixture::DdType;
124 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/two_dice.nm");
125 storm::prism::Program program = modelDescription.preprocess().asPrismProgram();
126 std::shared_ptr<storm::models::symbolic::Model<DdType>> model = storm::builder::DdPrismModelBuilder<DdType>().build(env, program);
127
128 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
129 std::shared_ptr<storm::models::symbolic::Mdp<DdType>> mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
130
131 EXPECT_EQ(169ul, mdp->getNumberOfStates());
132 EXPECT_EQ(436ul, mdp->getNumberOfTransitions());
133 EXPECT_EQ(254ul, mdp->getNumberOfChoices());
134
135 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/leader3.nm");
136 program = modelDescription.preprocess().asPrismProgram();
138 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
139 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
140
141 EXPECT_EQ(364ul, mdp->getNumberOfStates());
142 EXPECT_EQ(654ul, mdp->getNumberOfTransitions());
143 EXPECT_EQ(573ul, mdp->getNumberOfChoices());
144
145 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/coin2-2.nm");
146 program = modelDescription.preprocess().asPrismProgram();
148 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
149 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
150
151 EXPECT_EQ(272ul, mdp->getNumberOfStates());
152 EXPECT_EQ(492ul, mdp->getNumberOfTransitions());
153 EXPECT_EQ(400ul, mdp->getNumberOfChoices());
154
155 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/csma2-2.nm");
156 program = modelDescription.preprocess().asPrismProgram();
158 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
159 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
160
161 EXPECT_EQ(1038ul, mdp->getNumberOfStates());
162 EXPECT_EQ(1282ul, mdp->getNumberOfTransitions());
163 EXPECT_EQ(1054ul, mdp->getNumberOfChoices());
164
165 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/firewire3-0.5.nm");
166 program = modelDescription.preprocess().asPrismProgram();
168 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
169 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
170
171 EXPECT_EQ(4093ul, mdp->getNumberOfStates());
172 EXPECT_EQ(5585ul, mdp->getNumberOfTransitions());
173 EXPECT_EQ(5519ul, mdp->getNumberOfChoices());
174
175 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/wlan0-2-2.nm");
176 program = modelDescription.preprocess().asPrismProgram();
178 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
179 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
180
181 EXPECT_EQ(37ul, mdp->getNumberOfStates());
182 EXPECT_EQ(59ul, mdp->getNumberOfTransitions());
183 EXPECT_EQ(59ul, mdp->getNumberOfChoices());
184
185 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/sync.nm");
186 program = modelDescription.preprocess().asPrismProgram();
188 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
189 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
190
191 EXPECT_EQ(5ul, mdp->getNumberOfStates());
192 EXPECT_EQ(24ul, mdp->getNumberOfTransitions());
193 EXPECT_EQ(12ul, mdp->getNumberOfChoices());
194}
195
197 const storm::dd::DdType DdType = TestFixture::DdType;
199
200 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/system_composition.nm");
201 storm::prism::Program program = modelDescription.preprocess().asPrismProgram();
202
203 std::shared_ptr<storm::models::symbolic::Model<DdType>> model = storm::builder::DdPrismModelBuilder<DdType>().build(env, program);
204
205 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
206 std::shared_ptr<storm::models::symbolic::Mdp<DdType>> mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
207
208 EXPECT_EQ(21ul, mdp->getNumberOfStates());
209 EXPECT_EQ(61ul, mdp->getNumberOfTransitions());
210 EXPECT_EQ(61ul, mdp->getNumberOfChoices());
211
212 modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/system_composition2.nm");
213 program = modelDescription.preprocess().asPrismProgram();
215 EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
216 mdp = model->template as<storm::models::symbolic::Mdp<DdType>>();
217
218 EXPECT_EQ(8ul, mdp->getNumberOfStates());
219 EXPECT_EQ(21ul, mdp->getNumberOfTransitions());
220 EXPECT_EQ(21ul, mdp->getNumberOfChoices());
221}
222
224 const storm::dd::DdType DdType = TestFixture::DdType;
225 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/mdp/unbounded.nm");
226 storm::prism::Program program = modelDescription.preprocess("N=1").asPrismProgram();
227 EXPECT_FALSE(storm::builder::DdPrismModelBuilder<DdType>().canHandle(program));
228}
TYPED_TEST_SUITE(DdPrismModelBuilderTest, TestingTypes,)
TYPED_TEST(DdPrismModelBuilderTest, Dtmc)
storm::models::sparse::Dtmc< double > Dtmc
storm::models::sparse::Mdp< double > Mdp
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.
static storm::prism::Program parse(std::string const &filename, bool prismCompatability=false)
Parses the given file into the PRISM storage classes assuming it complies with the PRISM syntax.
storm::prism::Program const & asPrismProgram() const
SymbolicModelDescription preprocess(std::string const &constantDefinitionString="") const
::testing::Types< Cudd, Sylvan > TestingTypes
Definition GraphTest.cpp:61