1#include "storm-config.h"
18enum class CtmcEngine { JaniSparse };
21class SparseGmmxxGmresIluEnvironment {
23 static const CtmcEngine engine = CtmcEngine::JaniSparse;
24 static const bool isExact =
false;
39class SparseSoundEvtEnvironment {
41 static const CtmcEngine engine = CtmcEngine::JaniSparse;
42 static const bool isExact =
false;
53class SparseClassicEnvironment {
55 static const CtmcEngine engine = CtmcEngine::JaniSparse;
56 static const bool isExact =
false;
66class SparseEigenRationalLuEnvironment {
68 static const CtmcEngine engine = CtmcEngine::JaniSparse;
69 static const bool isExact =
true;
81template<
typename TestType>
82class SteadyStateCtmcCslModelCheckerTest :
public ::testing::Test {
84 typedef typename TestType::ValueType
ValueType;
87 SteadyStateCtmcCslModelCheckerTest() : _environment(TestType::createEnvironment()) {}
92 return storm::utility::convertNumber<ValueType>(input);
97 bool isSparseModel()
const {
98 return std::is_same<typename TestType::ModelType, SparseModelType>::value;
100 CtmcEngine getEngine()
const {
101 return TestType::engine;
104 template<
typename MT =
typename TestType::ModelType>
105 typename std::enable_if<std::is_same<MT, SparseModelType>::value, std::shared_ptr<MT>>::type buildJaniModel(
106 std::string
const& pathToJaniModel, std::string
const& constantDefinitionString =
"")
const {
108 janiDescr = janiDescr.preprocess(constantDefinitionString);
112 template<
typename MT =
typename TestType::ModelType>
113 typename std::enable_if<std::is_same<MT, SparseModelType>::value, std::shared_ptr<storm::modelchecker::SparseCtmcCslModelChecker<MT>>>::type
114 createModelChecker(std::shared_ptr<MT>
const& model)
const {
115 if (TestType::engine == CtmcEngine::JaniSparse) {
116 return std::make_shared<storm::modelchecker::SparseCtmcCslModelChecker<SparseModelType>>(*model);
125typedef ::testing::Types<
127 SparseGmmxxGmresIluEnvironment,
129 SparseSoundEvtEnvironment, SparseClassicEnvironment, SparseEigenRationalLuEnvironment>
134TYPED_TEST(SteadyStateCtmcCslModelCheckerTest, steadystatetest) {
135 typedef typename TestFixture::ValueType
ValueType;
137 auto model = this->buildJaniModel(STORM_TEST_RESOURCES_DIR
"/ctmc/steadystatetest.jani");
138 EXPECT_EQ(8ul, model->getNumberOfStates());
139 EXPECT_EQ(12ul, model->getNumberOfTransitions());
141 auto checker = this->createModelChecker(model);
142 auto result = checker->computeSteadyStateDistribution(this->env());
144 ASSERT_TRUE(result->isExplicitQuantitativeCheckResult());
145 auto resultVector = result->template asExplicitQuantitativeCheckResult<ValueType>().getValueVector();
146 auto sortedVector = resultVector;
147 std::sort(sortedVector.begin(), sortedVector.end());
148 EXPECT_EQ(sortedVector[0], storm::utility::zero<ValueType>())
150 EXPECT_EQ(sortedVector[1], storm::utility::zero<ValueType>())
152 EXPECT_EQ(sortedVector[2], storm::utility::zero<ValueType>())
154 EXPECT_NEAR(sortedVector[3], this->
parseNumber(
"1/35"), this->precision())
156 EXPECT_NEAR(sortedVector[4], this->
parseNumber(
"2/35"), this->precision())
158 EXPECT_NEAR(sortedVector[5], this->
parseNumber(
"4/35"), this->precision())
160 EXPECT_NEAR(sortedVector[6], this->
parseNumber(
"1/5"), this->precision())
162 EXPECT_NEAR(sortedVector[7], this->
parseNumber(
"3/5"), this->precision())
void setMethod(storm::solver::EigenLinearEquationSolverMethod value)
SolverEnvironment & solver()
ModelCheckerEnvironment & modelchecker()
void setMethod(storm::solver::GmmxxLinearEquationSolverMethod value)
void setPreconditioner(storm::solver::GmmxxLinearEquationSolverPreconditioner value)
void setSteadyStateDistributionAlgorithm(SteadyStateDistributionAlgorithm value)
void setLinearEquationSolverType(storm::solver::EquationSolverType const &value, bool isSetFromDefault=false)
EigenSolverEnvironment & eigen()
void setForceSoundness(bool value)
GmmxxSolverEnvironment & gmmxx()
void setForceExact(bool value)
This class represents a continuous-time Markov chain.
std::pair< storm::jani::Model, std::vector< storm::jani::Property > > parseJaniModel(std::string const &filename, boost::optional< std::vector< std::string > > const &propertyFilter)
SFTBDDChecker::ValueType ValueType
NumberType parseNumber(std::string const &value)
Parse number from string.
std::string toString(std::vector< ValueType > const &vector)
Output vector as string.
TYPED_TEST(GraphTestAR, SymbolicProb01StochasticGameDieSmall)
TYPED_TEST_SUITE(GraphTestAR, TestingTypes,)
::testing::Types< Cudd, Sylvan > TestingTypes