diff --git a/src/main/java/avatartranslator/modelchecker/SpecificationActionLoop.java b/src/main/java/avatartranslator/modelchecker/SpecificationActionLoop.java index 0bab01b85950329c9b2dfbc676b7bbe2b5ebb034..128ede76c8156306b1826374c5dbab92c6c0c5c2 100644 --- a/src/main/java/avatartranslator/modelchecker/SpecificationActionLoop.java +++ b/src/main/java/avatartranslator/modelchecker/SpecificationActionLoop.java @@ -3,6 +3,7 @@ package avatartranslator.modelchecker; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -34,6 +35,13 @@ public class SpecificationActionLoop { public void init(AvatarSpecification spec) { Map<AvatarStateMachineElement, Set<AvatarTransition>> map = new HashMap<>(); + removeForLoops(); + + if (internalLoops.size() == 0) { + error = true; + return; + } + for (List<AvatarTransition> list : internalLoops) { AvatarStateMachineElement state = list.get(list.size() -1).getNext(0); //loop state for (AvatarTransition at : list) { @@ -94,6 +102,13 @@ public class SpecificationActionLoop { public void initLeadsTo(AvatarSpecification spec) { Set<AvatarStateMachineElement> stateSet = new HashSet<>(); + removeForLoops(); + + if (internalLoops.size() == 0) { + error = true; + return; + } + for (List<AvatarTransition> list : internalLoops) { for (AvatarTransition at : list) { stateSet.add(at.getNext(0)); @@ -229,6 +244,18 @@ public class SpecificationActionLoop { return s.toString(); } + private void removeForLoops() { + Iterator<ArrayList<AvatarTransition>> iter = internalLoops.iterator(); + while(iter.hasNext()) { + List<AvatarTransition> list = iter.next(); + if (list.size() == 1 && list.get(0).getName().startsWith("Transition2ForRandom__")) { + //remove random for cycle + iter.remove(); + } + } + } + + // public static void findIntersectionSets(List<ArrayList<AvatarTransition>> internalLoops) { // if (internalLoops == null || internalLoops.size() <= 1) { // return; diff --git a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java index 7a8aab6f28c4df6b56bb2be5b0c13f590e8d3235..bd13777cc97fa61efad5fc074d726d53d9c8fdb0 100644 --- a/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java +++ b/ttool/src/test/java/avatartranslator/AvatarExpressionTest.java @@ -126,12 +126,15 @@ public class AvatarExpressionTest { assertTrue(e9.buildExpression()); AvatarExpressionSolver e10 = new AvatarExpressionSolver("true && 0 >= 1 || false"); assertTrue(e10.buildExpression()); + AvatarExpressionSolver e11 = new AvatarExpressionSolver("8/2*(2+2)"); + assertTrue(e11.buildExpression()); assertTrue(e1.getResult() == 1); assertTrue(e2.getResult() == 1); assertTrue(e3.getResult() == 0); assertTrue(e5.getResult() == 1); assertTrue(e9.getResult() == 1); assertTrue(e10.getResult() == 0); + assertTrue(e11.getResult() == 16); } @Test