Storm 1.13.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
StateValuationTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
12
13class StateValuationTest : public ::testing::Test {
14 protected:
15 void SetUp() override {
16#ifndef STORM_HAVE_Z3
17 GTEST_SKIP() << "Z3 not available.";
18#endif
19 }
20};
21
22TEST_F(StateValuationTest, StateValuationConstruction) {
23 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/die.pm");
25 generatorOptions.setBuildStateValuations();
26 auto builder = storm::builder::ExplicitModelBuilder<double>(program, generatorOptions);
27 std::shared_ptr<storm::models::sparse::Model<double>> model = builder.build();
28 ASSERT_TRUE(model->hasStateValuations());
29 auto const& sv = model->getStateValuations();
30 ASSERT_EQ(sv.getNumberOfStates(), model->getNumberOfStates());
31 auto val = sv.at(0).begin();
32 ASSERT_EQ(val.getName(), "s");
33 val.operator++();
34 ASSERT_EQ(val.getName(), "d");
35 val.operator++();
36 ASSERT_TRUE(val == sv.at(0).end());
37}
38
39TEST_F(StateValuationTest, StateValuationTransformation) {
40 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/die.pm");
42 generatorOptions.setBuildStateValuations();
43 auto builder = storm::builder::ExplicitModelBuilder<double>(program, generatorOptions);
44 std::shared_ptr<storm::models::sparse::Model<double>> model = builder.build();
45 ASSERT_TRUE(model->hasStateValuations());
46 auto const& sv = model->getStateValuations();
47
49 auto newsv = notransformer.build(true);
50 ASSERT_EQ(newsv.getNumberOfStates(), sv.getNumberOfStates());
52 auto svar = program.getManager().getVariable("s");
53 auto dvar = program.getManager().getVariable("d");
54 auto sgt3Var = program.getManager().declareBooleanVariable("sGT3");
55 auto alwaysTrueVar = program.getManager().declareBooleanVariable("alwaysTrue");
56 auto alwaysFalseVar = program.getManager().declareBooleanVariable("alwaysFalse");
57 transformer.addBooleanExpression(sgt3Var, svar.getExpression() > program.getManager().integer(3));
58 transformer.addBooleanExpression(alwaysTrueVar, svar.getExpression() == svar.getExpression());
59 transformer.addBooleanExpression(alwaysFalseVar, dvar.getExpression() < dvar.getExpression());
60 newsv = transformer.build(true);
61 auto val = newsv.at(0).begin();
62 ASSERT_EQ(val.getName(), "sGT3");
63 val.operator++();
64 ASSERT_EQ(val.getName(), "alwaysTrue");
65 val.operator++();
66 ASSERT_EQ(val.getName(), "alwaysFalse");
67 val.operator++();
68 ASSERT_EQ(val.getName(), "s");
69 val.operator++();
70 ASSERT_EQ(val.getName(), "d");
71 val.operator++();
72 ASSERT_TRUE(val == newsv.at(0).end());
73 for (uint64_t state = 0; state < newsv.getNumberOfStates(); ++state) {
74 ASSERT_TRUE(newsv.getBooleanValue(state, alwaysTrueVar));
75 ASSERT_FALSE(newsv.getBooleanValue(state, alwaysFalseVar));
76 ASSERT_EQ(sv.getIntegerValue(state, svar), newsv.getIntegerValue(state, svar));
77 ASSERT_EQ(newsv.getBooleanValue(state, sgt3Var), newsv.getIntegerValue(state, svar) > 3);
78 }
79}
TEST_F(StateValuationTest, StateValuationConstruction)
BuilderOptions & setBuildStateValuations(bool newValue=true)
Should the state valuation mapping be built?
Variable declareBooleanVariable(std::string const &name, bool auxiliary=false)
Declares a new boolean variable with a name that must not yet exist and its corresponding type.
Expression integer(int_fast64_t value) const
Creates an expression that characterizes the given integer literal.
Variable getVariable(std::string const &name) const
Retrieves the expression that represents the variable with the given name.
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::expressions::ExpressionManager & getManager() const
Retrieves the manager responsible for the expressions of this program.
Definition Program.cpp:2378
Transforms the given state valuations to a new state valuations over a new variable set.
void addBooleanExpression(storm::expressions::Variable const &var, storm::expressions::Expression const &expr)
Add a Boolean variable defined by the given expression.
StateValuations build(bool extend)
Build and export the state valuations.
StateValueIteratorRange at(storm::storage::sparse::state_type const &state) const
storm::builder::BuilderOptions NextStateGeneratorOptions