This is an automated email from the ASF dual-hosted git repository. colegreer pushed a commit to branch repeatLimit in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit ac95eebb8b0f1152923cc5073f0900a788da7f1d Author: Andrea Child <andrea.ch...@improving.com> AuthorDate: Wed Sep 3 22:47:49 2025 -0700 Moved tests to new file. --- .../tinkergraph/structure/TinkerGraphPlayTest.java | 586 +-------------------- .../structure/TinkerGraphRepeatLimitTest.java | 569 ++++++++++++++++++++ 2 files changed, 578 insertions(+), 577 deletions(-) diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java index d74992dc61..c4903013d8 100644 --- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java +++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java @@ -18,36 +18,35 @@ */ package org.apache.tinkerpop.gremlin.tinkergraph.structure; -import java.util.Arrays; -import java.util.List; -import java.util.function.BiFunction; -import java.util.function.Supplier; -import org.apache.commons.collections.CollectionUtils; import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.traversal.P; -import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.WithOptions; import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ConsoleMutationListener; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy; -import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLIo; import org.apache.tinkerpop.gremlin.util.TimeUtil; -import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Arrays; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Supplier; + import static org.apache.tinkerpop.gremlin.process.traversal.Operator.sum; import static org.apache.tinkerpop.gremlin.process.traversal.P.neq; +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.Symbols.values; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.choose; @@ -59,580 +58,14 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.sack; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.union; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.valueMap; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.apache.tinkerpop.gremlin.structure.Column.keys; /** - * @author Stephen Mallette (http://stephen.genoprime.com); + * @author Stephen Mallette (http://stephen.genoprime.com) */ public class TinkerGraphPlayTest { private static final Logger logger = LoggerFactory.getLogger(TinkerGraphPlayTest.class); - private static GraphTraversalSource g; - - @BeforeClass - public static void setup() { - g = TinkerGraph.open().traversal().withoutStrategies(RepeatUnrollStrategy.class); - load(g); -// g = g.withComputer(Computer.compute().workers(1)); - } - - @Test - public void testBasicRepeatLimit() { - GraphTraversal<Vertex, Vertex> basic = g.V().has("id", "l1-0") - .repeat(__.limit(1).out("knows")) - .times(2); - GraphTraversal<Vertex, Vertex> basicUnfolded = g.V().has("id", "l1-0") - .limit(1).out("knows") - .limit(1).out("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("basic", basic), toListAndPrint("basicUnfolded", basicUnfolded))); - } - - @Test - public void testBasicRepeatLimitIncreasedLimit() { - GraphTraversal<Vertex, Vertex> basic = g.V().has("id", "l1-0") - .repeat(__.limit(2).out("knows")) - .times(2); - GraphTraversal<Vertex, Vertex> basicUnfolded = g.V().has("id", "l1-0") - .limit(2).out("knows") - .limit(2).out("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("basic", basic), toListAndPrint("basicUnfolded", basicUnfolded))); - - } - - @Test - public void testRepeatOutLimit() { - GraphTraversal<Vertex, Path> outLimit = g.V().has("id", "l2-0") - .repeat(__.out("knows").order().by("id").limit(2)) - .times(2) - .path().by(T.id); - GraphTraversal<Vertex, Path> outLimitUnfolded = g.V().has("id", "l2-0") - .out("knows").order().by("id").limit(2) - .out("knows").order().by("id").limit(2) - .path().by(T.id); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("outLimit", outLimit), toListAndPrint("outLimitUnfolded", outLimitUnfolded))); - } - - @Test - public void testRepeatWithBothAndLimit() { - GraphTraversal<Vertex, Vertex> bothLimit = g.V().has("id", "l3-0") - .repeat(__.both("knows").order().by("id").limit(3)) - .times(2); - GraphTraversal<Vertex, Vertex> bothLimitUnfolded = g.V().has("id", "l3-0") - .both("knows").order().by("id").limit(3) - .both("knows").order().by("id").limit(3); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("bothLimit", bothLimit), toListAndPrint("bothLimitUnfolded", bothLimitUnfolded))); - } - - @Test - public void testRepeatWithFilterAndLimit() { - GraphTraversal<Vertex, Vertex> filterLimit = g.V().has("id", "l2-0") - .repeat(__.out("knows").has("id", P.neq("l4-3")).order().limit(2)) - .times(2); - GraphTraversal<Vertex, Vertex> filterLimitUnfolded = g.V().has("id", "l2-0") - .out("knows").has("id", P.neq("l4-3")).order().limit(2) - .out("knows").has("id", P.neq("l4-3")).order().limit(2); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("filterLimit", filterLimit), toListAndPrint("filterLimitUnfolded", filterLimitUnfolded))); - } - - @Test - public void testChainedRepeatLimit() { - GraphTraversal<Vertex, Vertex> chained = g.V().has("id", "l2-0") - .repeat(__.order().by("id").limit(1).out("knows")).times(2) - .repeat(__.order().by("id").limit(1).in("knows")).times(2); - GraphTraversal<Vertex, Vertex> chainedUnfolded = g.V().has("id", "l2-0") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("chained", chained), toListAndPrint("chainedUnfolded", chainedUnfolded))); - } - - @Test - public void testChainedRepeatLimitIncreasedLimit() { - GraphTraversal<Vertex, Vertex> chained = g.V().has("id", "l2-0") - .repeat(__.order().by("id").limit(2).out("knows")).times(2) - .repeat(__.order().by("id").limit(3).in("knows")).times(2); - GraphTraversal<Vertex, Vertex> chainedUnfolded = g.V().has("id", "l2-0") - .order().by("id").limit(2).out("knows") - .order().by("id").limit(2).out("knows") - .order().by("id").limit(3).in("knows") - .order().by("id").limit(3).in("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("chained", chained), toListAndPrint("chainedUnfolded", chainedUnfolded))); - } - - @Test - public void testNestedRepeatLimit() { - GraphTraversal<Vertex, Vertex> nested = g.V().has("id", "l3-0") - .repeat(__.order().by("id").limit(1).out("knows") - .repeat(__.order().by("id").limit(1).in("knows")) - .times(2)) - .times(2); - GraphTraversal<Vertex, Vertex> nestedUnfolded = g.V().has("id", "l3-0") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("nested", nested), toListAndPrint("nestedUnfolded", nestedUnfolded))); - - GraphTraversal<Vertex, Vertex> nested2 = g.V().has("id", "l3-0").out("knows").order().by("id"). - repeat(__.order().by("id").limit(1).out("knows") - .repeat(__.order().by("id").limit(1).in("knows")) - .times(2)). - times(2); - GraphTraversal<Vertex, Vertex> nested2Unfolded = g.V().has("id", "l3-0").out("knows").order().by("id") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("nested2", nested2), toListAndPrint("nested2Unfolded", nested2Unfolded))); - } - - @Test - public void testNestedRepeatLimitIncreasedLimit() { - GraphTraversal<Vertex, Vertex> nested = g.V().has("id", "l3-0") - .repeat(__.order().by("id").limit(2).out("knows") - .repeat(__.order().by("id").limit(3).in("knows")) - .times(2)) - .times(2); - GraphTraversal<Vertex, Vertex> nestedUnfolded = g.V().has("id", "l3-0") - .order().by("id").limit(2).out("knows") - .order().by("id").limit(3).in("knows") - .order().by("id").limit(3).in("knows") - .order().by("id").limit(2).out("knows") - .order().by("id").limit(3).in("knows") - .order().by("id").limit(3).in("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("nested", nested), toListAndPrint("nestedUnfolded", nestedUnfolded))); - - GraphTraversal<Vertex, Vertex> nested2 = g.V().has("id", "l3-0").out("knows"). - repeat(__.order().by("id").limit(1).out("knows") - .repeat(__.order().by("id").limit(1).in("knows")) - .times(2)). - times(2); - GraphTraversal<Vertex, Vertex> nested2Unfolded = g.V().has("id", "l3-0").out("knows") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).out("knows") - .order().by("id").limit(1).in("knows") - .order().by("id").limit(1).in("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("nested2", nested2), toListAndPrint("nested2Unfolded", nested2Unfolded))); - } - @Test - public void testTripleNestedRepeatLimit() { - GraphTraversal<Vertex, Vertex> tripleNested = g.V().has("id", "l1-0") - .repeat(__.limit(1).out("knows") - .repeat(__.limit(1).in("knows") - .repeat(__.limit(1).out("knows")) - .times(2)) - .times(2)) - .times(2); - GraphTraversal<Vertex, Vertex> tripleNestedUnfolded = g.V().has("id", "l1-0") - .limit(1).out("knows") - .limit(1).in("knows") - .limit(1).out("knows") - .limit(1).out("knows") - .limit(1).in("knows") - .limit(1).out("knows") - .limit(1).out("knows") - .limit(1).out("knows") - .limit(1).in("knows") - .limit(1).out("knows") - .limit(1).out("knows") - .limit(1).in("knows") - .limit(1).out("knows") - .limit(1).out("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("tripleNested", tripleNested), toListAndPrint("tripleNestedUnfolded", tripleNestedUnfolded))); - } - - @Test - public void testTripleNestedRepeatLimitIncreasedLimit() { - GraphTraversal<Vertex, Vertex> tripleNested = g.V().has("id", "l1-0") - .repeat(__.limit(2).out("knows") - .repeat(__.limit(3).in("knows") - .repeat(__.limit(4).out("knows")) - .times(2)) - .times(2)) - .times(2); - GraphTraversal<Vertex, Vertex> tripleNestedUnfolded = g.V().has("id", "l1-0") - .limit(2).out("knows") - .limit(3).in("knows") - .limit(4).out("knows") - .limit(4).out("knows") - .limit(3).in("knows") - .limit(4).out("knows") - .limit(4).out("knows") - .limit(2).out("knows") - .limit(3).in("knows") - .limit(4).out("knows") - .limit(4).out("knows") - .limit(3).in("knows") - .limit(4).out("knows") - .limit(4).out("knows"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("tripleNested", tripleNested), toListAndPrint("tripleNestedUnfolded", tripleNestedUnfolded))); - } - - @Test - public void testAggregateRepeatLimit() { - GraphTraversal<Vertex, Object> aggregate = g.V().has("id", "l1-0") - .repeat(__.limit(1).out("knows").aggregate("x")) - .times(2) - .cap("x"); - GraphTraversal<Vertex, Object> aggregateUnfolded = g.V().has("id", "l1-0") - .limit(1).out("knows").aggregate("x") - .limit(1).out("knows").aggregate("x") - .cap("x"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("aggregate", aggregate), toListAndPrint("aggregateUnfolded", aggregateUnfolded))); - } - - @Test - public void testAggregateRepeatLimitIncreasedLimit() { - GraphTraversal<Vertex, Object> aggregate = g.V().has("id", "l1-0") - .repeat(__.limit(3).out("knows").aggregate("x")) - .times(2) - .cap("x"); - GraphTraversal<Vertex, Object> aggregateUnfolded = g.V().has("id", "l1-0") - .limit(3).out("knows").aggregate("x") - .limit(3).out("knows").aggregate("x") - .cap("x"); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("aggregate", aggregate), toListAndPrint("aggregateUnfolded", aggregateUnfolded))); - } - - @Test - public void testUnionRepeatLimit() { - GraphTraversal<Vertex, Vertex> union = g.V().has("id", "l1-0") - .union(out().limit(1), out().out().limit(1)) - .repeat(__.limit(1)).times(1); - GraphTraversal<Vertex, Vertex> unionUnfolded = g.V().has("id", "l1-0") - .union(out().limit(1), out().out().limit(1)) - .limit(1); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("union", union), toListAndPrint("unionUnfolded", unionUnfolded))); - } - - @Test - public void testUnionRepeatLimitIncreasedLimit() { - GraphTraversal<Vertex, Vertex> union = g.V().has("id", "l1-0") - .union(out().limit(1), out().out().limit(1)) - .repeat(__.limit(3)).times(1); - GraphTraversal<Vertex, Vertex> unionUnfolded = g.V().has("id", "l1-0") - .union(out().limit(1), out().out().limit(1)) - .limit(3); - assertTrue(CollectionUtils.isEqualCollection(toListAndPrint("union", union), toListAndPrint("unionUnfolded", unionUnfolded))); - } - - private List toListAndPrint(String header, GraphTraversal t) { - System.out.println("=====" + header + "==================================="); - System.out.println(t); - List<?> list = t.toList(); - for (Object o : list) { - System.out.println(o); - } - assertFalse(list.isEmpty()); - return list; - } - - private static void load(GraphTraversalSource g) { - g.V().drop(); - - g.addV("node").property("id","l1-0").iterate(); - - g.addV("node").property("id","l2-0").iterate(); - g.addV("node").property("id","l2-1").iterate(); - - g.addV("node").property("id","l3-0").iterate(); - g.addV("node").property("id","l3-1").iterate(); - g.addV("node").property("id","l3-2").iterate(); - - g.addV("node").property("id","l4-0").iterate(); - g.addV("node").property("id","l4-1").iterate(); - g.addV("node").property("id","l4-2").iterate(); - g.addV("node").property("id","l4-3").iterate(); - - g.addV("node").property("id","l5-0").iterate(); - g.addV("node").property("id","l5-1").iterate(); - g.addV("node").property("id","l5-2").iterate(); - g.addV("node").property("id","l5-3").iterate(); - g.addV("node").property("id","l5-4").iterate(); - - g.V().has("id","l1-0").as("n1").V().has("id","l2-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l1-0").as("n1").V().has("id","l2-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l2-0").as("n1").V().has("id","l3-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l2-0").as("n1").V().has("id","l3-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l2-0").as("n1").V().has("id","l3-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l2-1").as("n1").V().has("id","l3-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l2-1").as("n1").V().has("id","l3-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l2-1").as("n1").V().has("id","l3-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l3-0").as("n1").V().has("id","l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-0").as("n1").V().has("id","l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-0").as("n1").V().has("id","l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-0").as("n1").V().has("id","l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l4-0").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l1-0").as("n1").V().has("id","l2-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l1-0").as("n1").V().has("id","l2-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l2-0").as("n1").V().has("id","l3-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l2-0").as("n1").V().has("id","l3-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l2-0").as("n1").V().has("id","l3-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l2-1").as("n1").V().has("id","l3-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l2-1").as("n1").V().has("id","l3-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l2-1").as("n1").V().has("id","l3-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l3-0").as("n1").V().has("id","l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-0").as("n1").V().has("id","l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-0").as("n1").V().has("id","l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-0").as("n1").V().has("id","l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-1").as("n1").V().has("id","l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l3-2").as("n1").V().has("id","l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l4-0").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-0").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-1").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-2").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l4-3").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - - // Add layer 6 nodes - g.addV("node").property("id","l6-0").iterate(); - g.addV("node").property("id","l6-1").iterate(); - g.addV("node").property("id","l6-2").iterate(); - g.addV("node").property("id","l6-3").iterate(); - g.addV("node").property("id","l6-4").iterate(); - g.addV("node").property("id","l6-5").iterate(); - - g.V().has("id","l5-0").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l5-1").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l5-2").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l5-3").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l5-4").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - - // Connect layer 5 to layer 6 with "friend" edges (same pattern) - g.V().has("id","l5-0").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-0").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l5-1").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-1").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l5-2").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-2").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l5-3").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-3").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l5-4").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l5-4").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - - // Add layer 7 nodes - g.addV("node").property("id","l7-0").iterate(); - g.addV("node").property("id","l7-1").iterate(); - g.addV("node").property("id","l7-2").iterate(); - g.addV("node").property("id","l7-3").iterate(); - g.addV("node").property("id","l7-4").iterate(); - g.addV("node").property("id","l7-5").iterate(); - g.addV("node").property("id","l7-6").iterate(); - - // Connect layer 6 to layer 7 with "knows" edges - g.V().has("id","l6-0").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l6-1").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l6-2").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l6-3").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l6-4").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); - - g.V().has("id","l6-5").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); - - // Connect layer 6 to layer 7 with "friend" edges - g.V().has("id","l6-0").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-0").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l6-1").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-1").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l6-2").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-2").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l6-3").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-3").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l6-4").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-4").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); - - g.V().has("id","l6-5").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); - g.V().has("id","l6-5").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); - } - @Test @Ignore public void testPlay8() throws Exception { @@ -821,7 +254,6 @@ public class TinkerGraphPlayTest { } @Test - @Ignore public void testPlay6() throws Exception { final Graph graph = TinkerGraph.open(); final GraphTraversalSource g = graph.traversal(); diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphRepeatLimitTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphRepeatLimitTest.java new file mode 100644 index 0000000000..24213f7655 --- /dev/null +++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphRepeatLimitTest.java @@ -0,0 +1,569 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tinkerpop.gremlin.tinkergraph.structure; + +import java.util.List; +import java.util.function.Function; +import org.apache.commons.collections.CollectionUtils; +import org.apache.tinkerpop.gremlin.process.computer.Computer; +import org.apache.tinkerpop.gremlin.process.traversal.P; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + + +public class TinkerGraphRepeatLimitTest { + private static GraphTraversalSource gSource; + private static GraphTraversalSource gComputerSource; + + @BeforeClass + public static void setup() { + gSource = TinkerGraph.open().traversal().withoutStrategies(RepeatUnrollStrategy.class); + load(gSource); + gComputerSource = gSource.withComputer(Computer.compute().workers(3)); + } + + @Test + public void testBasicRepeatLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .repeat(__.limit(1).out("knows")) + .times(2), + s -> s.V().has("id", "l1-0") + .limit(1).out("knows") + .limit(1).out("knows")); + } + + @Test + public void testBasicRepeatLimitIncreasedLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .repeat(__.limit(2).out("knows")) + .times(2), + s -> s.V().has("id", "l1-0") + .limit(2).out("knows") + .limit(2).out("knows")); + + } + + @Test + public void testRepeatOutLimit() { + testTraversals(s -> s.V().has("id", "l2-0") + // adding order inside repeat breaks things + .repeat(__.out("knows").limit(2)) + .times(2), + s -> s.V().has("id", "l2-0") + .out("knows").limit(2) + .out("knows").limit(2)); + } + + @Test + public void testRepeatWithBothAndLimit() { + testTraversals(s -> s.V().has("id", "l3-0") + .repeat(__.both("knows").order().by("id").limit(3)) + .times(2), + s -> s.V().has("id", "l3-0") + .both("knows").order().by("id").limit(3) + .both("knows").order().by("id").limit(3)); + } + + @Test + public void testRepeatWithFilterAndLimit() { + testTraversals(s -> s.V().has("id", "l2-0") + .repeat(__.out("knows").has("id", P.neq("l4-3")).order().limit(2)) + .times(2), + s -> s.V().has("id", "l2-0") + .out("knows").has("id", P.neq("l4-3")).order().limit(2) + .out("knows").has("id", P.neq("l4-3")).order().limit(2)); + } + + @Test + public void testChainedRepeatLimit() { + testTraversals(s -> s.V().has("id", "l2-0") + .repeat(__.order().by("id").limit(1).out("knows")).times(2) + .repeat(__.order().by("id").limit(1).in("knows")).times(2), + s -> s.V().has("id", "l2-0") + .order().by("id").limit(1).out("knows") + .order().by("id").limit(1).out("knows") + .order().by("id").limit(1).in("knows") + .order().by("id").limit(1).in("knows")); + } + + @Test + public void testChainedRepeatLimitIncreasedLimit() { + testTraversals(s -> s.V().has("id", "l2-0") + .repeat(__.order().by("id").limit(2).out("knows")).times(2) + .repeat(__.order().by("id").limit(3).in("knows")).times(2), + s -> s.V().has("id", "l2-0") + .order().by("id").limit(2).out("knows") + .order().by("id").limit(2).out("knows") + .order().by("id").limit(3).in("knows") + .order().by("id").limit(3).in("knows")); + } + + @Test + public void testNestedRepeatLimit() { + testTraversals(s -> s.V().has("id", "l3-0") + .repeat(__.order().by("id").limit(1).out("knows") + .repeat(__.order().by("id").limit(1).in("knows")) + .times(2)) + .times(2), s -> s.V().has("id", "l3-0") + .order().by("id").limit(1).out("knows") + .order().by("id").limit(1).in("knows") + .order().by("id").limit(1).in("knows") + .order().by("id").limit(1).out("knows") + .order().by("id").limit(1).in("knows") + .order().by("id").limit(1).in("knows")); + } + + @Test + public void testNestedRepeatLimitIncreasedLimit() { + testTraversals(s -> s.V().has("id", "l3-0") + .repeat(__.order().by("id").limit(2).out("knows") + .repeat(__.order().by("id").limit(3).in("knows")) + .times(2)) + .times(2), s -> s.V().has("id", "l3-0") + .order().by("id").limit(2).out("knows") + .order().by("id").limit(3).in("knows") + .order().by("id").limit(3).in("knows") + .order().by("id").limit(2).out("knows") + .order().by("id").limit(3).in("knows") + .order().by("id").limit(3).in("knows")); + } + + @Test + public void testTripleNestedRepeatLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .repeat(__.limit(1).out("knows") + .repeat(__.limit(1).in("knows") + .repeat(__.limit(1).out("knows")) + .times(2)) + .times(2)) + .times(2), + s -> s.V().has("id", "l1-0") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows")); + } + + @Test + public void testTripleNestedRepeatLimitIncreasedLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .repeat(__.limit(2).out("knows") + .repeat(__.limit(3).in("knows") + .repeat(__.limit(4).out("knows")) + .times(2)) + .times(2)) + .times(2), + s -> s.V().has("id", "l1-0") + .limit(2).out("knows") + .limit(3).in("knows") + .limit(4).out("knows") + .limit(4).out("knows") + .limit(3).in("knows") + .limit(4).out("knows") + .limit(4).out("knows") + .limit(2).out("knows") + .limit(3).in("knows") + .limit(4).out("knows") + .limit(4).out("knows") + .limit(3).in("knows") + .limit(4).out("knows") + .limit(4).out("knows")); + } + + @Test + public void testAggregateRepeatLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .repeat(__.limit(1).out("knows").aggregate("x")) + .times(2) + .cap("x"), + s -> s.V().has("id", "l1-0") + .limit(1).out("knows").aggregate("x") + .limit(1).out("knows").aggregate("x") + .cap("x")); + } + + @Test + public void testAggregateRepeatLimitIncreasedLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .repeat(__.limit(3).out("knows").aggregate("x")) + .times(2) + .cap("x"), + s -> s.V().has("id", "l1-0") + .limit(3).out("knows").aggregate("x") + .limit(3).out("knows").aggregate("x") + .cap("x")); + } + + @Test + public void testUnionRepeatLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .union(out().limit(1), out().out().limit(1)) + .repeat(__.limit(1)).times(1), + s -> s.V().has("id", "l1-0") + .union(out().limit(1), out().out().limit(1)) + .limit(1)); + } + + @Test + public void testUnionRepeatLimitIncreasedLimit() { + testTraversals(s -> s.V().has("id", "l1-0") + .union(out().limit(1), out().out().limit(1)) + .repeat(__.limit(3)).times(1), + s -> s.V().has("id", "l1-0") + .union(out().limit(1), out().out().limit(1)) + .limit(3)); + } + + private List<?> toListAndPrint(String header, GraphTraversal<?, ?> t) { + System.out.println("=====" + header + "==================================="); + System.out.println(t); + List<?> list = t.toList(); + for (Object o : list) { + System.out.println(o); + } + return list; + } + + private void testTraversals(Function<GraphTraversalSource, GraphTraversal<Vertex, Vertex>> repeatFunction, + Function<GraphTraversalSource, GraphTraversal<Vertex, Vertex>> nonRepeatFunction) { + List<?> repeatTraversal = toListAndPrint("repeatTraversal", repeatFunction.apply(gSource)); + List<?> withComputerTraversal = toListAndPrint("withComputerTraversal", repeatFunction.apply(gComputerSource)); + List<?> nonRepeatTraversal = toListAndPrint("nonRepeatTraversal", nonRepeatFunction.apply(gSource)); + assertFalse(repeatTraversal.isEmpty()); + assertTrue(CollectionUtils.isEqualCollection(repeatTraversal, nonRepeatTraversal)); + // due to non-sequential processing of computer algorithm, can not assert equality but only size + assertEquals(repeatTraversal.size(), withComputerTraversal.size()); + } + + private static void load(GraphTraversalSource g) { + g.addV("node").property("id", "l1-0").iterate(); + + g.addV("node").property("id", "l2-0").iterate(); + g.addV("node").property("id", "l2-1").iterate(); + + g.addV("node").property("id", "l3-0").iterate(); + g.addV("node").property("id", "l3-1").iterate(); + g.addV("node").property("id", "l3-2").iterate(); + + g.addV("node").property("id", "l4-0").iterate(); + g.addV("node").property("id", "l4-1").iterate(); + g.addV("node").property("id", "l4-2").iterate(); + g.addV("node").property("id", "l4-3").iterate(); + + g.addV("node").property("id", "l5-0").iterate(); + g.addV("node").property("id", "l5-1").iterate(); + g.addV("node").property("id", "l5-2").iterate(); + g.addV("node").property("id", "l5-3").iterate(); + g.addV("node").property("id", "l5-4").iterate(); + + g.V().has("id", "l1-0").as("n1").V().has("id", "l2-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l1-0").as("n1").V().has("id", "l2-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l2-0").as("n1").V().has("id", "l3-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l2-0").as("n1").V().has("id", "l3-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l2-0").as("n1").V().has("id", "l3-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l2-1").as("n1").V().has("id", "l3-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l2-1").as("n1").V().has("id", "l3-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l2-1").as("n1").V().has("id", "l3-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l1-0").as("n1").V().has("id", "l2-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l1-0").as("n1").V().has("id", "l2-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l2-0").as("n1").V().has("id", "l3-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l2-0").as("n1").V().has("id", "l3-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l2-0").as("n1").V().has("id", "l3-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l2-1").as("n1").V().has("id", "l3-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l2-1").as("n1").V().has("id", "l3-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l2-1").as("n1").V().has("id", "l3-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-0").as("n1").V().has("id", "l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-1").as("n1").V().has("id", "l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l3-2").as("n1").V().has("id", "l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-0").as("n1").V().has("id", "l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-1").as("n1").V().has("id", "l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-2").as("n1").V().has("id", "l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l4-3").as("n1").V().has("id", "l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + + // Add layer 6 nodes + g.addV("node").property("id", "l6-0").iterate(); + g.addV("node").property("id", "l6-1").iterate(); + g.addV("node").property("id", "l6-2").iterate(); + g.addV("node").property("id", "l6-3").iterate(); + g.addV("node").property("id", "l6-4").iterate(); + g.addV("node").property("id", "l6-5").iterate(); + + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + // Connect layer 5 to layer 6 with "friend" edges (same pattern) + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-0").as("n1").V().has("id", "l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-1").as("n1").V().has("id", "l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-2").as("n1").V().has("id", "l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-3").as("n1").V().has("id", "l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l5-4").as("n1").V().has("id", "l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + // Add layer 7 nodes + g.addV("node").property("id", "l7-0").iterate(); + g.addV("node").property("id", "l7-1").iterate(); + g.addV("node").property("id", "l7-2").iterate(); + g.addV("node").property("id", "l7-3").iterate(); + g.addV("node").property("id", "l7-4").iterate(); + g.addV("node").property("id", "l7-5").iterate(); + g.addV("node").property("id", "l7-6").iterate(); + + // Connect layer 6 to layer 7 with "knows" edges + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + // Connect layer 6 to layer 7 with "friend" edges + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-0").as("n1").V().has("id", "l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-1").as("n1").V().has("id", "l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-2").as("n1").V().has("id", "l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-3").as("n1").V().has("id", "l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-4").as("n1").V().has("id", "l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id", "l6-5").as("n1").V().has("id", "l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + } +}