1#include "storm-config.h"
19 return std::make_unique<storm::modelchecker::ExplicitQualitativeCheckResult>(model->getInitialStates());
23 return std::make_unique<storm::modelchecker::ExplicitQualitativeCheckResult>(model->getInitialStates());
27 std::unique_ptr<storm::modelchecker::CheckResult>& result) {
29 result->filter(*filter);
30 return result->asQuantitativeCheckResult<
double>().getMin();
34 std::unique_ptr<storm::modelchecker::CheckResult>& result) {
36 result->filter(*filter);
37 return result->asQuantitativeCheckResult<
double>().getMin();
40void expectThrow(std::string
const& path, std::string
const& formulaString,
41 std::optional<storm::UncertaintyResolutionMode> uncertaintyResolutionMode = std::nullopt) {
51 if (uncertaintyResolutionMode.has_value()) {
52 task.setUncertaintyResolutionMode(uncertaintyResolutionMode.value());
64 std::shared_ptr<storm::models::sparse::Model<storm::Interval>> modelPtr = storm::api::buildSparseModel<storm::Interval>(program, formulas);
86 taskMax.setUncertaintyResolutionMode(storm::UncertaintyResolutionMode::Maximize);
89 auto resultMax = checker.
check(env, taskMax);
93 taskMin.setUncertaintyResolutionMode(storm::UncertaintyResolutionMode::Minimize);
95 auto resultMin = checker.check(env, taskMin);
104 std::shared_ptr<storm::models::sparse::Model<storm::Interval>> modelPtr = storm::api::buildSparseModel<storm::Interval>(program, formulas);
112 taskMax.setUncertaintyResolutionMode(storm::UncertaintyResolutionMode::Maximize);
115 auto resultMax = checker.
check(env, taskMax);
119 taskMin.setUncertaintyResolutionMode(storm::UncertaintyResolutionMode::Minimize);
121 auto resultMin = checker.check(env, taskMin);
136 auto result = checker.
check(env, task1);
138 ASSERT_TRUE(result->isExplicitQualitativeCheckResult());
140 for (
size_t i = 0; i < expectedResultVector[0].size(); i++) {
141 EXPECT_EQ(expectedResultVector[0].get(i), result->asExplicitQualitativeCheckResult()[i]);
146 result = checker.check(env, task2);
148 ASSERT_TRUE(result->isExplicitQualitativeCheckResult());
150 for (
size_t i = 0; i < expectedResultVector[1].size(); i++) {
151 EXPECT_EQ(expectedResultVector[1].get(i), result->asExplicitQualitativeCheckResult()[i]);
155TEST(RobustDtmcModelCheckerTest, Tiny01ReachMaxMinProbs) {
160TEST(RobustDtmcModelCheckerTest, Tiny01MaxReachProbNoUncertaintyResolutionMode) {
162 expectThrow(STORM_TEST_RESOURCES_DIR
"/idtmc/tiny-01.drn",
"P=? [ F \"target\"];",
163 std::make_optional<storm::UncertaintyResolutionMode>(storm::UncertaintyResolutionMode::Unset));
166TEST(RobustDtmcModelCheckerTest, Tiny01MaxReachProbNoOptimizationDirectionButRobust) {
168 expectThrow(STORM_TEST_RESOURCES_DIR
"/idtmc/tiny-01.drn",
"P=? [ F \"target\"];",
169 std::make_optional<storm::UncertaintyResolutionMode>(storm::UncertaintyResolutionMode::Robust));
172TEST(RobustDtmcModelCheckerTest, Tiny02GloballyMaxMinProbs) {
174 expectThrow(STORM_TEST_RESOURCES_DIR
"/idtmc/tiny-02.drn",
"P=? [ G \"target\"];P=? [ G \"target\"]");
177TEST(RobustDtmcModelCheckerTest, DieIntervalsMaxMin) {
179 GTEST_SKIP() <<
"Z3 not available.";
185TEST(RobustDtmcModelCheckerTest, BrpIntervalsMaxMin) {
187 GTEST_SKIP() <<
"Z3 not available.";
191 2.559615918664207e-10, 0.0008464876763422187);
194TEST(RobustDtmcModelCheckerTest, DieIntervalsMaxMinRewards) {
196 GTEST_SKIP() <<
"Z3 not available.";
202TEST(RobustDtmcModelCheckerTest, Tiny03MaxMinRewards) {
207TEST(RobustDtmcModelCheckerTest, Tiny03RewardsNoUncertaintyResolutionMode) {
209 expectThrow(STORM_TEST_RESOURCES_DIR
"/idtmc/tiny-03.drn",
"R=? [ F \"target\"]", storm::UncertaintyResolutionMode::Unset);
212TEST(RobustDtmcModelCheckerTest, Tiny04MaxMinRewards) {
215 std::numeric_limits<double>::infinity(), std::numeric_limits<double>::infinity());
218TEST(RobustDtmcModelCheckerTest, TinyO2Propositional) {
220 std::vector<storm::storage::BitVector> expectedResults;
224 expectedResults.push_back(result1);
225 result1.complement();
226 expectedResults.push_back(result1);
void checkPrismModelForQuantitativeResult(std::string const &path, std::string const &formulaString, double min, double max)
TEST(RobustDtmcModelCheckerTest, Tiny01ReachMaxMinProbs)
std::unique_ptr< storm::modelchecker::QualitativeCheckResult > getInitialStateFilter(std::shared_ptr< storm::models::sparse::Model< storm::Interval > > const &model)
void checkModelForQualitativeResult(std::string const &path, std::string const &formulaString, std::vector< storm::storage::BitVector > expectedResultVector)
void expectThrow(std::string const &path, std::string const &formulaString, std::optional< storm::UncertaintyResolutionMode > uncertaintyResolutionMode=std::nullopt)
void checkExplicitModelForQuantitativeResult(std::string const &path, std::string const &formulaString, double min, double max)
void expectThrowPrism(std::string const &path, std::string const &formulaString)
double getQuantitativeResultAtInitialState(std::shared_ptr< storm::models::sparse::Model< storm::Interval > > const &model, std::unique_ptr< storm::modelchecker::CheckResult > &result)
SolverEnvironment & solver()
void setMethod(storm::solver::MinMaxMethod value, bool isSetFromDefault=false)
MinMaxSolverEnvironment & minMax()
This class represents the base class of all exception classes.
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
This class represents a discrete-time Markov chain.
Base class for all sparse models.
static std::shared_ptr< storm::models::sparse::Model< ValueType, RewardModelType > > parseModel(std::string const &fil, DirectEncodingParserOptions const &options=DirectEncodingParserOptions())
Load a model in DRN format from a file and create the model.
A bit vector that is internally represented as a vector of 64-bit values.
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::vector< storm::jani::Property > parseProperties(storm::parser::FormulaParser &formulaParser, std::string const &inputString, boost::optional< std::set< std::string > > const &propertyFilter)
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)
#define STORM_SILENT_EXPECT_THROW(statement, expected_exception)