Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SymbolicParametricDtmcPrctlModelCheckerTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
2#include "test/storm_gtest.h"
3
17
19
20TEST(SymbolicDtmcPrctlModelCheckerTest, Die_RationalFunction_Sylvan) {
21 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pdtmc/parametric_die.pm");
22 storm::prism::Program program = modelDescription.preprocess().asPrismProgram();
23
24 // A parser that we use for conveniently constructing the formulas.
25 storm::parser::FormulaParser formulaParser;
26
27 // Build the die model with its reward model.
29 options.buildAllRewardModels = false;
30 options.rewardModelsToBuild.insert("coin_flips");
31 std::shared_ptr<storm::models::symbolic::Model<storm::dd::DdType::Sylvan, storm::RationalFunction>> model =
33 EXPECT_EQ(13ul, model->getNumberOfStates());
34 EXPECT_EQ(20ul, model->getNumberOfTransitions());
35 ASSERT_EQ(model->getType(), storm::models::ModelType::Dtmc);
36
37 std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> instantiation;
38 std::set<storm::RationalFunctionVariable> variables = model->getParameters();
39 ASSERT_EQ(1ull, variables.size());
40 instantiation.emplace(*variables.begin(), storm::utility::convertNumber<storm::RationalFunctionCoefficient>(std::string("1/2")));
41
42 std::shared_ptr<storm::models::symbolic::Dtmc<storm::dd::DdType::Sylvan, storm::RationalFunction>> dtmc =
44
46
47 std::shared_ptr<storm::logic::Formula const> formula = formulaParser.parseSingleFormulaFromString("P=? [F \"one\"]");
48
49 std::unique_ptr<storm::modelchecker::CheckResult> result = checker.check(*formula);
50 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
53
54 EXPECT_EQ(storm::utility::convertNumber<storm::RationalFunctionCoefficient>(quantitativeResult1.sum().evaluate(instantiation)),
55 storm::utility::convertNumber<storm::RationalFunctionCoefficient>(std::string("1/6")));
56
57 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"two\"]");
58
59 result = checker.check(*formula);
60 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
63
64 EXPECT_EQ(storm::utility::convertNumber<storm::RationalFunctionCoefficient>(quantitativeResult2.sum().evaluate(instantiation)),
65 storm::utility::convertNumber<storm::RationalFunctionCoefficient>(std::string("1/6")));
66
67 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"three\"]");
68
69 result = checker.check(*formula);
70 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
73
74 EXPECT_EQ(storm::utility::convertNumber<storm::RationalFunctionCoefficient>(quantitativeResult3.sum().evaluate(instantiation)),
75 storm::utility::convertNumber<storm::RationalFunctionCoefficient>(std::string("1/6")));
76
77 formula = formulaParser.parseSingleFormulaFromString("R=? [F \"done\"]");
78
79 result = checker.check(*formula);
80 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
83
84 EXPECT_EQ(storm::utility::convertNumber<storm::RationalFunctionCoefficient>(quantitativeResult4.sum().evaluate(instantiation)),
85 storm::utility::convertNumber<storm::RationalFunctionCoefficient>(std::string("11/3")));
86}
TEST(SymbolicDtmcPrctlModelCheckerTest, Die_RationalFunction_Sylvan)
std::shared_ptr< storm::models::symbolic::Model< Type, ValueType > > build(storm::prism::Program const &program, Options const &options=Options())
Translates the given program into a symbolic model (i.e.
SymbolicQuantitativeCheckResult< Type, ValueType > & asSymbolicQuantitativeCheckResult()
This class represents a discrete-time Markov chain.
Definition Dtmc.h:15
std::shared_ptr< storm::logic::Formula const > parseSingleFormulaFromString(std::string const &formulaString) const
Parses the formula given by the provided string.
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::prism::Program const & asPrismProgram() const
SymbolicModelDescription preprocess(std::string const &constantDefinitionString="") const