6 changed files with 101 additions and 5 deletions
			
			
		- 
					14resources/examples/testfiles/ma/zeno.ma
- 
					2src/storm-cli-utilities/model-handling.h
- 
					28src/storm/models/sparse/MarkovAutomaton.cpp
- 
					22src/storm/models/sparse/MarkovAutomaton.h
- 
					2src/test/storm/CMakeLists.txt
- 
					38src/test/storm/model/MarkovAutomatonTest.cpp
| @ -0,0 +1,14 @@ | |||
| 
 | |||
| ma | |||
| 
 | |||
| module simple | |||
| 	 | |||
| 	s : [0..4]; | |||
| 
 | |||
| 	[alpha] (s=0) -> 1 : (s' = 1); | |||
| 	[beta]  (s=0) -> 0.8 : (s'=0) + 0.2 : (s'=2); | |||
| 	<> (s=1) -> 9 : (s'=0) + 1 : (s'=3); | |||
| 	<> (s=2) -> 12 : (s'=4); | |||
| 	[gamma] (s>2) -> 1 : true; | |||
| 	 | |||
| endmodule | |||
| @ -0,0 +1,38 @@ | |||
| #include "test/storm_gtest.h"
 | |||
| #include "storm-config.h"
 | |||
| #include "storm/models/sparse/StandardRewardModel.h"
 | |||
| #include "storm/models/sparse/MarkovAutomaton.h"
 | |||
| #include "storm-parsers/parser/PrismParser.h"
 | |||
| #include "storm/builder/ExplicitModelBuilder.h"
 | |||
| 
 | |||
| 
 | |||
| TEST(MarkovAutomatonTest, ZenoCycleCheck) { | |||
|     storm::prism::Program program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ma/simple.ma"); | |||
|      | |||
|     std::shared_ptr<storm::models::sparse::Model<double>> model = storm::builder::ExplicitModelBuilder<double>(program).build(); | |||
|     EXPECT_EQ(5ul, model->getNumberOfStates()); | |||
|     EXPECT_EQ(8ul, model->getNumberOfTransitions()); | |||
|     ASSERT_TRUE(model->isOfType(storm::models::ModelType::MarkovAutomaton)); | |||
|     EXPECT_FALSE(model->as<storm::models::sparse::MarkovAutomaton<double>>()->containsZenoCycle()); | |||
| 
 | |||
|     program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ma/hybrid_states.ma"); | |||
|     model = storm::builder::ExplicitModelBuilder<double>(program).build(); | |||
|     EXPECT_EQ(5ul, model->getNumberOfStates()); | |||
|     EXPECT_EQ(13ul, model->getNumberOfTransitions()); | |||
|     ASSERT_TRUE(model->isOfType(storm::models::ModelType::MarkovAutomaton)); | |||
|     EXPECT_FALSE(model->as<storm::models::sparse::MarkovAutomaton<double>>()->containsZenoCycle()); | |||
| 
 | |||
|     program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ma/stream2.ma"); | |||
|     model = storm::builder::ExplicitModelBuilder<double>(program).build(); | |||
|     EXPECT_EQ(12ul, model->getNumberOfStates()); | |||
|     EXPECT_EQ(14ul, model->getNumberOfTransitions()); | |||
|     ASSERT_TRUE(model->isOfType(storm::models::ModelType::MarkovAutomaton)); | |||
|     EXPECT_FALSE(model->as<storm::models::sparse::MarkovAutomaton<double>>()->containsZenoCycle()); | |||
| 
 | |||
|     program = storm::parser::PrismParser::parse(STORM_TEST_RESOURCES_DIR "/ma/zeno.ma"); | |||
|     model = storm::builder::ExplicitModelBuilder<double>(program).build(); | |||
|     EXPECT_EQ(5ul, model->getNumberOfStates()); | |||
|     EXPECT_EQ(8ul, model->getNumberOfTransitions()); | |||
|     ASSERT_TRUE(model->isOfType(storm::models::ModelType::MarkovAutomaton)); | |||
|     EXPECT_TRUE(model->as<storm::models::sparse::MarkovAutomaton<double>>()->containsZenoCycle()); | |||
| } | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue