Coverage Summary for Class: TestTreeStep (org.umlg.sqlg.test.gremlincompile)
Class |
Class, %
|
Method, %
|
Line, %
|
TestTreeStep |
100%
(1/1)
|
100%
(6/6)
|
100%
(93/93)
|
package org.umlg.sqlg.test.gremlincompile;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import org.umlg.sqlg.test.BaseTest;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* Date: 2015/10/21
* Time: 7:39 PM
*/
public class TestTreeStep extends BaseTest {
@Test
public void testTree() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "name", "b2");
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "name", "b3");
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
a1.addEdge("ab", b3);
Vertex c1 = this.sqlgGraph.addVertex(T.label, "C", "name", "c1");
Vertex c2 = this.sqlgGraph.addVertex(T.label, "C", "name", "c2");
Vertex c3 = this.sqlgGraph.addVertex(T.label, "C", "name", "c3");
b1.addEdge("bc", c1);
b1.addEdge("bc", c2);
b1.addEdge("bc", c3);
this.sqlgGraph.tx().commit();
DefaultGraphTraversal<Vertex, Tree> traversal = (DefaultGraphTraversal<Vertex, Tree>) this.sqlgGraph.traversal().V().hasLabel("A").out().out().tree();
Assert.assertEquals(5, traversal.getSteps().size());
Tree tree = traversal.next();
Assert.assertEquals(2, traversal.getSteps().size());
Assert.assertEquals(1, tree.size());
Assert.assertTrue(tree.containsKey(a1));
Tree tree2 = (Tree) tree.get(a1);
Assert.assertEquals(1, tree2.size());
Assert.assertTrue(tree2.containsKey(b1));
Tree tree3 = (Tree) tree2.get(b1);
Assert.assertEquals(3, tree3.size());
Assert.assertTrue(tree3.containsKey(c1));
Assert.assertTrue(tree3.containsKey(c1));
Assert.assertTrue(tree3.containsKey(c1));
//left join todo
// GraphTraversal gt = this.sqlgGraph.traversal().V().hasLabel("A").emit().repeat(__.out("ab", "bc")).times(2).tree();
// System.out.println(gt.toString());
// System.out.println(gt.next());
}
@Test
public void testTreeWithBy() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "name", "b2");
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "name", "b3");
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
a1.addEdge("ab", b3);
Vertex c1 = this.sqlgGraph.addVertex(T.label, "C", "name", "c1");
Vertex c2 = this.sqlgGraph.addVertex(T.label, "C", "name", "c2");
Vertex c3 = this.sqlgGraph.addVertex(T.label, "C", "name", "c3");
b1.addEdge("bc", c1);
b1.addEdge("bc", c2);
b1.addEdge("bc", c3);
DefaultGraphTraversal<Vertex, Tree> traversal = (DefaultGraphTraversal<Vertex, Tree>) this.sqlgGraph.traversal()
.V().hasLabel("A").out().out().tree().by("name");
Assert.assertEquals(5, traversal.getSteps().size());
Tree tree = traversal.next();
Assert.assertEquals(2, traversal.getSteps().size());
Assert.assertEquals(1, tree.size());
Assert.assertTrue(tree.containsKey("a1"));
Tree tree2 = (Tree) tree.get("a1");
Assert.assertEquals(1, tree2.size());
Assert.assertTrue(tree2.containsKey("b1"));
Tree tree3 = (Tree) tree2.get("b1");
Assert.assertEquals(3, tree3.size());
Assert.assertTrue(tree3.containsKey("c1"));
Assert.assertTrue(tree3.containsKey("c1"));
Assert.assertTrue(tree3.containsKey("c1"));
}
@Test
public void testTreeWithSideEffect() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "name", "b2");
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "name", "b3");
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
a1.addEdge("ab", b3);
Vertex c1 = this.sqlgGraph.addVertex(T.label, "C", "name", "c1");
Vertex c2 = this.sqlgGraph.addVertex(T.label, "C", "name", "c2");
Vertex c3 = this.sqlgGraph.addVertex(T.label, "C", "name", "c3");
b1.addEdge("bc", c1);
b1.addEdge("bc", c2);
b1.addEdge("bc", c3);
DefaultGraphTraversal<Vertex, Vertex> traversal = (DefaultGraphTraversal<Vertex, Vertex>) this.sqlgGraph.traversal()
.V().hasLabel("A").out().out().tree("a");
Assert.assertEquals(5, traversal.getSteps().size());
Vertex v = traversal.next();
Assert.assertEquals(2, traversal.getSteps().size());
Assert.assertTrue(Matchers.is(Matchers.oneOf(c1, c2, c3)).matches(v));
}
@Test
public void g_VX1X_out_out_tree_byXnameX() {
Graph graph = this.sqlgGraph;
loadModern(this.sqlgGraph);
assertModernGraph(graph, true, false);
GraphTraversalSource g = this.sqlgGraph.traversal();
@SuppressWarnings("unchecked") final List<DefaultGraphTraversal<Vertex, Tree>> traversals = Arrays.asList(
(DefaultGraphTraversal)g.V(convertToVertexId("marko")).out().out().tree().by("name"),
(DefaultGraphTraversal)g.V(convertToVertexId("marko")).out().out().tree("a").by("name").both().both().cap("a")
);
traversals.forEach(traversal -> {
printTraversalForm(traversal);
final Tree tree = traversal.next();
Assert.assertFalse(traversal.hasNext());
Assert.assertEquals(1, tree.size());
Assert.assertTrue(tree.containsKey("marko"));
Assert.assertEquals(1, ((Map) tree.get("marko")).size());
Assert.assertTrue(((Map) tree.get("marko")).containsKey("josh"));
Assert.assertTrue(((Map) ((Map) tree.get("marko")).get("josh")).containsKey("lop"));
Assert.assertTrue(((Map) ((Map) tree.get("marko")).get("josh")).containsKey("ripple"));
});
}
}