Storm 1.11.1.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
DeterministicModelParserTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
11
12TEST(DeterministicModelParserTest, NonExistingFile) {
13 // No matter what happens, please do NOT create a file with the name "nonExistingFile.not"!
15 storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/nonExistingFile.not", STORM_TEST_RESOURCES_DIR "/nonExistingFile.not"),
16 storm::exceptions::FileIoException);
17
19 storm::parser::DeterministicModelParser<>::parseCtmc(STORM_TEST_RESOURCES_DIR "/nonExistingFile.not", STORM_TEST_RESOURCES_DIR "/nonExistingFile.not"),
20 storm::exceptions::FileIoException);
21}
22
23TEST(DeterministicModelParserTest, BasicDtmcParsing) {
24 // Parse a Dtmc and check the result.
26 STORM_TEST_RESOURCES_DIR "/tra/dtmc_general.tra", STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab",
27 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew", STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"));
28
29 ASSERT_EQ(8ul, dtmc.getNumberOfStates());
30 ASSERT_EQ(16ul, dtmc.getNumberOfTransitions());
31
32 ASSERT_EQ(2ul, dtmc.getInitialStates().getNumberOfSetBits());
33 ASSERT_TRUE(dtmc.getInitialStates().get(0));
34 ASSERT_TRUE(dtmc.getInitialStates().get(7));
35 ASSERT_EQ(5ul, dtmc.getStateLabeling().getNumberOfLabels());
36 ASSERT_EQ(2ul, dtmc.getLabelsOfState(6).size());
37
38 ASSERT_TRUE(dtmc.hasRewardModel());
39 ASSERT_EQ(42, dtmc.getRewardModel("").getStateRewardVector()[7]);
40 double rewardSum = 0;
41 for (uint_fast64_t i = 0; i < dtmc.getRewardModel("").getStateRewardVector().size(); i++) {
42 rewardSum += dtmc.getRewardModel("").getStateRewardVector()[i];
43 }
44 ASSERT_EQ(263.32, rewardSum);
45
46 ASSERT_TRUE(dtmc.getRewardModel("").hasTransitionRewards());
47 ASSERT_EQ(17ul, dtmc.getRewardModel("").getTransitionRewardMatrix().getEntryCount());
48 rewardSum = 0;
49 for (uint_fast64_t i = 0; i < dtmc.getRewardModel("").getTransitionRewardMatrix().getRowCount(); i++) {
50 rewardSum += dtmc.getRewardModel("").getTransitionRewardMatrix().getRowSum(i);
51 }
52 ASSERT_EQ(125.4, rewardSum);
53}
54
55TEST(DeterministicModelParserTest, BasicCtmcParsing) {
56 // Parse a Ctmc and check the result.
58 STORM_TEST_RESOURCES_DIR "/tra/dtmc_general.tra", STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab",
59 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew", STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"));
60
61 ASSERT_EQ(8ul, ctmc.getNumberOfStates());
62 ASSERT_EQ(16ul, ctmc.getNumberOfTransitions());
63
64 ASSERT_EQ(2ul, ctmc.getInitialStates().getNumberOfSetBits());
65 ASSERT_TRUE(ctmc.getInitialStates().get(0));
66 ASSERT_TRUE(ctmc.getInitialStates().get(7));
67 ASSERT_EQ(5ul, ctmc.getStateLabeling().getNumberOfLabels());
68 ASSERT_EQ(2ul, ctmc.getLabelsOfState(6).size());
69
70 ASSERT_TRUE(ctmc.hasRewardModel());
71 ASSERT_EQ(42, ctmc.getRewardModel("").getStateRewardVector()[7]);
72 double rewardSum = 0;
73 for (uint_fast64_t i = 0; i < ctmc.getRewardModel("").getStateRewardVector().size(); i++) {
74 rewardSum += ctmc.getRewardModel("").getStateRewardVector()[i];
75 }
76 ASSERT_EQ(263.32, rewardSum);
77
78 ASSERT_TRUE(ctmc.getRewardModel("").hasTransitionRewards());
79 ASSERT_EQ(17ul, ctmc.getRewardModel("").getTransitionRewardMatrix().getEntryCount());
80 rewardSum = 0;
81 for (uint_fast64_t i = 0; i < ctmc.getRewardModel("").getTransitionRewardMatrix().getRowCount(); i++) {
82 rewardSum += ctmc.getRewardModel("").getTransitionRewardMatrix().getRowSum(i);
83 }
84 ASSERT_EQ(125.4, rewardSum);
85}
86
87TEST(DeterministicModelParserTest, MismatchedFiles) {
88 // Test file combinations that do not match, i.e. differing number of states, transitions, etc.
89
90 // The labeling file contains a label for a non existent state.
91 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
92 STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab"),
93 storm::exceptions::OutOfRangeException);
94
95 // The state reward file contains a reward for a non existent state.
96 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
97 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab",
98 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew"),
99 storm::exceptions::OutOfRangeException);
100
101 // The transition reward file contains rewards for a non existent state.
102 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
103 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab", "",
104 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"),
105 storm::exceptions::OutOfRangeException);
106
107 // The transition reward file contains rewards for a non existent transition
108 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
109 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab", "",
110 STORM_TEST_RESOURCES_DIR "/rew/dtmc_mismatched.trans.rew"),
111 storm::exceptions::OutOfRangeException);
112}
TEST(DeterministicModelParserTest, NonExistingFile)
This class represents a continuous-time Markov chain.
Definition Ctmc.h:13
This class represents a discrete-time Markov chain.
Definition Dtmc.h:13
std::size_t getNumberOfLabels() const
Returns the number of labels managed by this object.
std::set< std::string > getLabelsOfState(storm::storage::sparse::state_type state) const
Retrieves the set of labels attached to the given state.
Definition Model.cpp:618
virtual bool hasRewardModel(std::string const &rewardModelName) const override
Retrieves whether the model has a reward model with the given name.
Definition Model.cpp:209
storm::models::sparse::StateLabeling const & getStateLabeling() const
Returns the state labeling associated with this model.
Definition Model.cpp:321
virtual uint_fast64_t getNumberOfTransitions() const override
Returns the number of (non-zero) transitions of the model.
Definition Model.cpp:169
virtual uint_fast64_t getNumberOfStates() const override
Returns the number of states of the model.
Definition Model.cpp:164
RewardModelType const & getRewardModel(std::string const &rewardModelName) const
Retrieves the reward model with the given name, if one exists.
Definition Model.cpp:220
storm::storage::BitVector const & getInitialStates() const
Retrieves the initial states of the model.
Definition Model.cpp:179
Loads a deterministic model (Dtmc or Ctmc) from files.
uint64_t getNumberOfSetBits() const
Returns the number of bits that are set to true in this bit vector.
bool get(uint64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
#define STORM_SILENT_ASSERT_THROW(statement, expected_exception)
Definition storm_gtest.h:26