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
12
13TEST(DeterministicModelParserTest, NonExistingFile) {
14 // No matter what happens, please do NOT create a file with the name "nonExistingFile.not"!
16 storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/nonExistingFile.not", STORM_TEST_RESOURCES_DIR "/nonExistingFile.not"),
17 storm::exceptions::FileIoException);
18
20 storm::parser::DeterministicModelParser<>::parseCtmc(STORM_TEST_RESOURCES_DIR "/nonExistingFile.not", STORM_TEST_RESOURCES_DIR "/nonExistingFile.not"),
21 storm::exceptions::FileIoException);
22}
23
24TEST(DeterministicModelParserTest, BasicDtmcParsing) {
25 // Parse a Dtmc and check the result.
27 STORM_TEST_RESOURCES_DIR "/tra/dtmc_general.tra", STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab",
28 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew", STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"));
29
30 ASSERT_EQ(8ul, dtmc.getNumberOfStates());
31 ASSERT_EQ(16ul, dtmc.getNumberOfTransitions());
32
33 ASSERT_EQ(2ul, dtmc.getInitialStates().getNumberOfSetBits());
34 ASSERT_TRUE(dtmc.getInitialStates().get(0));
35 ASSERT_TRUE(dtmc.getInitialStates().get(7));
36 ASSERT_EQ(5ul, dtmc.getStateLabeling().getNumberOfLabels());
37 ASSERT_EQ(2ul, dtmc.getLabelsOfState(6).size());
38
39 ASSERT_TRUE(dtmc.hasRewardModel());
40 ASSERT_EQ(42, dtmc.getRewardModel("").getStateRewardVector()[7]);
41 double rewardSum = 0;
42 for (uint_fast64_t i = 0; i < dtmc.getRewardModel("").getStateRewardVector().size(); i++) {
43 rewardSum += dtmc.getRewardModel("").getStateRewardVector()[i];
44 }
45 ASSERT_EQ(263.32, rewardSum);
46
47 ASSERT_TRUE(dtmc.getRewardModel("").hasTransitionRewards());
48 ASSERT_EQ(17ul, dtmc.getRewardModel("").getTransitionRewardMatrix().getEntryCount());
49 rewardSum = 0;
50 for (uint_fast64_t i = 0; i < dtmc.getRewardModel("").getTransitionRewardMatrix().getRowCount(); i++) {
51 rewardSum += dtmc.getRewardModel("").getTransitionRewardMatrix().getRowSum(i);
52 }
53 ASSERT_EQ(125.4, rewardSum);
54}
55
56TEST(DeterministicModelParserTest, BasicCtmcParsing) {
57 // Parse a Ctmc and check the result.
59 STORM_TEST_RESOURCES_DIR "/tra/dtmc_general.tra", STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab",
60 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew", STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"));
61
62 ASSERT_EQ(8ul, ctmc.getNumberOfStates());
63 ASSERT_EQ(16ul, ctmc.getNumberOfTransitions());
64
65 ASSERT_EQ(2ul, ctmc.getInitialStates().getNumberOfSetBits());
66 ASSERT_TRUE(ctmc.getInitialStates().get(0));
67 ASSERT_TRUE(ctmc.getInitialStates().get(7));
68 ASSERT_EQ(5ul, ctmc.getStateLabeling().getNumberOfLabels());
69 ASSERT_EQ(2ul, ctmc.getLabelsOfState(6).size());
70
71 ASSERT_TRUE(ctmc.hasRewardModel());
72 ASSERT_EQ(42, ctmc.getRewardModel("").getStateRewardVector()[7]);
73 double rewardSum = 0;
74 for (uint_fast64_t i = 0; i < ctmc.getRewardModel("").getStateRewardVector().size(); i++) {
75 rewardSum += ctmc.getRewardModel("").getStateRewardVector()[i];
76 }
77 ASSERT_EQ(263.32, rewardSum);
78
79 ASSERT_TRUE(ctmc.getRewardModel("").hasTransitionRewards());
80 ASSERT_EQ(17ul, ctmc.getRewardModel("").getTransitionRewardMatrix().getEntryCount());
81 rewardSum = 0;
82 for (uint_fast64_t i = 0; i < ctmc.getRewardModel("").getTransitionRewardMatrix().getRowCount(); i++) {
83 rewardSum += ctmc.getRewardModel("").getTransitionRewardMatrix().getRowSum(i);
84 }
85 ASSERT_EQ(125.4, rewardSum);
86}
87
88TEST(DeterministicModelParserTest, MismatchedFiles) {
89 // Test file combinations that do not match, i.e. differing number of states, transitions, etc.
90
91 // The labeling file contains a label for a non existent state.
92 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
93 STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab"),
94 storm::exceptions::OutOfRangeException);
95
96 // The state reward file contains a reward for a non existent state.
97 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
98 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab",
99 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew"),
100 storm::exceptions::OutOfRangeException);
101
102 // The transition reward file contains rewards for a non existent state.
103 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
104 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab", "",
105 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"),
106 storm::exceptions::OutOfRangeException);
107
108 // The transition reward file contains rewards for a non existent transition
109 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
110 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab", "",
111 STORM_TEST_RESOURCES_DIR "/rew/dtmc_mismatched.trans.rew"),
112 storm::exceptions::OutOfRangeException);
113}
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:616
virtual bool hasRewardModel(std::string const &rewardModelName) const override
Retrieves whether the model has a reward model with the given name.
Definition Model.cpp:207
storm::models::sparse::StateLabeling const & getStateLabeling() const
Returns the state labeling associated with this model.
Definition Model.cpp:319
virtual uint_fast64_t getNumberOfTransitions() const override
Returns the number of (non-zero) transitions of the model.
Definition Model.cpp:167
virtual uint_fast64_t getNumberOfStates() const override
Returns the number of states of the model.
Definition Model.cpp:162
RewardModelType const & getRewardModel(std::string const &rewardModelName) const
Retrieves the reward model with the given name, if one exists.
Definition Model.cpp:218
storm::storage::BitVector const & getInitialStates() const
Retrieves the initial states of the model.
Definition Model.cpp:177
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