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.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							5.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							5.3 KiB
						
					
					
				| /* | |
|  * AutoParserTest.cpp | |
|  * | |
|  *  Created on: Feb 10, 2014 | |
|  *      Author: Manuel Sascha Weiand | |
|  */ | |
| 
 | |
| #include "gtest/gtest.h" | |
| #include "storm-config.h" | |
|  | |
| #include "src/parser/AutoParser.h" | |
| #include "src/exceptions/FileIoException.h" | |
| #include "src/exceptions/WrongFormatException.h" | |
|  | |
| TEST(AutoParserTest, NonExistingFile) { | |
| 	// No matter what happens, please do NOT create a file with the name "nonExistingFile.not"! | |
| 	ASSERT_THROW(storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/nonExistingFile.not", STORM_CPP_TESTS_BASE_PATH "/nonExistingFile.not"), storm::exceptions::FileIoException); | |
| } | |
| 
 | |
| TEST(AutoParserTest, BasicParsing) { | |
| 	// Parse model, which is a Dtmc. | |
| 	std::shared_ptr<storm::models::AbstractModel<double>> modelPtr = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/dtmc.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"); | |
| 
 | |
| 	// Test if parsed correctly. | |
| 	ASSERT_EQ(storm::models::DTMC, modelPtr->getType()); | |
| 	ASSERT_EQ(12, modelPtr->getNumberOfStates()); | |
| 	ASSERT_EQ(26, modelPtr->getNumberOfTransitions()); | |
| 	ASSERT_EQ(1, modelPtr->getInitialStates().getNumberOfSetBits()); | |
| 	ASSERT_TRUE(modelPtr->hasAtomicProposition("three")); | |
| 	ASSERT_FALSE(modelPtr->hasStateRewards()); | |
| 	ASSERT_FALSE(modelPtr->hasTransitionRewards()); | |
| } | |
| 
 | |
| TEST(AutoParserTest, Whitespaces) { | |
| 	// Test different whitespace combinations by comparing the hash of the model parsed from files without whitespaces with the hash of the models parsed from files with whitespaces. | |
| 	uint_fast64_t correctHash = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/dtmc.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab")->getHash(); | |
| 
 | |
| 	ASSERT_EQ(correctHash, storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/dtmcWhitespaces1.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab")->getHash()); | |
| 	ASSERT_EQ(correctHash, storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/dtmcWhitespaces2.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab")->getHash()); | |
| } | |
| 
 | |
| TEST(AutoParserTest, WrongHint) { | |
| 	// The hint given describes the content but does not conform to the format. | |
| 	ASSERT_THROW(storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/wrongHint.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"), storm::exceptions::WrongFormatException); | |
| } | |
| 
 | |
| TEST(AutoParserTest, NoHint) { | |
| 	// There is no hint contained in the given file, so the parser cannot decide which kind of model it is. | |
| 	ASSERT_THROW(storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/noHint.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"), storm::exceptions::WrongFormatException); | |
| } | |
| 
 | |
| TEST(AutoParserTest, Decision) { | |
| 	// Test if the AutoParser recognizes each model kind and correctly parses it. | |
|  | |
| 	// Dtmc | |
| 	std::shared_ptr<storm::models::AbstractModel<double>> modelPtr = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/dtmc.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"); | |
| 	ASSERT_EQ(storm::models::DTMC, modelPtr->getType()); | |
| 	ASSERT_EQ(12, modelPtr->getNumberOfStates()); | |
| 	ASSERT_EQ(26, modelPtr->getNumberOfTransitions()); | |
| 
 | |
| 	// Ctmc | |
| 	modelPtr.reset(); | |
| 	modelPtr = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/ctmc.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"); | |
| 	ASSERT_EQ(storm::models::CTMC, modelPtr->getType()); | |
| 	ASSERT_EQ(12, modelPtr->getNumberOfStates()); | |
| 	ASSERT_EQ(26, modelPtr->getNumberOfTransitions()); | |
| 
 | |
| 	// Mdp | |
| 	modelPtr.reset(); | |
| 	modelPtr = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/mdp.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"); | |
| 	ASSERT_EQ(storm::models::MDP, modelPtr->getType()); | |
| 	ASSERT_EQ(12, modelPtr->getNumberOfStates()); | |
| 	ASSERT_EQ(28, modelPtr->getNumberOfTransitions()); | |
| 
 | |
| 	// Ctmdp | |
| 	// Note: For now we use the Mdp from above just given the ctmdp hint, since the implementation of the Ctmdp model seems not Quite right yet. | |
| 	//       We still do this test so that the code responsible for Ctmdps is executed at least once during testing. | |
| 	// TODO: Fix the Ctmdp implementation and use an actual Ctmdp for testing. | |
| 	modelPtr.reset(); | |
| 	modelPtr = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/ctmdp.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"); | |
| 	ASSERT_EQ(storm::models::CTMDP, modelPtr->getType()); | |
| 	ASSERT_EQ(12, modelPtr->getNumberOfStates()); | |
| 	ASSERT_EQ(28, modelPtr->getNumberOfTransitions()); | |
| 
 | |
| 	// MA | |
| 	modelPtr.reset(); | |
| 	modelPtr = storm::parser::AutoParser::parseModel(STORM_CPP_TESTS_BASE_PATH "/functional/parser/tra_files/autoParser/ma.tra", STORM_CPP_TESTS_BASE_PATH "/functional/parser/lab_files/autoParser.lab"); | |
| 	ASSERT_EQ(storm::models::MA, modelPtr->getType()); | |
| 	ASSERT_EQ(12, modelPtr->getNumberOfStates()); | |
| 	ASSERT_EQ(27, modelPtr->getNumberOfTransitions()); | |
| }
 |