--- /dev/null
+package org.simantics.graph.tests.diff;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.Random;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.graph.diff.Diff;\r
+import org.simantics.graph.representation.External;\r
+import org.simantics.graph.representation.Identity;\r
+import org.simantics.graph.representation.Internal;\r
+import org.simantics.graph.representation.Optional;\r
+import org.simantics.graph.representation.TransferableGraph1;\r
+import org.simantics.graph.representation.Value;\r
+\r
+public class TestDiff {\r
+ \r
+ public static TransferableGraph1 load(String name) throws IOException {\r
+ InputStream stream = TestDiff.class.getResourceAsStream(name);\r
+ Bindings.getSerializerUnchecked(Datatype.class).skip(stream);\r
+ TransferableGraph1 result = (TransferableGraph1)TransferableGraph1.SERIALIZER.deserialize(stream);\r
+ stream.close();\r
+ return result;\r
+ }\r
+ \r
+ public static int[] randomPermutation(int size) {\r
+ Random rand = new Random();\r
+ int[] permutation = new int[size];\r
+ for(int i=0;i<size;++i)\r
+ permutation[i] = i;\r
+ for(int i=size-1;i>0;--i) {\r
+ int j = rand.nextInt(i+1);\r
+ int temp = permutation[i];\r
+ permutation[i] = permutation[j];\r
+ permutation[j] = temp;\r
+ }\r
+ return permutation;\r
+ }\r
+ \r
+ public static void shuffle(TransferableGraph1 tg) {\r
+ int[] permutation = randomPermutation(tg.resourceCount);\r
+ \r
+ {\r
+ int[] statements = tg.statements;\r
+ for(int i=0;i<statements.length;++i) {\r
+ int r = statements[i];\r
+ if(r >= 0)\r
+ statements[i] = permutation[r]; \r
+ }\r
+ }\r
+ \r
+ for(Identity id : tg.identities) {\r
+ id.resource = permutation[id.resource];\r
+ if(id.definition instanceof External) {\r
+ External def = (External)id.definition;\r
+ def.parent = permutation[def.parent];\r
+ }\r
+ else if(id.definition instanceof Internal) {\r
+ Internal def = (Internal)id.definition;\r
+ def.parent = permutation[def.parent];\r
+ }\r
+ else if(id.definition instanceof Optional) {\r
+ Optional def = (Optional)id.definition;\r
+ def.parent = permutation[def.parent];\r
+ }\r
+ }\r
+ \r
+ for(Value value : tg.values) {\r
+ value.resource = permutation[value.resource];\r
+ }\r
+ }\r
+ \r
+ public static void main(String[] args) throws Exception {\r
+ TransferableGraph1 graphOld = load("layer0.tg");\r
+ TransferableGraph1 graphNew = load("layer0.tg");\r
+ shuffle(graphNew);\r
+ long begin = System.nanoTime();\r
+ Diff diff = new Diff(graphOld, graphNew);\r
+ /*TransferableGraphDelta1 result =*/ diff.diff();\r
+ long end = System.nanoTime();\r
+\r
+ System.out.println("Total time: " + (end - begin)*1e-6 + "ms");\r
+ //result.print();\r
+ }\r
+ \r
+}\r