From ece481dd159f2c44d55367918eaa5189d2336d8f Mon Sep 17 00:00:00 2001 From: tempiaa <tempiaa@eurecom.fr> Date: Fri, 12 Jun 2020 16:33:10 +0200 Subject: [PATCH] Added getResult() of expression from array of int attribute values --- .../AvatarExpressionAttribute.java | 15 ++++++++++++++ .../AvatarExpressionSolver.java | 20 +++++++++++++++++++ .../AvatarExpressionTest.java | 10 ++++++++++ 3 files changed, 45 insertions(+) diff --git a/src/main/java/avatartranslator/AvatarExpressionAttribute.java b/src/main/java/avatartranslator/AvatarExpressionAttribute.java index 290b018dd3..d455908517 100644 --- a/src/main/java/avatartranslator/AvatarExpressionAttribute.java +++ b/src/main/java/avatartranslator/AvatarExpressionAttribute.java @@ -38,6 +38,8 @@ package avatartranslator; +import java.util.List; + import avatartranslator.modelchecker.SpecificationBlock; import avatartranslator.modelchecker.SpecificationState; @@ -204,6 +206,19 @@ public class AvatarExpressionAttribute { return value; } + public int getValue(int[] attributesValues) { + int value; + + if (isState) { + return 0; + } + + //Cancel offset based on Specification Blocks + value = attributesValues[accessIndex - SpecificationBlock.ATTR_INDEX]; + + return value; + } + public void setValue(SpecificationState ss, int value) { int v; diff --git a/src/main/java/avatartranslator/AvatarExpressionSolver.java b/src/main/java/avatartranslator/AvatarExpressionSolver.java index d9e9bec944..bacb6d4639 100644 --- a/src/main/java/avatartranslator/AvatarExpressionSolver.java +++ b/src/main/java/avatartranslator/AvatarExpressionSolver.java @@ -557,6 +557,26 @@ public class AvatarExpressionSolver { return res; } + public int getResult(int[] attributesValues) { + int res; + if (isLeaf) { + if (isImmediateValue != IMMEDIATE_NO) { + res = intValue; + } else { + res = leaf.getValue(attributesValues); + } + } else { + res = getChildrenResult(left.getResult(attributesValues), right.getResult(attributesValues)); + } + + if (isNot) { + res = (res == 0) ? 1 : 0; + } else if (isNegated) { + res = -res; + } + return res; + } + private int getChildrenResult(int leftV, int rightV) { int result; diff --git a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java index 5fd6e9f492..96318fb4bc 100644 --- a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java +++ b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java @@ -135,6 +135,7 @@ public class AvatarExpressionTest { public void testBlock() { SpecificationBlock specBlock = new SpecificationBlock(); specBlock.init(block1, false); + int[] attributes = {2, 3, 7, 0, 1}; AvatarExpressionSolver e1 = new AvatarExpressionSolver("x + y"); assertTrue(e1.buildExpression(block1)); @@ -156,6 +157,12 @@ public class AvatarExpressionTest { assertTrue(e9.buildExpression(block1)); AvatarExpressionSolver e10 = new AvatarExpressionSolver("x*((x + y)*z + (x+z)/z)/x"); assertTrue(e10.buildExpression(block1)); + AvatarExpressionSolver e11 = new AvatarExpressionSolver("x + y"); + assertTrue(e11.buildExpression(block1)); + AvatarExpressionSolver e12 = new AvatarExpressionSolver("x*((x + y)*z + (x+z)/z)/x"); + assertTrue(e12.buildExpression(block1)); + AvatarExpressionSolver e13 = new AvatarExpressionSolver("(key1==false) and (key2==true)"); + assertTrue(e13.buildExpression(block1)); assertTrue(e1.getResult(specBlock) == 15); assertTrue(e2.getResult(specBlock) == 1); assertTrue(e3.getResult(specBlock) == 0); @@ -166,6 +173,9 @@ public class AvatarExpressionTest { assertTrue(e8.getResult(specBlock) == 45); assertTrue(e9.getResult(specBlock) == 570); assertTrue(e10.getResult(specBlock) == 36); + assertTrue(e11.getResult(attributes) == 5); + assertTrue(e12.getResult(attributes) == 36); + assertTrue(e13.getResult(attributes) == 1); } @Test -- GitLab