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