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