1 package org.simantics.graph.tests.diff;
\r
3 import java.io.IOException;
\r
4 import java.io.InputStream;
\r
5 import java.util.Random;
\r
7 import org.simantics.databoard.Bindings;
\r
8 import org.simantics.databoard.type.Datatype;
\r
9 import org.simantics.graph.diff.Diff;
\r
10 import org.simantics.graph.representation.External;
\r
11 import org.simantics.graph.representation.Identity;
\r
12 import org.simantics.graph.representation.Internal;
\r
13 import org.simantics.graph.representation.Optional;
\r
14 import org.simantics.graph.representation.TransferableGraph1;
\r
15 import org.simantics.graph.representation.Value;
\r
17 public class TestDiff {
\r
19 public static TransferableGraph1 load(String name) throws IOException {
\r
20 InputStream stream = TestDiff.class.getResourceAsStream(name);
\r
21 Bindings.getSerializerUnchecked(Datatype.class).skip(stream);
\r
22 TransferableGraph1 result = (TransferableGraph1)TransferableGraph1.SERIALIZER.deserialize(stream);
\r
27 public static int[] randomPermutation(int size) {
\r
28 Random rand = new Random();
\r
29 int[] permutation = new int[size];
\r
30 for(int i=0;i<size;++i)
\r
32 for(int i=size-1;i>0;--i) {
\r
33 int j = rand.nextInt(i+1);
\r
34 int temp = permutation[i];
\r
35 permutation[i] = permutation[j];
\r
36 permutation[j] = temp;
\r
41 public static void shuffle(TransferableGraph1 tg) {
\r
42 int[] permutation = randomPermutation(tg.resourceCount);
\r
45 int[] statements = tg.statements;
\r
46 for(int i=0;i<statements.length;++i) {
\r
47 int r = statements[i];
\r
49 statements[i] = permutation[r];
\r
53 for(Identity id : tg.identities) {
\r
54 id.resource = permutation[id.resource];
\r
55 if(id.definition instanceof External) {
\r
56 External def = (External)id.definition;
\r
57 def.parent = permutation[def.parent];
\r
59 else if(id.definition instanceof Internal) {
\r
60 Internal def = (Internal)id.definition;
\r
61 def.parent = permutation[def.parent];
\r
63 else if(id.definition instanceof Optional) {
\r
64 Optional def = (Optional)id.definition;
\r
65 def.parent = permutation[def.parent];
\r
69 for(Value value : tg.values) {
\r
70 value.resource = permutation[value.resource];
\r
74 public static void main(String[] args) throws Exception {
\r
75 TransferableGraph1 graphOld = load("layer0.tg");
\r
76 TransferableGraph1 graphNew = load("layer0.tg");
\r
78 long begin = System.nanoTime();
\r
79 Diff diff = new Diff(graphOld, graphNew);
\r
80 /*TransferableGraphDelta1 result =*/ diff.diff();
\r
81 long end = System.nanoTime();
\r
83 System.out.println("Total time: " + (end - begin)*1e-6 + "ms");
\r