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);
							 | 
						|
								    }
							 | 
						|
								}
							 |