Storm
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
9
11
13
14TEST(DeterministicModelParserTest, NonExistingFile) {
15 // No matter what happens, please do NOT create a file with the name "nonExistingFile.not"!
17 storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/nonExistingFile.not", STORM_TEST_RESOURCES_DIR "/nonExistingFile.not"),
18 storm::exceptions::FileIoException);
19
21 storm::parser::DeterministicModelParser<>::parseCtmc(STORM_TEST_RESOURCES_DIR "/nonExistingFile.not", STORM_TEST_RESOURCES_DIR "/nonExistingFile.not"),
22 storm::exceptions::FileIoException);
23}
24
25TEST(DeterministicModelParserTest, BasicDtmcParsing) {
26 // Parse a Dtmc and check the result.
28 STORM_TEST_RESOURCES_DIR "/tra/dtmc_general.tra", STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab",
29 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew", STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"));
30
31 ASSERT_EQ(8ul, dtmc.getNumberOfStates());
32 ASSERT_EQ(16ul, dtmc.getNumberOfTransitions());
33
34 ASSERT_EQ(2ul, dtmc.getInitialStates().getNumberOfSetBits());
35 ASSERT_TRUE(dtmc.getInitialStates().get(0));
36 ASSERT_TRUE(dtmc.getInitialStates().get(7));
37 ASSERT_EQ(5ul, dtmc.getStateLabeling().getNumberOfLabels());
38 ASSERT_EQ(2ul, dtmc.getLabelsOfState(6).size());
39
40 ASSERT_TRUE(dtmc.hasRewardModel());
41 ASSERT_EQ(42, dtmc.getRewardModel("").getStateRewardVector()[7]);
42 double rewardSum = 0;
43 for (uint_fast64_t i = 0; i < dtmc.getRewardModel("").getStateRewardVector().size(); i++) {
44 rewardSum += dtmc.getRewardModel("").getStateRewardVector()[i];
45 }
46 ASSERT_EQ(263.32, rewardSum);
47
48 ASSERT_TRUE(dtmc.getRewardModel("").hasTransitionRewards());
49 ASSERT_EQ(17ul, dtmc.getRewardModel("").getTransitionRewardMatrix().getEntryCount());
50 rewardSum = 0;
51 for (uint_fast64_t i = 0; i < dtmc.getRewardModel("").getTransitionRewardMatrix().getRowCount(); i++) {
52 rewardSum += dtmc.getRewardModel("").getTransitionRewardMatrix().getRowSum(i);
53 }
54 ASSERT_EQ(125.4, rewardSum);
55}
56
57TEST(DeterministicModelParserTest, BasicCtmcParsing) {
58 // Parse a Ctmc and check the result.
60 STORM_TEST_RESOURCES_DIR "/tra/dtmc_general.tra", STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab",
61 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew", STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"));
62
63 ASSERT_EQ(8ul, ctmc.getNumberOfStates());
64 ASSERT_EQ(16ul, ctmc.getNumberOfTransitions());
65
66 ASSERT_EQ(2ul, ctmc.getInitialStates().getNumberOfSetBits());
67 ASSERT_TRUE(ctmc.getInitialStates().get(0));
68 ASSERT_TRUE(ctmc.getInitialStates().get(7));
69 ASSERT_EQ(5ul, ctmc.getStateLabeling().getNumberOfLabels());
70 ASSERT_EQ(2ul, ctmc.getLabelsOfState(6).size());
71
72 ASSERT_TRUE(ctmc.hasRewardModel());
73 ASSERT_EQ(42, ctmc.getRewardModel("").getStateRewardVector()[7]);
74 double rewardSum = 0;
75 for (uint_fast64_t i = 0; i < ctmc.getRewardModel("").getStateRewardVector().size(); i++) {
76 rewardSum += ctmc.getRewardModel("").getStateRewardVector()[i];
77 }
78 ASSERT_EQ(263.32, rewardSum);
79
80 ASSERT_TRUE(ctmc.getRewardModel("").hasTransitionRewards());
81 ASSERT_EQ(17ul, ctmc.getRewardModel("").getTransitionRewardMatrix().getEntryCount());
82 rewardSum = 0;
83 for (uint_fast64_t i = 0; i < ctmc.getRewardModel("").getTransitionRewardMatrix().getRowCount(); i++) {
84 rewardSum += ctmc.getRewardModel("").getTransitionRewardMatrix().getRowSum(i);
85 }
86 ASSERT_EQ(125.4, rewardSum);
87}
88
89TEST(DeterministicModelParserTest, MismatchedFiles) {
90 // Test file combinations that do not match, i.e. differing number of states, transitions, etc.
91
92 // The labeling file contains a label for a non existent state.
93 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
94 STORM_TEST_RESOURCES_DIR "/lab/dtmc_general.lab"),
95 storm::exceptions::OutOfRangeException);
96
97 // The state reward file contains a reward for a non existent state.
98 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
99 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab",
100 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.state.rew"),
101 storm::exceptions::OutOfRangeException);
102
103 // The transition reward file contains rewards for a non existent state.
104 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
105 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab", "",
106 STORM_TEST_RESOURCES_DIR "/rew/dtmc_general.trans.rew"),
107 storm::exceptions::OutOfRangeException);
108
109 // The transition reward file contains rewards for a non existent transition
110 STORM_SILENT_ASSERT_THROW(storm::parser::DeterministicModelParser<>::parseDtmc(STORM_TEST_RESOURCES_DIR "/tra/dtmc_mismatched.tra",
111 STORM_TEST_RESOURCES_DIR "/lab/dtmc_mismatched.lab", "",
112 STORM_TEST_RESOURCES_DIR "/rew/dtmc_mismatched.trans.rew"),
113 storm::exceptions::OutOfRangeException);
114}
TEST(DeterministicModelParserTest, NonExistingFile)
This class represents a continuous-time Markov chain.
Definition Ctmc.h:15
This class represents a discrete-time Markov chain.
Definition Dtmc.h:14
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.
uint_fast64_t getNumberOfSetBits() const
Returns the number of bits that are set to true in this bit vector.
bool get(uint_fast64_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:99