Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DirectEncodingParserTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
9
10TEST(DirectEncodingParserTest, DtmcParsing) {
11 std::shared_ptr<storm::models::sparse::Model<double>> modelPtr =
12 storm::parser::DirectEncodingParser<double>::parseModel(STORM_TEST_RESOURCES_DIR "/dtmc/crowds-5-5.drn");
13
14 // Test if parsed correctly.
15 ASSERT_EQ(storm::models::ModelType::Dtmc, modelPtr->getType());
16 ASSERT_EQ(8607ul, modelPtr->getNumberOfStates());
17 ASSERT_EQ(15113ul, modelPtr->getNumberOfTransitions());
18 ASSERT_TRUE(modelPtr->hasLabel("init"));
19 ASSERT_EQ(1ul, modelPtr->getInitialStates().getNumberOfSetBits());
20 ASSERT_TRUE(modelPtr->hasLabel("observeIGreater1"));
21 ASSERT_EQ(4650ul, modelPtr->getStates("observeIGreater1").getNumberOfSetBits());
22 ASSERT_TRUE(modelPtr->hasLabel("observe0Greater1"));
23 ASSERT_EQ(1260ul, modelPtr->getStates("observe0Greater1").getNumberOfSetBits());
24}
25
26TEST(DirectEncodingParserTest, MdpParsing) {
27 std::shared_ptr<storm::models::sparse::Model<double>> modelPtr =
28 storm::parser::DirectEncodingParser<double>::parseModel(STORM_TEST_RESOURCES_DIR "/mdp/two_dice.drn");
29
30 // Test if parsed correctly.
31 ASSERT_EQ(storm::models::ModelType::Mdp, modelPtr->getType());
32 ASSERT_EQ(169ul, modelPtr->getNumberOfStates());
33 ASSERT_EQ(436ul, modelPtr->getNumberOfTransitions());
34 ASSERT_EQ(254ul, modelPtr->as<storm::models::sparse::Mdp<double>>()->getNumberOfChoices());
35 ASSERT_TRUE(modelPtr->hasLabel("init"));
36 ASSERT_EQ(1ul, modelPtr->getInitialStates().getNumberOfSetBits());
37 ASSERT_TRUE(modelPtr->hasLabel("six"));
38 ASSERT_EQ(5ul, modelPtr->getStates("six").getNumberOfSetBits());
39 ASSERT_TRUE(modelPtr->hasLabel("eleven"));
40 ASSERT_EQ(2ul, modelPtr->getStates("eleven").getNumberOfSetBits());
41 ASSERT_EQ(1ul, modelPtr->getNumberOfRewardModels());
42 ASSERT_TRUE(modelPtr->hasRewardModel("coinflips"));
43 ASSERT_TRUE(!modelPtr->getRewardModel("coinflips").hasStateRewards());
44 ASSERT_TRUE(modelPtr->getRewardModel("coinflips").hasStateActionRewards());
45 ASSERT_TRUE(!modelPtr->getRewardModel("coinflips").isAllZero());
46}
47
48TEST(DirectEncodingParserTest, CtmcParsing) {
49 std::shared_ptr<storm::models::sparse::Model<double>> modelPtr =
50 storm::parser::DirectEncodingParser<double>::parseModel(STORM_TEST_RESOURCES_DIR "/ctmc/cluster2.drn");
51
52 // Test if parsed correctly.
53 ASSERT_EQ(storm::models::ModelType::Ctmc, modelPtr->getType());
54 ASSERT_EQ(276ul, modelPtr->getNumberOfStates());
55 ASSERT_EQ(1120ul, modelPtr->getNumberOfTransitions());
56 ASSERT_TRUE(modelPtr->hasLabel("init"));
57 ASSERT_EQ(1ul, modelPtr->getInitialStates().getNumberOfSetBits());
58 ASSERT_TRUE(modelPtr->hasLabel("premium"));
59 ASSERT_EQ(64ul, modelPtr->getStates("premium").getNumberOfSetBits());
60 ASSERT_TRUE(modelPtr->hasLabel("minimum"));
61 ASSERT_EQ(132ul, modelPtr->getStates("minimum").getNumberOfSetBits());
62 ASSERT_EQ(1ul, modelPtr->getNumberOfRewardModels());
63 ASSERT_TRUE(modelPtr->hasRewardModel("num_repairs"));
64 ASSERT_TRUE(!modelPtr->getRewardModel("num_repairs").hasStateRewards());
65 ASSERT_TRUE(modelPtr->getRewardModel("num_repairs").hasStateActionRewards());
66 ASSERT_TRUE(!modelPtr->getRewardModel("num_repairs").isAllZero());
67}
68
69TEST(DirectEncodingParserTest, MarkovAutomatonParsing) {
70 std::shared_ptr<storm::models::sparse::Model<double>> modelPtr =
71 storm::parser::DirectEncodingParser<double>::parseModel(STORM_TEST_RESOURCES_DIR "/ma/jobscheduler.drn");
72 std::shared_ptr<storm::models::sparse::MarkovAutomaton<double>> ma = modelPtr->as<storm::models::sparse::MarkovAutomaton<double>>();
73
74 // Test if parsed correctly.
75 ASSERT_EQ(storm::models::ModelType::MarkovAutomaton, modelPtr->getType());
76 ASSERT_EQ(17ul, ma->getNumberOfStates());
77 ASSERT_EQ(25ul, ma->getNumberOfTransitions());
78 ASSERT_EQ(19ul, ma->getNumberOfChoices());
79 ASSERT_EQ(10ul, ma->getMarkovianStates().getNumberOfSetBits());
80 ASSERT_EQ(5, ma->getMaximalExitRate());
81 ASSERT_EQ(1ul, ma->getNumberOfRewardModels());
82 ASSERT_TRUE(ma->hasRewardModel("avg_waiting_time"));
83 ASSERT_TRUE(ma->getRewardModel("avg_waiting_time").hasStateRewards());
84 ASSERT_TRUE(!ma->getRewardModel("avg_waiting_time").hasStateActionRewards());
85 ASSERT_TRUE(!ma->getRewardModel("avg_waiting_time").isAllZero());
86 ASSERT_TRUE(modelPtr->hasLabel("init"));
87 ASSERT_EQ(1ul, modelPtr->getInitialStates().getNumberOfSetBits());
88 ASSERT_TRUE(modelPtr->hasLabel("one_job_finished"));
89 ASSERT_EQ(6ul, modelPtr->getStates("one_job_finished").getNumberOfSetBits());
90}
91
92TEST(DirectEncodingParserTest, IntervalDtmcTest) {
93 std::shared_ptr<storm::models::sparse::Model<storm::Interval>> modelPtr =
94 storm::parser::DirectEncodingParser<storm::Interval>::parseModel(STORM_TEST_RESOURCES_DIR "/idtmc/brp-16-2.drn");
95 std::shared_ptr<storm::models::sparse::Dtmc<storm::Interval>> dtmc = modelPtr->as<storm::models::sparse::Dtmc<storm::Interval>>();
96 ASSERT_EQ(storm::models::ModelType::Dtmc, modelPtr->getType());
97 ASSERT_EQ(613ul, dtmc->getNumberOfStates());
98 EXPECT_TRUE(modelPtr->hasUncertainty());
99}
TEST(DirectEncodingParserTest, DtmcParsing)
This class represents a discrete-time Markov chain.
Definition Dtmc.h:14
This class represents a Markov automaton.
This class represents a (discrete-time) Markov decision process.
Definition Mdp.h:14
uint_fast64_t getNumberOfChoices(uint_fast64_t state) const
static std::shared_ptr< storm::models::sparse::Model< ValueType, RewardModelType > > parseModel(std::string const &fil, DirectEncodingParserOptions const &options=DirectEncodingParserOptions())
Load a model in DRN format from a file and create the model.