#include "gtest/gtest.h" #include "RimSummaryCalculation.h" #include "expressionparser/ExpressionParser.h" #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RicExpressionParserTest, BasicUsage) { std::vector a(10); std::iota(a.begin(), a.end(), 10); std::vector b(10); std::iota(b.begin(), b.end(), 100); std::vector c(10); ExpressionParser parser; parser.assignVector("a", a); parser.assignVector("b", b); parser.assignVector("c", c); QString expr = "c := a + b"; EXPECT_TRUE(parser.evaluate(expr)); EXPECT_DOUBLE_EQ(c[0], 110.0); EXPECT_DOUBLE_EQ(c[9], 128.0); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RicExpressionParserTest, DetectVariables) { QString expr = "c := a + (x / y)"; std::vector variables = ExpressionParser::detectReferencedVariables(expr); EXPECT_STREQ(variables[0].toStdString().data(), "c"); EXPECT_STREQ(variables[1].toStdString().data(), "a"); EXPECT_STREQ(variables[2].toStdString().data(), "x"); EXPECT_STREQ(variables[3].toStdString().data(), "y"); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RicExpressionParserTest, FindLeftHandSide) { { QString expr = "c := a"; QString s = RimSummaryCalculation::findLeftHandSide(expr); EXPECT_STREQ(s.toStdString().data(), "c"); } { QString expr = "c:=a"; QString s = RimSummaryCalculation::findLeftHandSide(expr); EXPECT_STREQ(s.toStdString().data(), "c"); } { QString expr = "\na:=b\n\nc:=a"; QString s = RimSummaryCalculation::findLeftHandSide(expr); EXPECT_STREQ(s.toStdString().data(), "c"); } }