From d56eec4d15dae71787f8ba73ad44419a18477dbf Mon Sep 17 00:00:00 2001
From: Sophie Coudert <sophie.coudert@telecom-paris.fr>
Date: Wed, 29 Mar 2023 16:57:10 +0200
Subject: [PATCH] integrating IBS in AvatarSyntaxChecker

---
 .../avatartranslator/AvatarSyntaxChecker.java | 44 +++++--------------
 .../avatartranslator/AvatarIBSParserTest.java | 21 ++++-----
 .../java/cli/CLIAvatarModelCheckerTest.java   |  4 +-
 3 files changed, 24 insertions(+), 45 deletions(-)

diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
index 46219fb6bd..ed5800c4fb 100644
--- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java
+++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
@@ -38,6 +38,8 @@
 
 package avatartranslator;
 
+import avatartranslator.intboolsolver.AvatarIBSExpressionClass;
+import avatartranslator.intboolsolver.AvatarIBSolver;
 import compiler.tmlparser.ParseException;
 import compiler.tmlparser.SimpleNode;
 import compiler.tmlparser.TMLExprParser;
@@ -45,6 +47,7 @@ import compiler.tmlparser.TokenMgrError;
 import myutil.Conversion;
 import myutil.NameChecker;
 import myutil.TraceManager;
+import avatartranslator.intboolsolver.AvatarIBSParser;
 
 import java.io.StringReader;
 import java.util.ArrayList;
@@ -376,21 +379,8 @@ public class AvatarSyntaxChecker {
 
         //TraceManager.addDev("Testing guard expr=" + act);
 
-        AvatarExpressionSolver e1 = new AvatarExpressionSolver(act);
-
-        if (e1.buildExpression()) {
-            //TraceManager.addDev("Build ok. guard expr=" + act);
-
-            //TraceManager.addDev("Testing evaluation. guard expr=" + act);
-
-            if (e1.getReturnType() != AvatarExpressionSolver.IMMEDIATE_BOOL) {
-                return -1;
-            }
-
-            return 0;
-        }
-
-        return -1;
+        AvatarIBSExpressionClass.BExpr e1 = (AvatarIBSExpressionClass.BExpr) AvatarIBSolver.parser.parseBool(act);
+        return (e1!=null?0:-1);
 
 
         /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
@@ -428,17 +418,8 @@ public class AvatarSyntaxChecker {
             act = Conversion.putVariableValueInString(AvatarSpecification.ops, act, aa.getName(), aa.getDefaultInitialValue());
         }
 
-        AvatarExpressionSolver e1 = new AvatarExpressionSolver(act);
-        boolean ret = e1.buildExpression();
-        if (!ret) {
-            return -1;
-        }
-
-        if (e1.getReturnType() == AvatarExpressionSolver.IMMEDIATE_INT) {
-            return 0;
-        }
-
-        return -1;
+        AvatarIBSExpressionClass.IExpr e1 = (AvatarIBSExpressionClass.IExpr) AvatarIBSolver.parser.parseInt(act);
+        return (e1!=null?0:-1);
 
         /*IntExpressionEvaluator iee = new IntExpressionEvaluator();
 
@@ -488,12 +469,9 @@ public class AvatarSyntaxChecker {
             act = Conversion.putVariableValueInString(AvatarSpecification.ops, act, aa.getName(), aa.getDefaultInitialValueTF());
         }
 
-        AvatarExpressionSolver e1 = new AvatarExpressionSolver(act);
+        AvatarIBSExpressionClass.BExpr e1 = (AvatarIBSExpressionClass.BExpr) AvatarIBSolver.parser.parseBool(act);
 
-        if (e1.buildExpression()) {
-            return 1;
-        }
-        return 0;
+        return (e1==null?0:1);
     }
 
 
@@ -530,8 +508,8 @@ public class AvatarSyntaxChecker {
 
         //TraceManager.addDev("3. Now with avatar expression solver:" + _expr);
 
-        AvatarExpressionSolver aee = new AvatarExpressionSolver(act);
-        if (!(aee.buildExpression())) {
+        AvatarIBSExpressionClass.BExpr aee = (AvatarIBSExpressionClass.BExpr) AvatarIBSolver.parser.parseBool(act);
+        if (aee==null) {
             TraceManager.addDev("4. Error with avatar expression solver:" + act);
             return -1;
         }
diff --git a/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java b/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java
index 96e2dda32c..98f149e71f 100644
--- a/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java
+++ b/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java
@@ -277,7 +277,6 @@ public class AvatarIBSParserTest {
         attC.clearAttributes();
 
         AvatarIBSExpressionClass.IExpr e1 = (AvatarIBSExpressionClass.IExpr) parser.parseInt(as, "block1.x + block2.y");
-        System.out.println(e1);
         assertTrue(e1 != null);
         assertTrue(attC.containsElementAttribute(block1.getAttribute(0)));
         assertTrue(attC.containsElementAttribute(block2.getAttribute(1)));
@@ -296,23 +295,25 @@ public class AvatarIBSParserTest {
         assertTrue(e2.eval(ss) == true);
         assertTrue(e4.eval(ss) == -2);
 
+        // visual test (among others, test toString)
         int i;
         String[] str = {
                 "block1.x",
                 "block2.y",
-                "block1.x + block2.y",
-                "block1.x - block2.y",
-                "block1.x * block2.y",
-                "block1.x / block2.y",
-                "block1.x / (block2.y * 3)"
+                "block1.x + block2.y > 3",
+                "block1.x - block2.y < 5 ",
+                "not(block1.x + block2.y<=3)",
+                "not(block1.x - block2.y>=5)",
+                "block1.x == true",
+                "(2 && block2.y) == 4"
         };
 
         for (i = 0; i < str.length; i++) {
-            e1 = (AvatarIBSExpressionClass.IExpr) parser.parseInt(as, str[i]);
-            assertTrue(e1 != null);
-            System.out.println(str[i] + " ==> " + e1 + "  $$  " + e1.eval(ss));
+            e2 = (AvatarIBSExpressionClass.BExpr) parser.parseBool(as, str[i]);
+            assertTrue(e2 != null);
+            System.out.println(str[i] + " ==> " + e2 + "  $$  " + e2.eval(ss));
         }
-
+        // end of visual test
 
         as.removeConstants();
         as.sortAttributes();
diff --git a/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java b/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java
index 8acd5787a6..a228c365f5 100644
--- a/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java
+++ b/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java
@@ -483,8 +483,8 @@ public class CLIAvatarModelCheckerTest extends AbstractTest implements Interpret
         graph.computeStates();
 
         System.out.println("random Cstates=" + graph.getNbOfStates() + " transitions=" + graph.getNbOfTransitions());
-        assertTrue(graph.getNbOfStates() == 6);
-        assertTrue(graph.getNbOfTransitions() == 5);
+        assertTrue(graph.getNbOfStates() == 49);
+        assertTrue(graph.getNbOfTransitions() == 48);
 
 
     }
-- 
GitLab