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.
		
		
		
		
		
			
		
			
				
					
					
						
							256 lines
						
					
					
						
							17 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							256 lines
						
					
					
						
							17 KiB
						
					
					
				
								#include "gtest/gtest.h"
							 | 
						|
								#include "storm-config.h"
							 | 
						|
								
							 | 
						|
								#ifdef STORM_HAVE_CARL
							 | 
						|
								
							 | 
						|
								#include "src/adapters/CarlAdapter.h"
							 | 
						|
								#include<carl/numbers/numbers.h>
							 | 
						|
								#include<carl/core/VariablePool.h>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								#include "src/settings/SettingsManager.h"
							 | 
						|
								#include "src/settings/modules/GeneralSettings.h"
							 | 
						|
								
							 | 
						|
								#include "utility/storm.h"
							 | 
						|
								#include "utility/ModelInstantiator.h"
							 | 
						|
								#include "src/models/sparse/Model.h"
							 | 
						|
								#include "src/models/sparse/Dtmc.h"
							 | 
						|
								#include "src/models/sparse/Mdp.h"
							 | 
						|
								
							 | 
						|
								TEST(ModelInstantiatorTest, BrpProb) {
							 | 
						|
								    carl::VariablePool::getInstance().clear();
							 | 
						|
								    
							 | 
						|
								    std::string programFile = STORM_CPP_TESTS_BASE_PATH "/functional/utility/brp16_2.pm";
							 | 
						|
								    std::string formulaAsString = "P=? [F s=5 ]";
							 | 
						|
								    
							 | 
						|
								    // Program and formula
							 | 
						|
								    storm::prism::Program program = storm::parseProgram(programFile);
							 | 
						|
								    program.checkValidity();
							 | 
						|
								    std::vector<std::shared_ptr<storm::logic::Formula const>> formulas = storm::parseFormulasForPrismProgram(formulaAsString, program);
							 | 
						|
								    ASSERT_TRUE(formulas.size()==1);
							 | 
						|
								    // Parametric model
							 | 
						|
								    storm::generator::NextStateGeneratorOptions options(*formulas.front());
							 | 
						|
								    std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> dtmc = storm::builder::ExplicitModelBuilder<storm::RationalFunction>(program, options).build()->as<storm::models::sparse::Dtmc<storm::RationalFunction>>();
							 | 
						|
								    
							 | 
						|
								    storm::utility::ModelInstantiator<storm::models::sparse::Dtmc<storm::RationalFunction>, storm::models::sparse::Dtmc<double>> modelInstantiator(*dtmc);
							 | 
						|
								    EXPECT_FALSE(dtmc->hasRewardModel());
							 | 
						|
								    
							 | 
						|
								    {
							 | 
						|
								        std::map<storm::RationalFunctionVariable, storm::RationalNumber> valuation;
							 | 
						|
								        storm::RationalFunctionVariable const& pL = carl::VariablePool::getInstance().findVariableWithName("pL");
							 | 
						|
								        ASSERT_NE(pL, carl::Variable::NO_VARIABLE);
							 | 
						|
								        storm::RationalFunctionVariable const& pK = carl::VariablePool::getInstance().findVariableWithName("pK");
							 | 
						|
								        ASSERT_NE(pK, carl::Variable::NO_VARIABLE);
							 | 
						|
								        valuation.insert(std::make_pair(pL,carl::rationalize<storm::RationalNumber>(0.8)));
							 | 
						|
								        valuation.insert(std::make_pair(pK,carl::rationalize<storm::RationalNumber>(0.9)));
							 | 
						|
								
							 | 
						|
								        storm::models::sparse::Dtmc<double> const& instantiated(modelInstantiator.instantiate(valuation));
							 | 
						|
								
							 | 
						|
								        ASSERT_EQ(dtmc->getTransitionMatrix().getRowGroupIndices(), instantiated.getTransitionMatrix().getRowGroupIndices());
							 | 
						|
								        for(std::size_t rowGroup = 0; rowGroup < dtmc->getTransitionMatrix().getRowGroupCount(); ++rowGroup){
							 | 
						|
								            for(std::size_t row = dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup]; row < dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup+1]; ++row){
							 | 
						|
								                auto instantiatedEntry = instantiated.getTransitionMatrix().getRow(row).begin();
							 | 
						|
								                for(auto const& paramEntry : dtmc->getTransitionMatrix().getRow(row)){
							 | 
						|
								                    EXPECT_EQ(paramEntry.getColumn(), instantiatedEntry->getColumn());
							 | 
						|
								                    double evaluatedValue = carl::toDouble(paramEntry.getValue().evaluate(valuation));
							 | 
						|
								                    EXPECT_EQ(evaluatedValue, instantiatedEntry->getValue());
							 | 
						|
								                    ++instantiatedEntry;
							 | 
						|
								                }
							 | 
						|
								                EXPECT_EQ(instantiated.getTransitionMatrix().getRow(row).end(),instantiatedEntry);
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        EXPECT_EQ(dtmc->getStateLabeling(), instantiated.getStateLabeling());
							 | 
						|
								        EXPECT_EQ(dtmc->getOptionalChoiceLabeling(), instantiated.getOptionalChoiceLabeling());
							 | 
						|
								
							 | 
						|
								        storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<double>> modelchecker(instantiated);
							 | 
						|
								        std::unique_ptr<storm::modelchecker::CheckResult> chkResult = modelchecker.check(*formulas[0]);
							 | 
						|
								        storm::modelchecker::ExplicitQuantitativeCheckResult<double>& quantitativeChkResult = chkResult->asExplicitQuantitativeCheckResult<double>();
							 | 
						|
								        EXPECT_NEAR(0.2989278941, quantitativeChkResult[*instantiated.getInitialStates().begin()], storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    {
							 | 
						|
								        std::map<storm::RationalFunctionVariable, storm::RationalNumber> valuation;
							 | 
						|
								        storm::RationalFunctionVariable const& pL = carl::VariablePool::getInstance().findVariableWithName("pL");
							 | 
						|
								        ASSERT_NE(pL, carl::Variable::NO_VARIABLE);
							 | 
						|
								        storm::RationalFunctionVariable const& pK = carl::VariablePool::getInstance().findVariableWithName("pK");
							 | 
						|
								        ASSERT_NE(pK, carl::Variable::NO_VARIABLE);
							 | 
						|
								        valuation.insert(std::make_pair(pL,carl::rationalize<storm::RationalNumber>(1.0)));
							 | 
						|
								        valuation.insert(std::make_pair(pK,carl::rationalize<storm::RationalNumber>(1.0)));
							 | 
						|
								
							 | 
						|
								        storm::models::sparse::Dtmc<double> const& instantiated(modelInstantiator.instantiate(valuation));
							 | 
						|
								
							 | 
						|
								        ASSERT_EQ(dtmc->getTransitionMatrix().getRowGroupIndices(), instantiated.getTransitionMatrix().getRowGroupIndices());
							 | 
						|
								        for(std::size_t rowGroup = 0; rowGroup < dtmc->getTransitionMatrix().getRowGroupCount(); ++rowGroup){
							 | 
						|
								            for(std::size_t row = dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup]; row < dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup+1]; ++row){
							 | 
						|
								                auto instantiatedEntry = instantiated.getTransitionMatrix().getRow(row).begin();
							 | 
						|
								                for(auto const& paramEntry : dtmc->getTransitionMatrix().getRow(row)){
							 | 
						|
								                    EXPECT_EQ(paramEntry.getColumn(), instantiatedEntry->getColumn());
							 | 
						|
								                    double evaluatedValue = carl::toDouble(paramEntry.getValue().evaluate(valuation));
							 | 
						|
								                    EXPECT_EQ(evaluatedValue, instantiatedEntry->getValue());
							 | 
						|
								                    ++instantiatedEntry;
							 | 
						|
								                }
							 | 
						|
								                EXPECT_EQ(instantiated.getTransitionMatrix().getRow(row).end(),instantiatedEntry);
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        EXPECT_EQ(dtmc->getStateLabeling(), instantiated.getStateLabeling());
							 | 
						|
								        EXPECT_EQ(dtmc->getOptionalChoiceLabeling(), instantiated.getOptionalChoiceLabeling());
							 | 
						|
								
							 | 
						|
								        storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<double>> modelchecker(instantiated);
							 | 
						|
								        std::unique_ptr<storm::modelchecker::CheckResult> chkResult = modelchecker.check(*formulas[0]);
							 | 
						|
								        storm::modelchecker::ExplicitQuantitativeCheckResult<double>& quantitativeChkResult = chkResult->asExplicitQuantitativeCheckResult<double>();
							 | 
						|
								        EXPECT_EQ(0.0 , quantitativeChkResult[*instantiated.getInitialStates().begin()]);
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    {
							 | 
						|
								        std::map<storm::RationalFunctionVariable, storm::RationalNumber> valuation;
							 | 
						|
								        storm::RationalFunctionVariable const& pL = carl::VariablePool::getInstance().findVariableWithName("pL");
							 | 
						|
								        ASSERT_NE(pL, carl::Variable::NO_VARIABLE);
							 | 
						|
								        storm::RationalFunctionVariable const& pK = carl::VariablePool::getInstance().findVariableWithName("pK");
							 | 
						|
								        ASSERT_NE(pK, carl::Variable::NO_VARIABLE);
							 | 
						|
								        valuation.insert(std::make_pair(pL,carl::rationalize<storm::RationalNumber>(1.0)));
							 | 
						|
								        valuation.insert(std::make_pair(pK,carl::rationalize<storm::RationalNumber>(0.9)));
							 | 
						|
								
							 | 
						|
								        storm::models::sparse::Dtmc<double> const& instantiated(modelInstantiator.instantiate(valuation));
							 | 
						|
								
							 | 
						|
								        ASSERT_EQ(dtmc->getTransitionMatrix().getRowGroupIndices(), instantiated.getTransitionMatrix().getRowGroupIndices());
							 | 
						|
								        for(std::size_t rowGroup = 0; rowGroup < dtmc->getTransitionMatrix().getRowGroupCount(); ++rowGroup){
							 | 
						|
								            for(std::size_t row = dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup]; row < dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup+1]; ++row){
							 | 
						|
								                auto instantiatedEntry = instantiated.getTransitionMatrix().getRow(row).begin();
							 | 
						|
								                for(auto const& paramEntry : dtmc->getTransitionMatrix().getRow(row)){
							 | 
						|
								                    EXPECT_EQ(paramEntry.getColumn(), instantiatedEntry->getColumn());
							 | 
						|
								                    double evaluatedValue = carl::toDouble(paramEntry.getValue().evaluate(valuation));
							 | 
						|
								                    EXPECT_EQ(evaluatedValue, instantiatedEntry->getValue());
							 | 
						|
								                    ++instantiatedEntry;
							 | 
						|
								                }
							 | 
						|
								                EXPECT_EQ(instantiated.getTransitionMatrix().getRow(row).end(),instantiatedEntry);
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        EXPECT_EQ(dtmc->getStateLabeling(), instantiated.getStateLabeling());
							 | 
						|
								        EXPECT_EQ(dtmc->getOptionalChoiceLabeling(), instantiated.getOptionalChoiceLabeling());
							 | 
						|
								
							 | 
						|
								        storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<double>> modelchecker(instantiated);
							 | 
						|
								        std::unique_ptr<storm::modelchecker::CheckResult> chkResult = modelchecker.check(*formulas[0]);
							 | 
						|
								        storm::modelchecker::ExplicitQuantitativeCheckResult<double>& quantitativeChkResult = chkResult->asExplicitQuantitativeCheckResult<double>();
							 | 
						|
								        EXPECT_NEAR(0.01588055832, quantitativeChkResult[*instantiated.getInitialStates().begin()], storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								TEST(ModelInstantiatorTest, Brp_Rew) {
							 | 
						|
								    carl::VariablePool::getInstance().clear();
							 | 
						|
								    
							 | 
						|
								    std::string programFile = STORM_CPP_TESTS_BASE_PATH "/functional/utility/brp16_2.pm";
							 | 
						|
								    std::string formulaAsString = "R=? [F ((s=5) | (s=0&srep=3)) ]";
							 | 
						|
								    
							 | 
						|
								    // Program and formula
							 | 
						|
								    storm::prism::Program program = storm::parseProgram(programFile);
							 | 
						|
								    program.checkValidity();
							 | 
						|
								    std::vector<std::shared_ptr<storm::logic::Formula const>> formulas = storm::parseFormulasForPrismProgram(formulaAsString, program);
							 | 
						|
								    ASSERT_TRUE(formulas.size()==1);
							 | 
						|
								    // Parametric model
							 | 
						|
								    storm::generator::NextStateGeneratorOptions options(*formulas.front());
							 | 
						|
								    std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> dtmc = storm::builder::ExplicitModelBuilder<storm::RationalFunction>(program, options).build()->as<storm::models::sparse::Dtmc<storm::RationalFunction>>();
							 | 
						|
								
							 | 
						|
								    storm::utility::ModelInstantiator<storm::models::sparse::Dtmc<storm::RationalFunction>, storm::models::sparse::Dtmc<double>> modelInstantiator(*dtmc);
							 | 
						|
								    
							 | 
						|
								    {
							 | 
						|
								        std::map<storm::RationalFunctionVariable, storm::RationalNumber> valuation;
							 | 
						|
								        storm::RationalFunctionVariable const& pL = carl::VariablePool::getInstance().findVariableWithName("pL");
							 | 
						|
								        ASSERT_NE(pL, carl::Variable::NO_VARIABLE);
							 | 
						|
								        storm::RationalFunctionVariable const& pK = carl::VariablePool::getInstance().findVariableWithName("pK");
							 | 
						|
								        ASSERT_NE(pK, carl::Variable::NO_VARIABLE);
							 | 
						|
								        storm::RationalFunctionVariable const& TOMsg = carl::VariablePool::getInstance().findVariableWithName("TOMsg");
							 | 
						|
								        ASSERT_NE(pK, carl::Variable::NO_VARIABLE);
							 | 
						|
								        storm::RationalFunctionVariable const& TOAck = carl::VariablePool::getInstance().findVariableWithName("TOAck");
							 | 
						|
								        ASSERT_NE(pK, carl::Variable::NO_VARIABLE);
							 | 
						|
								        valuation.insert(std::make_pair(pL,carl::rationalize<storm::RationalNumber>(0.9)));
							 | 
						|
								        valuation.insert(std::make_pair(pK,carl::rationalize<storm::RationalNumber>(0.3)));
							 | 
						|
								        valuation.insert(std::make_pair(TOMsg,carl::rationalize<storm::RationalNumber>(0.3)));
							 | 
						|
								        valuation.insert(std::make_pair(TOAck,carl::rationalize<storm::RationalNumber>(0.5)));
							 | 
						|
								
							 | 
						|
								        storm::models::sparse::Dtmc<double> const& instantiated(modelInstantiator.instantiate(valuation));
							 | 
						|
								
							 | 
						|
								        ASSERT_EQ(dtmc->getTransitionMatrix().getRowGroupIndices(), instantiated.getTransitionMatrix().getRowGroupIndices());
							 | 
						|
								        for(std::size_t rowGroup = 0; rowGroup < dtmc->getTransitionMatrix().getRowGroupCount(); ++rowGroup){
							 | 
						|
								            for(std::size_t row = dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup]; row < dtmc->getTransitionMatrix().getRowGroupIndices()[rowGroup+1]; ++row){
							 | 
						|
								                auto instantiatedEntry = instantiated.getTransitionMatrix().getRow(row).begin();
							 | 
						|
								                for(auto const& paramEntry : dtmc->getTransitionMatrix().getRow(row)){
							 | 
						|
								                    EXPECT_EQ(paramEntry.getColumn(), instantiatedEntry->getColumn());
							 | 
						|
								                    double evaluatedValue = carl::toDouble(paramEntry.getValue().evaluate(valuation));
							 | 
						|
								                    EXPECT_EQ(evaluatedValue, instantiatedEntry->getValue());
							 | 
						|
								                    ++instantiatedEntry;
							 | 
						|
								                }
							 | 
						|
								                EXPECT_EQ(instantiated.getTransitionMatrix().getRow(row).end(),instantiatedEntry);
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        ASSERT_TRUE(instantiated.hasUniqueRewardModel());
							 | 
						|
								        EXPECT_FALSE(instantiated.getUniqueRewardModel().hasStateRewards());
							 | 
						|
								        EXPECT_FALSE(instantiated.getUniqueRewardModel().hasTransitionRewards());
							 | 
						|
								        EXPECT_TRUE(instantiated.getUniqueRewardModel().hasStateActionRewards());
							 | 
						|
								        ASSERT_TRUE(dtmc->getUniqueRewardModel().hasStateActionRewards());
							 | 
						|
								        std::size_t stateActionEntries = dtmc->getUniqueRewardModel().getStateActionRewardVector().size();
							 | 
						|
								        ASSERT_EQ(stateActionEntries, instantiated.getUniqueRewardModel().getStateActionRewardVector().size());
							 | 
						|
								        for(std::size_t i =0; i<stateActionEntries; ++i){
							 | 
						|
								            double evaluatedValue = carl::toDouble(dtmc->getUniqueRewardModel().getStateActionRewardVector()[i].evaluate(valuation));
							 | 
						|
								            EXPECT_EQ(evaluatedValue, instantiated.getUniqueRewardModel().getStateActionRewardVector()[i]);
							 | 
						|
								        }
							 | 
						|
								        EXPECT_EQ(dtmc->getStateLabeling(), instantiated.getStateLabeling());
							 | 
						|
								        EXPECT_EQ(dtmc->getOptionalChoiceLabeling(), instantiated.getOptionalChoiceLabeling());
							 | 
						|
								
							 | 
						|
								        storm::modelchecker::SparseDtmcPrctlModelChecker<storm::models::sparse::Dtmc<double>> modelchecker(instantiated);
							 | 
						|
								        std::unique_ptr<storm::modelchecker::CheckResult> chkResult = modelchecker.check(*formulas[0]);
							 | 
						|
								        storm::modelchecker::ExplicitQuantitativeCheckResult<double>& quantitativeChkResult = chkResult->asExplicitQuantitativeCheckResult<double>();
							 | 
						|
								        EXPECT_NEAR(1.308324495, quantitativeChkResult[*instantiated.getInitialStates().begin()], storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								}
							 | 
						|
								    
							 | 
						|
								
							 | 
						|
								TEST(ModelInstantiatorTest, Consensus) {
							 | 
						|
								    carl::VariablePool::getInstance().clear();
							 | 
						|
								    
							 | 
						|
								    std::string programFile = STORM_CPP_TESTS_BASE_PATH "/functional/utility/coin2_2.pm";
							 | 
						|
								    std::string formulaAsString = "Pmin=? [F \"finished\"&\"all_coins_equal_1\" ]";
							 | 
						|
								    
							 | 
						|
								    // Program and formula
							 | 
						|
								    storm::prism::Program program = storm::parseProgram(programFile);
							 | 
						|
								    program.checkValidity();
							 | 
						|
								    std::vector<std::shared_ptr<storm::logic::Formula const>> formulas = storm::parseFormulasForPrismProgram(formulaAsString, program);
							 | 
						|
								    ASSERT_TRUE(formulas.size()==1);
							 | 
						|
								    // Parametric model
							 | 
						|
								    storm::generator::NextStateGeneratorOptions options(*formulas.front());
							 | 
						|
								    std::shared_ptr<storm::models::sparse::Mdp<storm::RationalFunction>> mdp = storm::builder::ExplicitModelBuilder<storm::RationalFunction>(program, options).build()->as<storm::models::sparse::Mdp<storm::RationalFunction>>();
							 | 
						|
								
							 | 
						|
								    storm::utility::ModelInstantiator<storm::models::sparse::Mdp<storm::RationalFunction>, storm::models::sparse::Mdp<double>> modelInstantiator(*mdp);
							 | 
						|
								    
							 | 
						|
								    std::map<storm::RationalFunctionVariable, storm::RationalNumber> valuation;
							 | 
						|
								    storm::RationalFunctionVariable const& p1 = carl::VariablePool::getInstance().findVariableWithName("p1");
							 | 
						|
								    ASSERT_NE(p1, carl::Variable::NO_VARIABLE);
							 | 
						|
								    storm::RationalFunctionVariable const& p2 = carl::VariablePool::getInstance().findVariableWithName("p2");
							 | 
						|
								    ASSERT_NE(p2, carl::Variable::NO_VARIABLE);
							 | 
						|
								    valuation.insert(std::make_pair(p1,carl::rationalize<storm::RationalNumber>(0.51)));
							 | 
						|
								    valuation.insert(std::make_pair(p2,carl::rationalize<storm::RationalNumber>(0.49)));
							 | 
						|
								    storm::models::sparse::Mdp<double> const& instantiated(modelInstantiator.instantiate(valuation));
							 | 
						|
								
							 | 
						|
								    ASSERT_EQ(mdp->getTransitionMatrix().getRowGroupIndices(), instantiated.getTransitionMatrix().getRowGroupIndices());
							 | 
						|
								    for(std::size_t rowGroup = 0; rowGroup < mdp->getTransitionMatrix().getRowGroupCount(); ++rowGroup){
							 | 
						|
								        for(std::size_t row = mdp->getTransitionMatrix().getRowGroupIndices()[rowGroup]; row < mdp->getTransitionMatrix().getRowGroupIndices()[rowGroup+1]; ++row){
							 | 
						|
								            auto instantiatedEntry = instantiated.getTransitionMatrix().getRow(row).begin();
							 | 
						|
								            for(auto const& paramEntry : mdp->getTransitionMatrix().getRow(row)){
							 | 
						|
								                EXPECT_EQ(paramEntry.getColumn(), instantiatedEntry->getColumn());
							 | 
						|
								                double evaluatedValue = carl::toDouble(paramEntry.getValue().evaluate(valuation));
							 | 
						|
								                EXPECT_EQ(evaluatedValue, instantiatedEntry->getValue());
							 | 
						|
								                ++instantiatedEntry;
							 | 
						|
								            }
							 | 
						|
								            EXPECT_EQ(instantiated.getTransitionMatrix().getRow(row).end(),instantiatedEntry);
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								    EXPECT_EQ(mdp->getStateLabeling(), instantiated.getStateLabeling());
							 | 
						|
								    EXPECT_EQ(mdp->getOptionalChoiceLabeling(), instantiated.getOptionalChoiceLabeling());
							 | 
						|
								
							 | 
						|
								    storm::modelchecker::SparseMdpPrctlModelChecker<storm::models::sparse::Mdp<double>> modelchecker(instantiated);
							 | 
						|
								    std::unique_ptr<storm::modelchecker::CheckResult> chkResult = modelchecker.check(*formulas[0]);
							 | 
						|
								    storm::modelchecker::ExplicitQuantitativeCheckResult<double>& quantitativeChkResult = chkResult->asExplicitQuantitativeCheckResult<double>();
							 | 
						|
								    EXPECT_NEAR(0.3526577219, quantitativeChkResult[*instantiated.getInitialStates().begin()], storm::settings::getModule<storm::settings::modules::GeneralSettings>().getPrecision());
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								#endif
							 |