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