You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
3.0 KiB
58 lines
3.0 KiB
#include "gtest/gtest.h"
|
|
#include "storm-config.h"
|
|
|
|
#include "src/parser/PrismParser.h"
|
|
#include "src/parser/FormulaParser.h"
|
|
|
|
#include "src/builder/ExplicitPrismModelBuilder.h"
|
|
|
|
#include "src/storage/bisimulation/NondeterministicModelBisimulationDecomposition.h"
|
|
#include "src/models/sparse/Mdp.h"
|
|
#include "src/models/sparse/StandardRewardModel.h"
|
|
|
|
TEST(NondeterministicModelBisimulationDecomposition, TwoDice) {
|
|
storm::prism::Program program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/two_dice.nm");
|
|
|
|
// Build the die model without its reward model.
|
|
std::shared_ptr<storm::models::sparse::Model<double>> model = storm::builder::ExplicitPrismModelBuilder<double>().translateProgram(program);
|
|
|
|
ASSERT_EQ(model->getType(), storm::models::ModelType::Mdp);
|
|
std::shared_ptr<storm::models::sparse::Mdp<double>> mdp = model->as<storm::models::sparse::Mdp<double>>();
|
|
|
|
storm::storage::NondeterministicModelBisimulationDecomposition<storm::models::sparse::Mdp<double>> bisim(*mdp);
|
|
ASSERT_NO_THROW(bisim.computeBisimulationDecomposition());
|
|
std::shared_ptr<storm::models::sparse::Model<double>> result;
|
|
ASSERT_NO_THROW(result = bisim.getQuotient());
|
|
|
|
EXPECT_EQ(storm::models::ModelType::Mdp, result->getType());
|
|
EXPECT_EQ(77ul, result->getNumberOfStates());
|
|
EXPECT_EQ(183ul, result->getNumberOfTransitions());
|
|
EXPECT_EQ(97ul, result->as<storm::models::sparse::Mdp<double>>()->getNumberOfChoices());
|
|
|
|
typename storm::storage::NondeterministicModelBisimulationDecomposition<storm::models::sparse::Mdp<double>>::Options options;
|
|
options.respectedAtomicPropositions = std::set<std::string>({"two"});
|
|
|
|
storm::storage::NondeterministicModelBisimulationDecomposition<storm::models::sparse::Mdp<double>> bisim2(*mdp, options);
|
|
ASSERT_NO_THROW(bisim2.computeBisimulationDecomposition());
|
|
ASSERT_NO_THROW(result = bisim2.getQuotient());
|
|
|
|
EXPECT_EQ(storm::models::ModelType::Mdp, result->getType());
|
|
EXPECT_EQ(11ul, result->getNumberOfStates());
|
|
EXPECT_EQ(26ul, result->getNumberOfTransitions());
|
|
EXPECT_EQ(14ul, result->as<storm::models::sparse::Mdp<double>>()->getNumberOfChoices());
|
|
|
|
// A parser that we use for conveniently constructing the formulas.
|
|
storm::parser::FormulaParser formulaParser;
|
|
std::shared_ptr<storm::logic::Formula> formula = formulaParser.parseSingleFormulaFromString("Pmin=? [F \"two\"]");
|
|
|
|
typename storm::storage::NondeterministicModelBisimulationDecomposition<storm::models::sparse::Mdp<double>>::Options options2(*mdp, *formula);
|
|
|
|
storm::storage::NondeterministicModelBisimulationDecomposition<storm::models::sparse::Mdp<double>> bisim3(*mdp, options2);
|
|
ASSERT_NO_THROW(bisim3.computeBisimulationDecomposition());
|
|
ASSERT_NO_THROW(result = bisim3.getQuotient());
|
|
|
|
EXPECT_EQ(storm::models::ModelType::Mdp, result->getType());
|
|
EXPECT_EQ(11ul, result->getNumberOfStates());
|
|
EXPECT_EQ(26ul, result->getNumberOfTransitions());
|
|
EXPECT_EQ(14ul, result->as<storm::models::sparse::Mdp<double>>()->getNumberOfChoices());
|
|
}
|