@ -5,6 +5,7 @@
# include "storm/parser/PrismParser.h"
# include "storm/abstraction/MenuGameRefiner.h"
# include "storm/abstraction/prism/PrismMenuGameAbstractor.h"
# include "storm/storage/expressions/Expression.h"
@ -25,9 +26,12 @@ TEST(PrismMenuGame, DieAbstractionTest_Cudd) {
storm : : expressions : : ExpressionManager & manager = program . getManager ( ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " s " ) < manager . integer ( 3 ) ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 26 , game . getNumberOfTransitions ( ) ) ;
@ -43,7 +47,11 @@ TEST(PrismMenuGame, DieAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " s " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
@ -53,22 +61,28 @@ TEST(PrismMenuGame, DieAbstractionTest_Sylvan) {
}
# ifdef STORM_HAVE_CARL
TEST ( PrismMenuGame , DieAbstractionTest_SylvanWithRationalFunction ) {
storm : : prism : : Program program = storm : : parser : : PrismParser : : parse ( STORM_TEST_RESOURCES_DIR " /dtmc/die.pm " ) ;
// Commented out due to incompatibility with new refiner functionality.
// This functionality depends on some operators being available on the value type which are not there for rational functions.
//TEST(PrismMenuGame, DieAbstractionTest_SylvanWithRationalFunction) {
// storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/dtmc/die.pm");
std : : vector < storm : : expressions : : Expression > initialPredicates ;
storm : : expressions : : ExpressionManager & manager = program . getManager ( ) ;
// std::vector<storm::expressions::Expression> initialPredicates;
// storm::expressions::ExpressionManager& manager = program.getManager();
initialPredicates . push_back ( manager . getVariableExpression ( " s " ) < manager . integer ( 3 ) ) ;
// initialPredicates.push_back(manager.getVariableExpression("s") < manager.integer(3));
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
// std::shared_ptr<storm::utility::solver::SmtSolverFactory> smtSolverFactory = std::make_shared<storm::utility::solver::MathsatSmtSolverFactory>();
// storm::abstraction::prism::PrismMenuGameAbstractor<storm::dd::DdType::Sylvan, storm::RationalFunction> abstractor(program, smtSolverFactory);
// storm::abstraction::MenuGameRefiner<storm::dd::DdType::Sylvan, storm::RationalFunction> refiner(abstractor, smtSolverFactory->create(manager));
// refiner.refine(initialPredicates);
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , storm : : RationalFunction > game = abstractor . abstract ( ) ;
// storm::abstraction::MenuGame<storm::dd::DdType::Sylvan, storm::RationalFunction> game = abstractor.abstract();
EXPECT_EQ ( 26 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 4 , game . getNumberOfStates ( ) ) ;
EXPECT_EQ ( 2 , game . getBottomStates ( ) . getNonZeroCount ( ) ) ;
}
// EXPECT_EQ(26, game.getNumberOfTransitions());
// EXPECT_EQ(4, game.getNumberOfStates());
// EXPECT_EQ(2, game.getBottomStates().getNonZeroCount());
//}
# endif
TEST ( PrismMenuGame , DieAbstractionAndRefinementTest_Cudd ) {
@ -79,9 +93,13 @@ TEST(PrismMenuGame, DieAbstractionAndRefinementTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " s " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " s " ) = = manager . integer ( 7 ) , true ) } ) ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( refiner . refine ( { manager . getVariableExpression ( " s " ) = = manager . integer ( 7 ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
@ -98,9 +116,13 @@ TEST(PrismMenuGame, DieAbstractionAndRefinementTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " s " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " s " ) = = manager . integer ( 7 ) , true ) } ) ) ;
ASSERT_NO_THROW ( refine r. refine ( { manager . getVariableExpression ( " s " ) = = manager . integer ( 7 ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
@ -132,8 +154,12 @@ TEST(PrismMenuGame, DieFullAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " d " ) = = manager . integer ( 5 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " d " ) = = manager . integer ( 6 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 20 , game . getNumberOfTransitions ( ) ) ;
@ -164,8 +190,12 @@ TEST(PrismMenuGame, DieFullAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " d " ) = = manager . integer ( 5 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " d " ) = = manager . integer ( 6 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 20 , game . getNumberOfTransitions ( ) ) ;
@ -182,8 +212,12 @@ TEST(PrismMenuGame, CrowdsAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " phase " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 31 , game . getNumberOfTransitions ( ) ) ;
@ -200,8 +234,12 @@ TEST(PrismMenuGame, CrowdsAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " phase " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 31 , game . getNumberOfTransitions ( ) ) ;
@ -218,9 +256,13 @@ TEST(PrismMenuGame, CrowdsAbstractionAndRefinementTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " phase " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " observe0 " ) + manager . getVariableExpression ( " observe1 " ) + manager . getVariableExpression ( " observe2 " ) + manager . getVariableExpression ( " observe3 " ) + manager . getVariableExpression ( " observe4 " ) < = manager . getVariableExpression ( " runCount " ) , true ) } ) ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( refiner . refine ( { manager . getVariableExpression ( " observe0 " ) + manager . getVariableExpression ( " observe1 " ) + manager . getVariableExpression ( " observe2 " ) + manager . getVariableExpression ( " observe3 " ) + manager . getVariableExpression ( " observe4 " ) < = manager . getVariableExpression ( " runCount " ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
@ -238,9 +280,13 @@ TEST(PrismMenuGame, CrowdsAbstractionAndRefinementTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " phase " ) < manager . integer ( 3 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " observe0 " ) + manager . getVariableExpression ( " observe1 " ) + manager . getVariableExpression ( " observe2 " ) + manager . getVariableExpression ( " observe3 " ) + manager . getVariableExpression ( " observe4 " ) < = manager . getVariableExpression ( " runCount " ) , true ) } ) ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( refiner . refine ( { manager . getVariableExpression ( " observe0 " ) + manager . getVariableExpression ( " observe1 " ) + manager . getVariableExpression ( " observe2 " ) + manager . getVariableExpression ( " observe3 " ) + manager . getVariableExpression ( " observe4 " ) < = manager . getVariableExpression ( " runCount " ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
@ -312,8 +358,12 @@ TEST(PrismMenuGame, CrowdsFullAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " lastSeen " ) = = manager . integer ( 3 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " lastSeen " ) = = manager . integer ( 4 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 15113 , game . getNumberOfTransitions ( ) ) ;
@ -384,7 +434,11 @@ TEST(PrismMenuGame, CrowdsFullAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " lastSeen " ) = = manager . integer ( 3 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " lastSeen " ) = = manager . integer ( 4 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
@ -404,8 +458,12 @@ TEST(PrismMenuGame, TwoDiceAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " s1 " ) < manager . integer ( 3 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " s2 " ) = = manager . integer ( 0 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 90 , game . getNumberOfTransitions ( ) ) ;
@ -424,7 +482,11 @@ TEST(PrismMenuGame, TwoDiceAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " s1 " ) < manager . integer ( 3 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " s2 " ) = = manager . integer ( 0 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
@ -444,9 +506,13 @@ TEST(PrismMenuGame, TwoDiceAbstractionAndRefinementTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " s1 " ) < manager . integer ( 3 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " s2 " ) = = manager . integer ( 0 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " d1 " ) + manager . getVariableExpression ( " d2 " ) = = manager . integer ( 7 ) , true ) } ) ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( refiner . refine ( { manager . getVariableExpression ( " d1 " ) + manager . getVariableExpression ( " d2 " ) = = manager . integer ( 7 ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
@ -466,9 +532,13 @@ TEST(PrismMenuGame, TwoDiceAbstractionAndRefinementTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " s1 " ) < manager . integer ( 3 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " s2 " ) = = manager . integer ( 0 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " d1 " ) + manager . getVariableExpression ( " d2 " ) = = manager . integer ( 7 ) , true ) } ) ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( refiner . refine ( { manager . getVariableExpression ( " d1 " ) + manager . getVariableExpression ( " d2 " ) = = manager . integer ( 7 ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
@ -519,8 +589,12 @@ TEST(PrismMenuGame, TwoDiceFullAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " d2 " ) = = manager . integer ( 5 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " d2 " ) = = manager . integer ( 6 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 436 , game . getNumberOfTransitions ( ) ) ;
@ -570,8 +644,12 @@ TEST(PrismMenuGame, TwoDiceFullAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " d2 " ) = = manager . integer ( 5 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " d2 " ) = = manager . integer ( 6 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 436 , game . getNumberOfTransitions ( ) ) ;
@ -591,11 +669,15 @@ TEST(PrismMenuGame, WlanAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " bc1 " ) = = manager . integer ( 0 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " c1 " ) = = manager . getVariableExpression ( " c2 " ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 1379 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 1507 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 12 , game . getNumberOfStates ( ) ) ;
EXPECT_EQ ( 8 , game . getBottomStates ( ) . getNonZeroCount ( ) ) ;
}
@ -612,11 +694,15 @@ TEST(PrismMenuGame, WlanAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " bc1 " ) = = manager . integer ( 0 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " c1 " ) = = manager . getVariableExpression ( " c2 " ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 1379 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 1507 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 12 , game . getNumberOfStates ( ) ) ;
EXPECT_EQ ( 8 , game . getBottomStates ( ) . getNonZeroCount ( ) ) ;
}
@ -633,13 +719,17 @@ TEST(PrismMenuGame, WlanAbstractionAndRefinementTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " bc1 " ) = = manager . integer ( 0 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " c1 " ) = = manager . getVariableExpression ( " c2 " ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " backoff1 " ) < manager . integer ( 7 ) , true ) } ) ) ;
ASSERT_NO_THROW ( refine r. refine ( { manager . getVariableExpression ( " backoff1 " ) < manager . integer ( 7 ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 2744 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 3000 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 24 , game . getNumberOfStates ( ) ) ;
EXPECT_EQ ( 16 , game . getBottomStates ( ) . getNonZeroCount ( ) ) ;
}
@ -656,13 +746,17 @@ TEST(PrismMenuGame, WlanAbstractionAndRefinementTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " bc1 " ) = = manager . integer ( 0 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " c1 " ) = = manager . getVariableExpression ( " c2 " ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
ASSERT_NO_THROW ( abstractor . refine ( { std : : make_pair ( manager . getVariableExpression ( " backoff1 " ) < manager . integer ( 7 ) , true ) } ) ) ;
ASSERT_NO_THROW ( refine r. refine ( { manager . getVariableExpression ( " backoff1 " ) < manager . integer ( 7 ) } ) ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 2744 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 3000 , game . getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 24 , game . getNumberOfStates ( ) ) ;
EXPECT_EQ ( 16 , game . getBottomStates ( ) . getNonZeroCount ( ) ) ;
}
@ -777,8 +871,12 @@ TEST(PrismMenuGame, WlanFullAbstractionTest_Cudd) {
initialPredicates . push_back ( manager . getVariableExpression ( " bc2 " ) = = manager . integer ( 0 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " bc2 " ) = = manager . integer ( 1 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : CUDD , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : CUDD , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : CUDD , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 9503 , game . getNumberOfTransitions ( ) ) ;
@ -896,8 +994,12 @@ TEST(PrismMenuGame, WlanFullAbstractionTest_Sylvan) {
initialPredicates . push_back ( manager . getVariableExpression ( " bc2 " ) = = manager . integer ( 0 ) ) ;
initialPredicates . push_back ( manager . getVariableExpression ( " bc2 " ) = = manager . integer ( 1 ) ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , initialPredicates , std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) , false ) ;
std : : shared_ptr < storm : : utility : : solver : : SmtSolverFactory > smtSolverFactory = std : : make_shared < storm : : utility : : solver : : MathsatSmtSolverFactory > ( ) ;
storm : : abstraction : : prism : : PrismMenuGameAbstractor < storm : : dd : : DdType : : Sylvan , double > abstractor ( program , smtSolverFactory ) ;
storm : : abstraction : : MenuGameRefiner < storm : : dd : : DdType : : Sylvan , double > refiner ( abstractor , smtSolverFactory - > create ( manager ) ) ;
refiner . refine ( initialPredicates ) ;
storm : : abstraction : : MenuGame < storm : : dd : : DdType : : Sylvan , double > game = abstractor . abstract ( ) ;
EXPECT_EQ ( 9503 , game . getNumberOfTransitions ( ) ) ;