diff --git a/src/main/java/avatartranslator/AvatarExpressionAttribute.java b/src/main/java/avatartranslator/AvatarExpressionAttribute.java index 290b018dd3c937927e6191aadbf614f690a70678..d4559085174036dbddb44876cd5294f481c1fc66 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 d9e9bec9440de6250bfb0c801c16c9ae10277d27..bacb6d4639fefafb34f660936046a6548c70d10b 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 5fd6e9f492dd72e7057f322fe5f61cca24bc6708..96318fb4bcb1b693fc76f949b32f1e07511d709b 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