@ -10,7 +10,36 @@
# include "src/parser/PrismParser.h"
# include "src/builder/DdPrismModelBuilder.h"
TEST ( DdPrismModelBuilderTest , Dtmc ) {
TEST ( DdPrismModelBuilderTest_Sylvan , Dtmc ) {
storm : : prism : : Program program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/die.pm " ) ;
std : : shared_ptr < storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan > > model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 13ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 20ul , model - > getNumberOfTransitions ( ) ) ;
// FIXME: re-enable as soon as sylvan ADD-iterator is done.
// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/brp-16-2.pm");
// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::Sylvan>::translateProgram(program);
// EXPECT_EQ(677ul, model->getNumberOfStates());
// EXPECT_EQ(867ul, model->getNumberOfTransitions());
// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/crowds-5-5.pm");
// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::Sylvan>::translateProgram(program);
// EXPECT_EQ(8607ul, model->getNumberOfStates());
// EXPECT_EQ(15113ul, model->getNumberOfTransitions());
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/leader-3-5.pm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 273ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 397ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/nand-5-2.pm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 1728ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 2505ul , model - > getNumberOfTransitions ( ) ) ;
}
TEST ( DdPrismModelBuilderTest_Cudd , Dtmc ) {
storm : : prism : : Program program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/die.pm " ) ;
std : : shared_ptr < storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD > > model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : CUDD > : : translateProgram ( program ) ;
@ -21,24 +50,55 @@ TEST(DdPrismModelBuilderTest, Dtmc) {
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : CUDD > : : translateProgram ( program ) ;
EXPECT_EQ ( 677ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 867ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/crowds-5-5.pm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : CUDD > : : translateProgram ( program ) ;
EXPECT_EQ ( 8607ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 15113ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/leader-3-5.pm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : CUDD > : : translateProgram ( program ) ;
EXPECT_EQ ( 273ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 397ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/nand-5-2.pm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : CUDD > : : translateProgram ( program ) ;
EXPECT_EQ ( 1728ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 2505ul , model - > getNumberOfTransitions ( ) ) ;
}
TEST ( DdPrismModelBuilderTest , Ctmc ) {
TEST ( DdPrismModelBuilderTest_Sylvan , Ctmc ) {
// Set the PRISM compatibility mode temporarily. It is set to its old value once the returned object is destructed.
std : : unique_ptr < storm : : settings : : SettingMemento > enablePrismCompatibility = storm : : settings : : mutableGeneralSettings ( ) . overridePrismCompatibilityMode ( true ) ;
storm : : prism : : Program program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/cluster2.sm " ) ;
std : : shared_ptr < storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan > > model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 276ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 1120ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/embedded2.sm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 3478ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 14639ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/polling2.sm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 12ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 22ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/fms2.sm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 810ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 3699ul , model - > getNumberOfTransitions ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/tandem5.sm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_EQ ( 66ul , model - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 189ul , model - > getNumberOfTransitions ( ) ) ;
}
TEST ( DdPrismModelBuilderTest_Cudd , Ctmc ) {
// Set the PRISM compatibility mode temporarily. It is set to its old value once the returned object is destructed.
std : : unique_ptr < storm : : settings : : SettingMemento > enablePrismCompatibility = storm : : settings : : mutableGeneralSettings ( ) . overridePrismCompatibilityMode ( true ) ;
@ -69,7 +129,70 @@ TEST(DdPrismModelBuilderTest, Ctmc) {
EXPECT_EQ ( 189ul , model - > getNumberOfTransitions ( ) ) ;
}
TEST ( DdPrismModelBuilderTest , Mdp ) {
TEST ( DdPrismModelBuilderTest_Sylvan , Mdp ) {
storm : : prism : : Program program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/two_dice.nm " ) ;
std : : shared_ptr < storm : : models : : symbolic : : Model < storm : : dd : : DdType : : Sylvan > > model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_TRUE ( model - > getType ( ) = = storm : : models : : ModelType : : Mdp ) ;
std : : shared_ptr < storm : : models : : symbolic : : Mdp < storm : : dd : : DdType : : Sylvan > > mdp = model - > as < storm : : models : : symbolic : : Mdp < storm : : dd : : DdType : : Sylvan > > ( ) ;
EXPECT_EQ ( 169ul , mdp - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 436ul , mdp - > getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 254ul , mdp - > getNumberOfChoices ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/leader3.nm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_TRUE ( model - > getType ( ) = = storm : : models : : ModelType : : Mdp ) ;
mdp = model - > as < storm : : models : : symbolic : : Mdp < storm : : dd : : DdType : : Sylvan > > ( ) ;
EXPECT_EQ ( 364ul , mdp - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 654ul , mdp - > getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 573ul , mdp - > getNumberOfChoices ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/coin2-2.nm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_TRUE ( model - > getType ( ) = = storm : : models : : ModelType : : Mdp ) ;
mdp = model - > as < storm : : models : : symbolic : : Mdp < storm : : dd : : DdType : : Sylvan > > ( ) ;
EXPECT_EQ ( 272ul , mdp - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 492ul , mdp - > getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 400ul , mdp - > getNumberOfChoices ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/csma2-2.nm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_TRUE ( model - > getType ( ) = = storm : : models : : ModelType : : Mdp ) ;
mdp = model - > as < storm : : models : : symbolic : : Mdp < storm : : dd : : DdType : : Sylvan > > ( ) ;
EXPECT_EQ ( 1038ul , mdp - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 1282ul , mdp - > getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 1054ul , mdp - > getNumberOfChoices ( ) ) ;
program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/firewire3-0.5.nm " ) ;
model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : Sylvan > : : translateProgram ( program ) ;
EXPECT_TRUE ( model - > getType ( ) = = storm : : models : : ModelType : : Mdp ) ;
mdp = model - > as < storm : : models : : symbolic : : Mdp < storm : : dd : : DdType : : Sylvan > > ( ) ;
EXPECT_EQ ( 4093ul , mdp - > getNumberOfStates ( ) ) ;
EXPECT_EQ ( 5585ul , mdp - > getNumberOfTransitions ( ) ) ;
EXPECT_EQ ( 5519ul , mdp - > getNumberOfChoices ( ) ) ;
// FIXME: re-enable after Sylvan ADD iterator is done.
// program = storm::parser::PrismParser::parse(STORM_CPP_TESTS_BASE_PATH "/functional/builder/wlan0-2-2.nm");
// model = storm::builder::DdPrismModelBuilder<storm::dd::DdType::Sylvan>::translateProgram(program);
//
// EXPECT_TRUE(model->getType() == storm::models::ModelType::Mdp);
// mdp = model->as<storm::models::symbolic::Mdp<storm::dd::DdType::Sylvan>>();
//
// EXPECT_EQ(37ul, mdp->getNumberOfStates());
// EXPECT_EQ(59ul, mdp->getNumberOfTransitions());
// EXPECT_EQ(59ul, mdp->getNumberOfChoices());
}
TEST ( DdPrismModelBuilderTest_Cudd , Mdp ) {
storm : : prism : : Program program = storm : : parser : : PrismParser : : parse ( STORM_CPP_TESTS_BASE_PATH " /functional/builder/two_dice.nm " ) ;
std : : shared_ptr < storm : : models : : symbolic : : Model < storm : : dd : : DdType : : CUDD > > model = storm : : builder : : DdPrismModelBuilder < storm : : dd : : DdType : : CUDD > : : translateProgram ( program ) ;