@ -1,16 +1,20 @@ 
			
		 
		
	
		
			
				 
				 
				# include  "gtest/gtest.h" 
  
				 
				 
				# include  "gtest/gtest.h" 
  
			
		 
		
	
		
			
				 
				 
				# include  "storm-config.h" 
  
				 
				 
				# include  "storm-config.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "src/logic/Formulas.h" 
  
			
		 
		
	
		
			
				 
				 
				# include  "src/solver/NativeNondeterministicLinearEquationSolver.h" 
  
				 
				 
				# include  "src/solver/NativeNondeterministicLinearEquationSolver.h" 
  
			
		 
		
	
		
			
				 
				 
				# include  "src/settings/Settings.h" 
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				# include  "src/modelchecker/prctl/SparseMdpPrctlModelChecker.h" 
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				# include  "src/modelchecker/prctl/TopologicalValueIterationMdpPrctlModelChecker.h" 
  
				 
				 
				# include  "src/modelchecker/prctl/TopologicalValueIterationMdpPrctlModelChecker.h" 
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "src/modelchecker/prctl/SparseMdpPrctlModelChecker.h" 
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "src/modelchecker/ExplicitQuantitativeCheckResult.h" 
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "src/settings/SettingsManager.h" 
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				# include  "src/settings/SettingMemento.h" 
  
			
		 
		
	
		
			
				 
				 
				# include  "src/parser/AutoParser.h" 
  
				 
				 
				# include  "src/parser/AutoParser.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# include  "storm-config.h" 
  
				 
				 
				# include  "storm-config.h" 
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				TEST ( TopologicalValueIterationMdpPrctlModelCheckerTest ,  Dice )  {  
				 
				 
				TEST ( TopologicalValueIterationMdpPrctlModelCheckerTest ,  Dice )  {  
			
		 
		
	
		
			
				 
				 
					storm : : settings : : Settings *  s  =  storm : : settings : : Settings : : getInstance ( ) ;      
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::settings::Settings* s = storm::settings::Settings::getInstance();    
  
			
		 
		
	
		
			
				 
				 
					std : : shared_ptr < storm : : models : : Mdp < double > >  mdp  =  storm : : parser : : AutoParser : : parseModel ( STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.tra " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.lab " ,  " " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.flip.trans.rew " ) - > as < storm : : models : : Mdp < double > > ( ) ;  
				 
				 
					std : : shared_ptr < storm : : models : : Mdp < double > >  mdp  =  storm : : parser : : AutoParser : : parseModel ( STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.tra " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.lab " ,  " " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.flip.trans.rew " ) - > as < storm : : models : : Mdp < double > > ( ) ;  
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				     
			
		 
		
	
		
			
				 
				 
					ASSERT_EQ ( mdp - > getNumberOfStates ( ) ,  169ull ) ;  
				 
				 
					ASSERT_EQ ( mdp - > getNumberOfStates ( ) ,  169ull ) ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -18,223 +22,226 @@ TEST(TopologicalValueIterationMdpPrctlModelCheckerTest, Dice) { 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				     
			
		 
		
	
		
			
				 
				 
					storm : : modelchecker : : prctl : : TopologicalValueIterationMdpPrctlModelChecker < double >  mc ( * mdp ) ;  
				 
				 
					storm : : modelchecker : : prctl : : TopologicalValueIterationMdpPrctlModelChecker < double >  mc ( * mdp ) ;  
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				     
			
		 
		
	
		
			
				 
				 
				    storm : : property : : prctl : : Ap < double > *  apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " two " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : Eventually < double > *  eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > *  probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					std : : vector < double >  result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.0277777612209320068 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " two " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.0277777612209320068 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " three " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.0555555224418640136 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " three " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.0555555224418640136 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " four " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.083333283662796020508 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " four " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.083333283662796020508 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " done " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : ReachabilityReward < double > *  reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : RewardNoBoundOperator < double > *  rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					auto  apFormula  =  std : : make_shared < storm : : logic : : AtomicLabelFormula > ( " two " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				    //storm::property::prctl::Ap<double>* apFormula = new storm::property::prctl::Ap<double>("two");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					auto  eventuallyFormula  =  std : : make_shared < storm : : logic : : EventuallyFormula > ( apFormula ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::Eventually<double>* eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::ProbabilisticNoBoundOperator<double>* probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, true);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				     
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					std : : unique_ptr < storm : : modelchecker : : CheckResult >  result  =  mc . check ( * eventuallyFormula ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//std::vector<double> result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					ASSERT_LT ( std : : abs ( result - > asExplicitQuantitativeCheckResult < double > ( ) [ 0 ]  -  0.0277777612209320068 ) ,  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
						storm : : settings : : topologicalValueIterationEquationSolverSettings ( ) . getPrecision ( ) ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.0277777612209320068), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("two");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, false);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.0277777612209320068), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("three");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, true);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.0555555224418640136), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("three");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, false);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.0555555224418640136), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("four");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, true);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.083333283662796020508), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("four");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, false);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.083333283662796020508), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("done");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::ReachabilityReward<double>* reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::RewardNoBoundOperator<double>* rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, true);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //   
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.333329499 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.333329499), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.33332904 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.33332904), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " done " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * rewardFormula ) ; ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("done");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, false);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*rewardFormula);;
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.333329499 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.333329499), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.33333151 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.33333151), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					std : : shared_ptr < storm : : models : : Mdp < double > >  stateRewardMdp  =  storm : : parser : : AutoParser : : parseModel ( STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.tra " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.lab " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.flip.state.rew " ,  " " ) - > as < storm : : models : : Mdp < double > > ( ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : modelchecker : : prctl : : TopologicalValueIterationMdpPrctlModelChecker < double >  stateRewardModelChecker ( * stateRewardMdp ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " done " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  stateRewardModelChecker . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//std::shared_ptr<storm::models::Mdp<double>> stateRewardMdp = storm::parser::AutoParser::parseModel(STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.tra", STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.lab", STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.flip.state.rew", "")->as<storm::models::Mdp<double>>();
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::modelchecker::prctl::TopologicalValueIterationMdpPrctlModelChecker<double> stateRewardModelChecker(*stateRewardMdp);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("done");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, true);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = stateRewardModelChecker.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				    
				 
				 
				    
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.333329499 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.333329499), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.33332904 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.33332904), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " done " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  stateRewardModelChecker . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("done");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, false);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = stateRewardModelChecker.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				     
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.333329499 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.333329499), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  7.33333151 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 7.33333151), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					std : : shared_ptr < storm : : models : : Mdp < double > >  stateAndTransitionRewardMdp  =  storm : : parser : : AutoParser : : parseModel ( STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.tra " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.lab " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.flip.state.rew " ,  STORM_CPP_BASE_PATH  " /examples/mdp/two_dice/two_dice.flip.trans.rew " ) - > as < storm : : models : : Mdp < double > > ( ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : modelchecker : : prctl : : TopologicalValueIterationMdpPrctlModelChecker < double >  stateAndTransitionRewardModelChecker ( * stateAndTransitionRewardMdp ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " done " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  stateAndTransitionRewardModelChecker . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//std::shared_ptr<storm::models::Mdp<double>> stateAndTransitionRewardMdp = storm::parser::AutoParser::parseModel(STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.tra", STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.lab", STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.flip.state.rew", STORM_CPP_BASE_PATH "/examples/mdp/two_dice/two_dice.flip.trans.rew")->as<storm::models::Mdp<double>>();
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::modelchecker::prctl::TopologicalValueIterationMdpPrctlModelChecker<double> stateAndTransitionRewardModelChecker(*stateAndTransitionRewardMdp);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("done");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, true);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = stateAndTransitionRewardModelChecker.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				     
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  14.666658998 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 14.666658998), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  14.6666581 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 14.6666581), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " done " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					result  =  stateAndTransitionRewardModelChecker . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("done");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, false);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				 //    
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = stateAndTransitionRewardModelChecker.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				     
				 
				 
				     
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  14.666658998 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 14.666658998), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  14.666663 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 14.666663), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				}  
				 
				 
				}  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				TEST ( TopologicalValueIterationMdpPrctlModelCheckerTest ,  AsynchronousLeader )  {  
				 
				 
				TEST ( TopologicalValueIterationMdpPrctlModelCheckerTest ,  AsynchronousLeader )  {  
			
		 
		
	
		
			
				 
				 
					storm : : settings : : Settings *  s  =  storm : : settings : : Settings : : getInstance ( ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::settings::Settings* s = storm::settings::Settings::getInstance();
  
			
		 
		
	
		
			
				 
				 
					std : : shared_ptr < storm : : models : : Mdp < double > >  mdp  =  storm : : parser : : AutoParser : : parseModel ( STORM_CPP_BASE_PATH  " /examples/mdp/asynchronous_leader/leader4.tra " ,  STORM_CPP_BASE_PATH  " /examples/mdp/asynchronous_leader/leader4.lab " ,  " " ,  STORM_CPP_BASE_PATH  " /examples/mdp/asynchronous_leader/leader4.trans.rew " ) - > as < storm : : models : : Mdp < double > > ( ) ;  
				 
				 
					std : : shared_ptr < storm : : models : : Mdp < double > >  mdp  =  storm : : parser : : AutoParser : : parseModel ( STORM_CPP_BASE_PATH  " /examples/mdp/asynchronous_leader/leader4.tra " ,  STORM_CPP_BASE_PATH  " /examples/mdp/asynchronous_leader/leader4.lab " ,  " " ,  STORM_CPP_BASE_PATH  " /examples/mdp/asynchronous_leader/leader4.trans.rew " ) - > as < storm : : models : : Mdp < double > > ( ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					ASSERT_EQ ( mdp - > getNumberOfStates ( ) ,  3172ull ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					ASSERT_EQ ( mdp - > getNumberOfTransitions ( ) ,  7144ull ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_EQ(mdp->getNumberOfStates(), 3172ull);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_EQ(mdp->getNumberOfTransitions(), 7144ull);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					storm : : modelchecker : : prctl : : TopologicalValueIterationMdpPrctlModelChecker < double >  mc ( * mdp ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::modelchecker::prctl::TopologicalValueIterationMdpPrctlModelChecker<double> mc(*mdp);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : Ap < double > *  apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " elected " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : Eventually < double > *  eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > *  probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::Ap<double>* apFormula = new storm::property::prctl::Ap<double>("elected");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::Eventually<double>* eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::ProbabilisticNoBoundOperator<double>* probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, true);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					std : : vector < double >  result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//std::vector<double> result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  1 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 1), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " elected " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					eventuallyFormula  =  new  storm : : property : : prctl : : Eventually < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( eventuallyFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("elected");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//eventuallyFormula = new storm::property::prctl::Eventually<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(eventuallyFormula, false);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  1 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 1), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " elected " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : BoundedEventually < double > *  boundedEventuallyFormula  =  new  storm : : property : : prctl : : BoundedEventually < double > ( apFormula ,  25 ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( boundedEventuallyFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("elected");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::BoundedEventually<double>* boundedEventuallyFormula = new storm::property::prctl::BoundedEventually<double>(apFormula, 25);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(boundedEventuallyFormula, false);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.0625 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.0625), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " elected " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					boundedEventuallyFormula  =  new  storm : : property : : prctl : : BoundedEventually < double > ( apFormula ,  25 ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					probFormula  =  new  storm : : property : : prctl : : ProbabilisticNoBoundOperator < double > ( boundedEventuallyFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("elected");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//boundedEventuallyFormula = new storm::property::prctl::BoundedEventually<double>(apFormula, 25);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//probFormula = new storm::property::prctl::ProbabilisticNoBoundOperator<double>(boundedEventuallyFormula, true);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * probFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*probFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  0.0625 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 0.0625), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					delete  probFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete probFormula;
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " elected " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : ReachabilityReward < double > *  reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					storm : : property : : prctl : : RewardNoBoundOperator < double > *  rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  true ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("elected");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::ReachabilityReward<double>* reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//storm::property::prctl::RewardNoBoundOperator<double>* rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, true);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  4.285689611 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 4.285689611), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  4.285701547 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 4.285701547), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					apFormula  =  new  storm : : property : : prctl : : Ap < double > ( " elected " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					reachabilityRewardFormula  =  new  storm : : property : : prctl : : ReachabilityReward < double > ( apFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
					rewardFormula  =  new  storm : : property : : prctl : : RewardNoBoundOperator < double > ( reachabilityRewardFormula ,  false ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//apFormula = new storm::property::prctl::Ap<double>("elected");
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//reachabilityRewardFormula = new storm::property::prctl::ReachabilityReward<double>(apFormula);
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//rewardFormula = new storm::property::prctl::RewardNoBoundOperator<double>(reachabilityRewardFormula, false);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
					result  =  mc . checkNoBoundOperator ( * rewardFormula ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//result = mc.checkNoBoundOperator(*rewardFormula);
  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
				 
				 
				# ifdef STORM_HAVE_CUDAFORSTORM 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  4.285689611 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 4.285689611), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# else 
  
				 
				 
				# else 
  
			
		 
		
	
		
			
				 
				 
					ASSERT_LT ( std : : abs ( result [ 0 ]  -  4.285703591 ) ,  s - > getOptionByLongName ( " precision " ) . getArgument ( 0 ) . getValueAsDouble ( ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//ASSERT_LT(std::abs(result[0] - 4.285703591), s->getOptionByLongName("precision").getArgument(0).getValueAsDouble());
  
			
		 
		
	
		
			
				 
				 
				# endif 
  
				 
				 
				# endif 
  
			
		 
		
	
		
			
				 
				 
					delete  rewardFormula ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
					//delete rewardFormula;
  
			
		 
		
	
		
			
				 
				 
				}  
				 
				 
				}