Skip to content

Commit a9310cd

Browse files
authored
copy edge order (#358)
* add unit test for edge order on copies * be faithful with respect to neighbor order when cloning graphs
1 parent df9e69a commit a9310cd

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

core-tests/src/test/java/overflowdb/GraphTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import overflowdb.testdomains.simple.TestNode;
1212

1313
import java.util.ArrayList;
14+
import java.util.Iterator;
1415
import java.util.Map;
1516

1617
import static org.junit.Assert.assertEquals;
@@ -90,4 +91,36 @@ public void shouldDeepCloneGraph() {
9091
assertEquals(graph.edgeCount(), 1);
9192
}
9293

94+
@Test
95+
public void shouldCorrectlyCloneEdgeOrders() {
96+
Config config = Config.withoutOverflow();
97+
Graph graph = SimpleDomain.newGraph(config);
98+
Node n0 = graph.addNode(TestNode.LABEL, TestNode.STRING_PROPERTY, "n0");
99+
Node n1 = graph.addNode(TestNode.LABEL, TestNode.STRING_PROPERTY, "n1");
100+
Node n2 = graph.addNode(TestNode.LABEL, TestNode.STRING_PROPERTY, "n2");
101+
n1.addEdge(TestEdge.LABEL, n2);
102+
n0.addEdge(TestEdge.LABEL, n2);
103+
104+
// copy graph
105+
Graph graph2 = SimpleDomain.newGraph(config);
106+
graph.copyTo(graph2);
107+
108+
//verify order of in-edges on n1
109+
Iterator<Node> orig = n2.in();
110+
assertEquals(orig.next().property(TestNode.STRING_PROPERTY), "n1");
111+
assertEquals(orig.next().property(TestNode.STRING_PROPERTY), "n0");
112+
assertEquals(orig.hasNext(), false);
113+
114+
//same for the copy
115+
116+
Node n0Copy = graph2.node(n0.id());
117+
Node n1Copy = graph2.node(n1.id());
118+
Node n2Copy = graph2.node(n2.id());
119+
Iterator<Node> copy = n2Copy.in();
120+
assertEquals(copy.next().property(TestNode.STRING_PROPERTY), "n1");
121+
assertEquals(copy.next().property(TestNode.STRING_PROPERTY), "n0");
122+
assertEquals(copy.hasNext(), false);
123+
}
124+
125+
93126
}

core/src/main/java/overflowdb/Graph.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,11 +398,18 @@ public void copyTo(Graph destination) {
398398
nodes().forEachRemaining(node -> {
399399
destination.addNode(node.id(), node.label(), PropertyHelper.toKeyValueArray(node.propertiesMap()));
400400
});
401+
nodes().forEachRemaining( node -> {
402+
NodeDb mapped = ((NodeRef<NodeDb>) destination.node(node.id())).get();
403+
404+
node.outE().forEachRemaining(edge -> {
405+
NodeRef<?> other = (NodeRef<?>) destination.node(edge.inNode().id());
406+
mapped.storeAdjacentNode(Direction.OUT, edge.label(), other, PropertyHelper.toKeyValueArray(edge.propertiesMap()));
407+
});
408+
node.inE().forEachRemaining(edge -> {
409+
NodeRef<?> other = (NodeRef<?>) destination.node(edge.outNode().id());
410+
mapped.storeAdjacentNode(Direction.IN, edge.label(), other, PropertyHelper.toKeyValueArray(edge.propertiesMap()));
411+
});
401412

402-
edges().forEachRemaining(edge -> {
403-
final Node inNode = destination.node(edge.inNode().id());
404-
final Node outNode = destination.node(edge.outNode().id());
405-
outNode.addEdge(edge.label(), inNode, PropertyHelper.toKeyValueArray(edge.propertiesMap()));
406413
});
407414
}
408415

0 commit comments

Comments
 (0)