Storm
1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
SparseExplorationModelCheckerTest.cpp
Go to the documentation of this file.
1
#include "storm-config.h"
2
#include "
test/storm_gtest.h
"
3
4
#include "
storm-parsers/parser/FormulaParser.h
"
5
#include "
storm-parsers/parser/PrismParser.h
"
6
#include "
storm/adapters/RationalNumberAdapter.h
"
7
#include "
storm/environment/Environment.h
"
8
#include "
storm/environment/exploration/ExplorationEnvironment.h
"
9
#include "
storm/logic/Formulas.h
"
10
#include "
storm/modelchecker/exploration/SparseExplorationModelChecker.h
"
11
#include "
storm/modelchecker/results/ExplicitQuantitativeCheckResult.h
"
12
#include "
storm/models/sparse/Mdp.h
"
13
#include "
storm/settings/SettingsManager.h
"
14
15
class
SparseExplorationModelCheckerTest
:
public
::testing::Test {
16
protected
:
17
void
SetUp
()
override
{
18
#ifndef STORM_HAVE_Z3
19
GTEST_SKIP() <<
"Z3 not available."
;
20
#endif
21
}
22
};
23
24
TEST_F
(
SparseExplorationModelCheckerTest
, Dice) {
25
storm::Environment
env;
26
storm::prism::Program
program =
storm::parser::PrismParser::parse
(STORM_TEST_RESOURCES_DIR
"/mdp/two_dice.nm"
);
27
28
// A parser that we use for conveniently constructing the formulas.
29
storm::parser::FormulaParser
formulaParser;
30
31
storm::modelchecker::SparseExplorationModelChecker<storm::models::sparse::Mdp<double>
, uint32_t> checker(env, program);
32
33
std::shared_ptr<storm::logic::Formula const> formula = formulaParser.
parseSingleFormulaFromString
(
"Pmin=? [F \"two\"]"
);
34
35
std::unique_ptr<storm::modelchecker::CheckResult> result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
36
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult1 = result->
asExplicitQuantitativeCheckResult
<
double
>();
37
38
EXPECT_NEAR(0.0277777612209320068, quantitativeResult1[0], env.
exploration
().
getPrecision
());
39
40
formula = formulaParser.
parseSingleFormulaFromString
(
"Pmax=? [F \"two\"]"
);
41
42
result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
43
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult2 = result->
asExplicitQuantitativeCheckResult
<
double
>();
44
45
EXPECT_NEAR(0.0277777612209320068, quantitativeResult2[0], env.
exploration
().
getPrecision
());
46
47
formula = formulaParser.
parseSingleFormulaFromString
(
"Pmin=? [F \"three\"]"
);
48
49
result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
50
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult3 = result->
asExplicitQuantitativeCheckResult
<
double
>();
51
52
EXPECT_NEAR(0.0555555224418640136, quantitativeResult3[0], env.
exploration
().
getPrecision
());
53
54
formula = formulaParser.
parseSingleFormulaFromString
(
"Pmax=? [F \"three\"]"
);
55
56
result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
57
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult4 = result->
asExplicitQuantitativeCheckResult
<
double
>();
58
59
EXPECT_NEAR(0.0555555224418640136, quantitativeResult4[0], env.
exploration
().
getPrecision
());
60
61
formula = formulaParser.
parseSingleFormulaFromString
(
"Pmin=? [F \"four\"]"
);
62
63
result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
64
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult5 = result->
asExplicitQuantitativeCheckResult
<
double
>();
65
66
EXPECT_NEAR(0.083333283662796020508, quantitativeResult5[0], env.
exploration
().
getPrecision
());
67
68
formula = formulaParser.
parseSingleFormulaFromString
(
"Pmax=? [F \"four\"]"
);
69
70
result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
71
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult6 = result->
asExplicitQuantitativeCheckResult
<
double
>();
72
73
EXPECT_NEAR(0.083333283662796020508, quantitativeResult6[0], env.
exploration
().
getPrecision
());
74
}
75
76
TEST_F
(
SparseExplorationModelCheckerTest
, AsynchronousLeader) {
77
storm::Environment
env;
78
storm::prism::Program
program =
storm::parser::PrismParser::parse
(STORM_TEST_RESOURCES_DIR
"/mdp/leader4.nm"
);
79
80
// A parser that we use for conveniently constructing the formulas.
81
storm::parser::FormulaParser
formulaParser;
82
83
storm::modelchecker::SparseExplorationModelChecker<storm::models::sparse::Mdp<double>
, uint32_t> checker(env, program);
84
85
std::shared_ptr<storm::logic::Formula const> formula = formulaParser.
parseSingleFormulaFromString
(
"Pmin=? [F \"elected\"]"
);
86
87
std::unique_ptr<storm::modelchecker::CheckResult> result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
88
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult1 = result->
asExplicitQuantitativeCheckResult
<
double
>();
89
90
EXPECT_NEAR(1, quantitativeResult1[0], env.
exploration
().
getPrecision
());
91
92
formula = formulaParser.
parseSingleFormulaFromString
(
"Pmax=? [F \"elected\"]"
);
93
94
result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
95
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult2 = result->
asExplicitQuantitativeCheckResult
<
double
>();
96
97
EXPECT_NEAR(1, quantitativeResult2[0], env.
exploration
().
getPrecision
());
98
}
99
100
TEST_F
(
SparseExplorationModelCheckerTest
, Cicle) {
101
storm::Environment
env;
102
storm::prism::Program
program =
storm::parser::PrismParser::parse
(STORM_TEST_RESOURCES_DIR
"/mdp/cicle.nm"
);
103
104
// A parser that we use for conveniently constructing the formulas.
105
storm::parser::FormulaParser
formulaParser;
106
107
storm::modelchecker::SparseExplorationModelChecker<storm::models::sparse::Mdp<double>
, uint32_t> checker(env, program);
108
109
std::shared_ptr<storm::logic::Formula const> formula = formulaParser.
parseSingleFormulaFromString
(
"Pmax=? [ F \"done\"]"
);
110
111
std::unique_ptr<storm::modelchecker::CheckResult> result = checker.
check
(
storm::modelchecker::CheckTask<>
(*formula,
true
));
112
storm::modelchecker::ExplicitQuantitativeCheckResult<double>
const
& quantitativeResult1 = result->
asExplicitQuantitativeCheckResult
<
double
>();
113
114
EXPECT_NEAR(0.875, quantitativeResult1[0], env.
exploration
().
getPrecision
());
115
}
Environment.h
ExplicitQuantitativeCheckResult.h
ExplorationEnvironment.h
FormulaParser.h
Formulas.h
PrismParser.h
RationalNumberAdapter.h
SettingsManager.h
SparseExplorationModelChecker.h
TEST_F
TEST_F(SparseExplorationModelCheckerTest, Dice)
Definition
SparseExplorationModelCheckerTest.cpp:24
SparseExplorationModelCheckerTest
Definition
SparseExplorationModelCheckerTest.cpp:15
SparseExplorationModelCheckerTest::SetUp
void SetUp() override
Definition
SparseExplorationModelCheckerTest.cpp:17
storm::Environment
Definition
Environment.h:21
storm::Environment::exploration
ExplorationEnvironment & exploration()
Definition
Environment.cpp:36
storm::ExplorationEnvironment::getPrecision
double getPrecision() const
Definition
ExplorationEnvironment.cpp:58
storm::modelchecker::AbstractModelChecker::check
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
Definition
AbstractModelChecker.cpp:49
storm::modelchecker::CheckResult::asExplicitQuantitativeCheckResult
ExplicitQuantitativeCheckResult< ValueType > & asExplicitQuantitativeCheckResult()
Definition
CheckResult.cpp:94
storm::modelchecker::CheckTask
Definition
CheckTask.h:30
storm::modelchecker::ExplicitQuantitativeCheckResult
A quantitative check result over the states of a sparse model.
Definition
ExplicitQuantitativeCheckResult.h:30
storm::modelchecker::SparseExplorationModelChecker
Definition
SparseExplorationModelChecker.h:42
storm::parser::FormulaParser
Definition
FormulaParser.h:21
storm::parser::FormulaParser::parseSingleFormulaFromString
std::shared_ptr< storm::logic::Formula const > parseSingleFormulaFromString(std::string const &formulaString) const
Parses the formula given by the provided string.
Definition
FormulaParser.cpp:55
storm::parser::PrismParser::parse
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.
Definition
PrismParser.cpp:5
storm::prism::Program
Definition
Program.h:30
Mdp.h
storm_gtest.h
src
test
storm
modelchecker
exploration
SparseExplorationModelCheckerTest.cpp
Generated by
1.15.0