|
|
@ -194,3 +194,32 @@ TEST(SparseMdpPrctlModelCheckerTest, AsynchronousLeader) { |
|
|
|
|
|
|
|
EXPECT_NEAR(4.285689611, quantitativeResult6[0], storm::settings::nativeEquationSolverSettings().getPrecision()); |
|
|
|
} |
|
|
|
|
|
|
|
TEST(SparseMdpPrctlModelCheckerTest, LRA) { |
|
|
|
storm::storage::SparseMatrixBuilder<double> matrixBuilder; |
|
|
|
std::shared_ptr<storm::models::Mdp<double>> mdp; |
|
|
|
|
|
|
|
{ |
|
|
|
matrixBuilder = storm::storage::SparseMatrixBuilder<double>(2, 2, 2); |
|
|
|
matrixBuilder.addNextValue(0, 1, 1.); |
|
|
|
matrixBuilder.addNextValue(1, 0, 1.); |
|
|
|
storm::storage::SparseMatrix<double> transitionMatrix = matrixBuilder.build(); |
|
|
|
|
|
|
|
storm::models::AtomicPropositionsLabeling ap(2, 1); |
|
|
|
ap.addAtomicProposition("a"); |
|
|
|
ap.addAtomicPropositionToState("a", 1); |
|
|
|
|
|
|
|
mdp.reset(new storm::models::Mdp<double>(transitionMatrix, ap, boost::none, boost::none, boost::none)); |
|
|
|
|
|
|
|
storm::modelchecker::SparseMdpPrctlModelChecker<double> checker(*mdp, std::shared_ptr<storm::solver::NativeNondeterministicLinearEquationSolver<double>>(new storm::solver::NativeNondeterministicLinearEquationSolver<double>())); |
|
|
|
|
|
|
|
auto labelFormula = std::make_shared<storm::logic::AtomicLabelFormula>("a"); |
|
|
|
auto lraFormula = std::make_shared<storm::logic::LongRunAverageOperatorFormula>(storm::logic::OptimalityType::Minimize, labelFormula); |
|
|
|
|
|
|
|
std::unique_ptr<storm::modelchecker::CheckResult> result = checker.check(*lraFormula); |
|
|
|
storm::modelchecker::ExplicitQuantitativeCheckResult<double>& quantitativeResult = result->asExplicitQuantitativeCheckResult<double>(); |
|
|
|
|
|
|
|
EXPECT_NEAR(.5, quantitativeResult[0], storm::settings::nativeEquationSolverSettings().getPrecision()); |
|
|
|
EXPECT_NEAR(.5, quantitativeResult[1], storm::settings::nativeEquationSolverSettings().getPrecision()); |
|
|
|
} |
|
|
|
} |