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.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							2.5 KiB
						
					
					
				| #include "gtest/gtest.h" | |
| #include "src/storage/expressions/Expression.h" | |
| #include "src/storage/expressions/ExpressionManager.h" | |
| #include "src/storage/expressions/SimpleValuation.h" | |
| #include "src/storage/expressions/ExprtkExpressionEvaluator.h" | |
|  | |
| TEST(ExpressionEvaluation, NaiveEvaluation) { | |
|     std::shared_ptr<storm::expressions::ExpressionManager> manager(new storm::expressions::ExpressionManager()); | |
|      | |
|     storm::expressions::Variable x; | |
|     storm::expressions::Variable y; | |
|     storm::expressions::Variable z; | |
|     ASSERT_NO_THROW(x = manager->declareBooleanVariable("x")); | |
|     ASSERT_NO_THROW(y = manager->declareIntegerVariable("y")); | |
|     ASSERT_NO_THROW(z = manager->declareRationalVariable("z")); | |
|      | |
|     storm::expressions::SimpleValuation eval(manager); | |
|      | |
|     storm::expressions::Expression iteExpression = storm::expressions::ite(x, y + z, manager->integer(3) * z); | |
|      | |
|     eval.setRationalValue(z, 5.5); | |
|     eval.setBooleanValue(x, true); | |
|     for (int_fast64_t i = 0; i < 1000; ++i) { | |
|         eval.setIntegerValue(y, 3 + i); | |
|         EXPECT_NEAR(8.5 + i, iteExpression.evaluateAsDouble(&eval), 1e-6); | |
|     } | |
|      | |
|     eval.setBooleanValue(x, false); | |
|     for (int_fast64_t i = 0; i < 1000; ++i) { | |
|         double zValue = i / static_cast<double>(10); | |
|         eval.setRationalValue(z, zValue); | |
|         EXPECT_NEAR(3 * zValue, iteExpression.evaluateAsDouble(&eval), 1e-6); | |
|     } | |
| } | |
| 
 | |
| TEST(ExpressionEvaluation, ExprTkEvaluation) { | |
|     std::shared_ptr<storm::expressions::ExpressionManager> manager(new storm::expressions::ExpressionManager()); | |
| 
 | |
|     storm::expressions::Variable x; | |
|     storm::expressions::Variable y; | |
|     storm::expressions::Variable z; | |
|     ASSERT_NO_THROW(x = manager->declareBooleanVariable("x")); | |
|     ASSERT_NO_THROW(y = manager->declareIntegerVariable("y")); | |
|     ASSERT_NO_THROW(z = manager->declareRationalVariable("z")); | |
| 
 | |
|     storm::expressions::Expression iteExpression = storm::expressions::ite(x, y + z, manager->integer(3) * z); | |
|     storm::expressions::ExprtkExpressionEvaluator eval(*manager); | |
| 
 | |
|     eval.setRationalValue(z, 5.5); | |
|     eval.setBooleanValue(x, true); | |
|     for (int_fast64_t i = 0; i < 1000; ++i) { | |
|         eval.setIntegerValue(y, 3 + i); | |
|         EXPECT_NEAR(8.5 + i, eval.asRational(iteExpression), 1e-6); | |
|     } | |
|      | |
|     eval.setBooleanValue(x, false); | |
|     for (int_fast64_t i = 0; i < 1000; ++i) { | |
|         double zValue = i / static_cast<double>(10); | |
|         eval.setRationalValue(z, zValue); | |
|         EXPECT_NEAR(3 * zValue, eval.asRational(iteExpression), 1e-6); | |
|     } | |
| }
 |