Переглянути джерело

Minor fixes & test update

René Beckmann 7 роки тому
батько
коміт
21216107c4

+ 5 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/naming/StorageToken.java

@@ -25,4 +25,9 @@ public class StorageToken {
 		myID = tokenID;
 		tokenID += 1;
 	}
+	
+	@Override
+	public String toString() {
+		return "StorageToken[" + myID + "]";
+	}
 }

+ 7 - 2
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/naming/tree/ShortStringUtils.xtend

@@ -11,6 +11,7 @@
 package org.yakindu.sct.model.sexec.naming.tree
 
 import java.util.List
+import java.util.Map
 
 /**
  * @author rbeckmann
@@ -37,7 +38,11 @@ class ShortStringUtils {
 		sb.toString
 	}
 	
-	def public ShortString toShortString(StringTreeNode node) {
-		new ShortString(node.data, node.getRoot.weight - node.weight + 1)
+	def public ShortString toShortString(StringTreeNode node, Map<StringTreeNode, ShortString> map) {
+		if(!map.containsKey(node)) {
+			map.put(node, new ShortString(node.data, node.getRoot.weight - node.weight + 1))
+		}
+		map.get(node)
+		
 	}
 }

+ 2 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/naming/tree/TreeServiceNamesValidator.xtend

@@ -32,7 +32,8 @@ class TreeServiceNamesValidator {
 		} else {
 			for(name : names) {
 				val s = name.join
-				if(set.contains(s)) {
+				
+				if(!set.add(s)) {
 					return false
 				}
 			}

+ 8 - 6
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/naming/tree/TreeStringShortener.xtend

@@ -59,8 +59,9 @@ class TreeStringShortener implements IStringShortener {
 	
 	def protected void assertValidState() {
 		if(!validState) {
+			result = newHashMap
+			storage = newHashMap
 			if(maxLength == 0) {
-				result = newHashMap
 				originalStrings.keySet.forEach[token |
 					result.put(token, originalStrings.get(token).join)
 				]
@@ -86,30 +87,31 @@ class TreeStringShortener implements IStringShortener {
 	def protected shortenNames() {
 		val List<List<StringTreeNode>> nodes = newArrayList
 		val Map<StringTreeNode, List<StringTreeNode>> map = newHashMap
-		val Map<StringTreeNode, List<ShortString>> shortStrings = newHashMap
+		val Map<StringTreeNode, List<ShortString>> endNodeShortStrings = newHashMap
+		val Map<StringTreeNode, ShortString> shortStrings = newHashMap
 		
 		for(node : tree.endNodes) {
 			val List<StringTreeNode> list = newArrayList
 			list.add(node)
 			nodes.add(list)
 			map.put(node, list)
-			shortStrings.put(node, newArrayList)
+			endNodeShortStrings.put(node, newArrayList)
 		}
 		
 		buildIndividualNames(nodes)
 		
 		
 		map.keySet.forEach[node |
-			shortStrings.get(node).addAll(map.get(node).map[toShortString])
+			endNodeShortStrings.get(node).addAll(map.get(node).map[toShortString(shortStrings)])
 		]
 		
-		val List<List<ShortString>> shortStringLists = newArrayList(shortStrings.values)
+		val List<List<ShortString>> shortStringLists = newArrayList(endNodeShortStrings.values)
 		calculateShortNames(shortStringLists)
 		
 		storage.keySet.forEach[token |
 			result.put(
 				token,
-				shortStrings.get(storage.get(token)).join
+				endNodeShortStrings.get(storage.get(token)).join
 			)
 		]
 		

+ 5 - 2
test-plugins/org.yakindu.sct.model.sexec.test/src/org/yakindu/sct/model/sexec/transformation/test/TreeNamingServiceTest.java

@@ -204,8 +204,8 @@ public class TreeNamingServiceTest extends ModelSequencerTest {
 
 		// these names are shorter than 15 characters because there are more
 		// elements containing these names, e.g. state actions
-		List<String> expectedNames = new ArrayList<String>(Arrays.asList("mgn_SA", "mgn_StteB", "s_S", "t_S",
-				"t_S_AR_SA", "t_S_AR_StB", "s_S_AR_SA", "s_S_AR_StB"));
+		List<String> expectedNames = new ArrayList<String>(Arrays.asList("mrgn_StA", "mrgn_StteB", "s_SA", "t_SA",
+				"t_SA_AR_SA", "t_SA_AR_StB", "s_SA_AR_SA", "s_SA_AR_StB"));
 
 		ExecutionFlow flow = optimizer.transform(sequencer.transform(toTest));
 
@@ -256,6 +256,9 @@ public class TreeNamingServiceTest extends ModelSequencerTest {
 			cumulated_time += System.currentTimeMillis() - t0;
 			for (ExecutionState state : flow.getStates()) {
 				String name = executionflowNamingService.getShortName(state);
+				if(names.contains(name)) {
+					System.out.println(name + " is doubled");
+				}
 				assertEquals(names.contains(name), false);
 				assertEquals(true, name.length() <= maxLength);
 				names.add(name);