Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SymbolicParametricDtmcPrctlModelCheckerTest.cpp
Go to the documentation of this file.
1#include "storm-config.h"
3#include "test/storm_gtest.h"
4
16
17TEST(SymbolicDtmcPrctlModelCheckerTest, Die_RationalFunction_Sylvan) {
18#ifdef STORM_HAVE_SYLVAN
19 storm::storage::SymbolicModelDescription modelDescription = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/pdtmc/parametric_die.pm");
20 storm::prism::Program program = modelDescription.preprocess().asPrismProgram();
21
22 // A parser that we use for conveniently constructing the formulas.
23 storm::parser::FormulaParser formulaParser;
24
25 // Build the die model with its reward model.
27 options.buildAllRewardModels = false;
28 options.rewardModelsToBuild.insert("coin_flips");
29 std::shared_ptr<storm::models::symbolic::Model<storm::dd::DdType::Sylvan, storm::RationalFunction>> model =
31 EXPECT_EQ(13ul, model->getNumberOfStates());
32 EXPECT_EQ(20ul, model->getNumberOfTransitions());
33 ASSERT_EQ(model->getType(), storm::models::ModelType::Dtmc);
34
35 std::map<storm::RationalFunctionVariable, storm::RationalFunctionCoefficient> instantiation;
36 std::set<storm::RationalFunctionVariable> variables = model->getParameters();
37 ASSERT_EQ(1ull, variables.size());
38 instantiation.emplace(*variables.begin(), storm::utility::convertNumber<storm::RationalFunctionCoefficient>(std::string("1/2")));
39
40 std::shared_ptr<storm::models::symbolic::Dtmc<storm::dd::DdType::Sylvan, storm::RationalFunction>> dtmc =
42
44
45 std::shared_ptr<storm::logic::Formula const> formula = formulaParser.parseSingleFormulaFromString("P=? [F \"one\"]");
46
47 std::unique_ptr<storm::modelchecker::CheckResult> result = checker.check(*formula);
48 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
51
52 EXPECT_EQ(storm::utility::parametric::evaluate<storm::RationalFunctionCoefficient>(quantitativeResult1.sum(), instantiation),
54
55 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"two\"]");
56
57 result = checker.check(*formula);
58 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
61
62 EXPECT_EQ(storm::utility::parametric::evaluate<storm::RationalFunctionCoefficient>(quantitativeResult2.sum(), instantiation),
64
65 formula = formulaParser.parseSingleFormulaFromString("P=? [F \"three\"]");
66
67 result = checker.check(*formula);
68 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
71
72 EXPECT_EQ(storm::utility::parametric::evaluate<storm::RationalFunctionCoefficient>(quantitativeResult3.sum(), instantiation),
74
75 formula = formulaParser.parseSingleFormulaFromString("R=? [F \"done\"]");
76
77 result = checker.check(*formula);
78 result->filter(storm::modelchecker::SymbolicQualitativeCheckResult<storm::dd::DdType::Sylvan>(model->getReachableStates(), model->getInitialStates()));
81
82 EXPECT_EQ(storm::utility::parametric::evaluate<storm::RationalFunctionCoefficient>(quantitativeResult4.sum(), instantiation),
84#else
85 GTEST_SKIP() << "Library Sylvan not available.";
86#endif
87}
TEST(SymbolicDtmcPrctlModelCheckerTest, Die_RationalFunction_Sylvan)
std::shared_ptr< storm::models::symbolic::Model< Type, ValueType > > build(storm::Environment const &env, 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:13
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
double evaluate(storm::RationalFunction const &function, Valuation< storm::RationalFunction > const &valuation)
TargetType convertNumber(SourceType const &number)
carl::RationalFunction< Polynomial, true > RationalFunction