Storm 1.11.1.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() {
20 env.solver().setLinearEquationSolverType(storm::solver::EquationSolverType::Eigen);
21 return env;
22 }
23};
24
25class EliminationEnvironment {
26 public:
27 static storm::Environment createEnvironment() {
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 storm::RationalFunctionCoefficient parseNumber(std::string const& input) const {
49 return storm::utility::convertNumber<storm::RationalFunctionCoefficient>(input);
50 }
51
52 private:
53 storm::Environment _environment;
54};
55
56typedef ::testing::Types<EigenEnvironment, EliminationEnvironment> TestingTypes;
57
58TYPED_TEST_SUITE(ParametricDtmcPrctlModelCheckerTest, TestingTypes, );
59TYPED_TEST(ParametricDtmcPrctlModelCheckerTest, Die) {
60 storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pdtmc/parametric_die.pm");
63 std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> model =
65
66 // A parser that we use for conveniently constructing the formulas.
67
68 auto expManager = std::make_shared<storm::expressions::ExpressionManager>();
69 storm::parser::FormulaParser formulaParser(expManager);
70
71 ASSERT_EQ(model->getType(), storm::models::ModelType::Dtmc);
72
73 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> dtmc = model->as<storm::models::sparse::Dtmc<storm::RationalFunction>>();
74
75 ASSERT_EQ(dtmc->getNumberOfStates(), 13ull);
76 ASSERT_EQ(dtmc->getNumberOfTransitions(), 20ull);
77
78 std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> instantiation;
79 std::set<storm::RationalFunctionVariable> variables = storm::models::sparse::getProbabilityParameters(*dtmc);
80 ASSERT_EQ(variables.size(), 1ull);
81 instantiation.emplace(*variables.begin(), this->parseNumber("1/2"));
82
84
85 std::shared_ptr<storm::logic::Formula const> formula = formulaParser.parseSingleFormulaFromString("P=? [F \"one\"]");
86
87 std::unique_ptr<storm::modelchecker::CheckResult> result = checker.check(this->env(), *formula);
90
91 EXPECT_EQ(this->parseNumber("1/6"), quantitativeResult1[0].evaluate(instantiation));
92
93 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"two\"]");
94
95 result = checker.check(this->env(), *formula);
98
99 EXPECT_EQ(this->parseNumber("1/6"), quantitativeResult2[0].evaluate(instantiation));
100
101 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"three\"]");
102
103 result = checker.check(this->env(), *formula);
106
107 EXPECT_EQ(this->parseNumber("1/6"), quantitativeResult3[0].evaluate(instantiation));
108
109 formula = formulaParser.parseSingleFormulaFromString("R=? [F \"done\"]");
110
111 result = checker.check(this->env(), *formula);
114
115 EXPECT_EQ(this->parseNumber("11/3"), quantitativeResult4[0].evaluate(instantiation));
116}
117} // namespace
SolverEnvironment & solver()
void setLinearEquationSolverType(storm::solver::EquationSolverType const &value, bool isSetFromDefault=false)
BuilderOptions & setBuildAllLabels(bool newValue=true)
Should all reward models be built? If not set, only required reward models are build.
BuilderOptions & setBuildAllRewardModels(bool newValue=true)
Should all reward models be built? If not set, only required reward models are build.
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.
std::set< storm::RationalFunctionVariable > getProbabilityParameters(Model< storm::RationalFunction > const &model)
Get all probability parameters occurring on transitions.
Definition Model.cpp:695
NumberType parseNumber(std::string const &value)
Parse number from string.
double evaluate(storm::RationalFunction const &function, Valuation< storm::RationalFunction > const &valuation)
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
Definition GraphTest.cpp:62
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes
Definition GraphTest.cpp:59