Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ParametricDtmcPrctlModelCheckerTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
7#include "storm/api/builder.h"
13
14namespace {
15
16class EigenEnvironment {
17 public:
18 static storm::Environment createEnvironment() {
19 storm::Environment env;
20 env.solver().setLinearEquationSolverType(storm::solver::EquationSolverType::Eigen);
21 return env;
22 }
23};
24
25class EliminationEnvironment {
26 public:
27 static storm::Environment createEnvironment() {
28 storm::Environment env;
29 env.solver().setLinearEquationSolverType(storm::solver::EquationSolverType::Elimination);
30 return env;
31 }
32};
33
34template<typename TestType>
35class ParametricDtmcPrctlModelCheckerTest : public ::testing::Test {
36 public:
37 ParametricDtmcPrctlModelCheckerTest() : _environment(TestType::createEnvironment()) {}
38
39 void SetUp() override {
40#ifndef STORM_HAVE_Z3
41 GTEST_SKIP() << "Z3 not available.";
42#endif
43 }
44
45 storm::Environment const& env() const {
46 return _environment;
47 }
48
49 private:
50 storm::Environment _environment;
51};
52
53storm::RationalFunctionCoefficient parseNumber(std::string const& input) {
55}
56
57void checkDie(storm::Environment const& env) {
58 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pdtmc/parametric_die.pm");
61 std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> model =
63
64 // A parser that we use for conveniently constructing the formulas.
65
66 auto expManager = std::make_shared<storm::expressions::ExpressionManager>();
67 storm::parser::FormulaParser formulaParser(expManager);
68
69 ASSERT_EQ(model->getType(), storm::models::ModelType::Dtmc);
70
71 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> dtmc = model->as<storm::models::sparse::Dtmc<storm::RationalFunction>>();
72
73 ASSERT_EQ(dtmc->getNumberOfStates(), 13ull);
74 ASSERT_EQ(dtmc->getNumberOfTransitions(), 20ull);
75
76 std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> instantiation;
77 std::set<storm::RationalFunctionVariable> variables = storm::models::sparse::getProbabilityParameters(*dtmc);
78 ASSERT_EQ(variables.size(), 1ull);
79 instantiation.emplace(*variables.begin(), parseNumber("1/2"));
80
82
83 std::shared_ptr<storm::logic::Formula const> formula = formulaParser.parseSingleFormulaFromString("P=? [F \"one\"]");
84
85 std::unique_ptr<storm::modelchecker::CheckResult> result = checker.check(env, *formula);
88
89 EXPECT_EQ(parseNumber("1/6"), quantitativeResult1[0].evaluate(instantiation));
90
91 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"two\"]");
92
93 result = checker.check(env, *formula);
96
97 EXPECT_EQ(parseNumber("1/6"), quantitativeResult2[0].evaluate(instantiation));
98
99 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"three\"]");
100
101 result = checker.check(env, *formula);
104
105 EXPECT_EQ(parseNumber("1/6"), quantitativeResult3[0].evaluate(instantiation));
106
107 formula = formulaParser.parseSingleFormulaFromString("R=? [F \"done\"]");
108
109 result = checker.check(env, *formula);
112
113 EXPECT_EQ(parseNumber("11/3"), quantitativeResult4[0].evaluate(instantiation));
114}
115
116typedef ::testing::Types<EigenEnvironment, EliminationEnvironment> TestingTypes;
117
118TYPED_TEST_SUITE(ParametricDtmcPrctlModelCheckerTest, TestingTypes, );
119TYPED_TEST(ParametricDtmcPrctlModelCheckerTest, Die) {
120 checkDie(this->env());
121}
122} // namespace
SolverEnvironment & solver()
void setLinearEquationSolverType(storm::solver::EquationSolverType const &value, bool isSetFromDefault=false)
BuilderOptions & setBuildAllLabels(bool newValue=true)
Should all reward models be built?
BuilderOptions & setBuildAllRewardModels(bool newValue=true)
Should all reward models be built?
std::shared_ptr< storm::models::sparse::Model< ValueType, RewardModelType > > build()
Convert the program given at construction time to an abstract model.
ExplicitQuantitativeCheckResult< ValueType > & asExplicitQuantitativeCheckResult()
This class represents a discrete-time Markov chain.
Definition Dtmc.h:13
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::builder::BuilderOptions NextStateGeneratorOptions
std::set< storm::RationalFunctionVariable > getProbabilityParameters(Model< storm::RationalFunction > const &model)
Get all probability parameters occurring on transitions.
Definition Model.cpp:694
NumberType parseNumber(std::string const &value)
Parse number from string.
double evaluate(storm::RationalFunction const &function, Valuation< storm::RationalFunction > const &valuation)
TargetType convertNumber(SourceType const &number)
carl::RationalFunction< Polynomial, true > RationalFunction
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
Definition GraphTest.cpp:64
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes
Definition GraphTest.cpp:61