You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2018/06/18 21:25:16 UTC

tinkerpop git commit: Added failing tests for TINKERPOP-1643. [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1643 9e80e420f -> d64efe528 (forced update)


Added failing tests for TINKERPOP-1643.

Also simplified a few test queries and tweaked the assertions so that they should now work in STANDARD and COMPUTER mode.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d64efe52
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d64efe52
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d64efe52

Branch: refs/heads/TINKERPOP-1643
Commit: d64efe528aa33578830d6c74d7ae5e04d2d90242
Parents: 891bfa3
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Mar 2 12:41:48 2017 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Jun 18 14:25:03 2018 -0700

----------------------------------------------------------------------
 .../step/branch/GroovyRepeatTest.groovy         |  24 ++-
 gremlin-test/features/branch/Repeat.feature     |  66 ++++++++
 .../traversal/step/branch/RepeatTest.java       | 165 +++++++++++++++----
 3 files changed, 224 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d64efe52/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
index 581c511..ca103df 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
@@ -23,8 +23,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal
 import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both
-
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -79,7 +77,7 @@ public abstract class GroovyRepeatTest {
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_repeatXbothX_timesX10X_asXaX_out_asXbX_selectXa_bX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.repeat(both()).times(10).as('a').out().as('b').select('a', 'b')");
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.repeat(both()).times(10).as('a').out().as('b').select('a', 'b')")
         }
 
         @Override
@@ -107,5 +105,25 @@ public abstract class GroovyRepeatTest {
         public Traversal<Vertex, Path> get_g_V_hasXloop_name_loopX_repeatXinX_timesX5X_path_by_name() {
             new ScriptTraversal<>(g, "gremlin-groovy", "g.V().has('loops','name','loop').repeat(__.in()).times(5).path().by('name')")
         }
+
+        @Override
+        public Traversal<Vertex, Long> get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXvX_count() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('v').emit.repeat(both.as('v').dedup).select('v').count")
+        }
+
+        @Override
+        public Traversal<Vertex, List<Vertex>> get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXall_vX_order_byXcountXlocalXX_byXlimitXlocal_1X_idX_byXtailXlocal_1X_idX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('v').emit.repeat(both.as('v').dedup).select(all, 'v').order.by(count(local)).by(limit(local, 1).id).by(tail(local, 1).id)")
+        }
+
+        @Override
+        public Traversal<Vertex, Long> get_g_V_emit_repeatXboth_dedupX_count() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.emit.repeat(both.dedup).count")
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_emit_repeatXboth_dedupX_order_byXcountXlocalXX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.emit.repeat(both.dedup).order.by(count(local))")
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d64efe52/gremlin-test/features/branch/Repeat.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/branch/Repeat.feature b/gremlin-test/features/branch/Repeat.feature
index 6175519..447c2d6 100644
--- a/gremlin-test/features/branch/Repeat.feature
+++ b/gremlin-test/features/branch/Repeat.feature
@@ -244,3 +244,69 @@ Feature: Step - repeat()
       | loop |
       | loop  |
       | loop  |
+
+  Scenario: g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXvX_count
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().as("v").emit().repeat(both().as("v").dedup()).select("v").count()
+      """
+    When iterated next
+    Then the result should be unordered
+      | result |
+      | d[12].l |
+
+  Scenario: g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXall_vX_order_byXcountXlocalXX_byXlimitXlocal_1X_idX_byXtailXlocal_1X_idX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().as("v").emit().repeat(both().as("v").dedup()).select(Pop.all, "v").order().by(count(local)).by(limit(local, 1).id()).by(tail(local, 1).id());
+      """
+    When iterated next
+    Then the result should be unordered
+      | result |
+      | l[v[marko]] |
+      | l[v[vadas]] |
+      | l[v[lop]] |
+      | l[v[josh]] |
+      | l[v[ripple]] |
+      | l[v[peter]] |
+      | l[v[marko], v[vadas]] |
+      | l[v[marko], v[lop]] |
+      | l[v[marko], v[josh]] |
+      | l[v[vadas], v[marko]] |
+      | l[v[lop], v[ripple]] |
+      | l[v[josh], v[peter]] |
+
+  Scenario: g_V_emit_repeatXboth_dedupX_count
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().emit().repeat(both().dedup()).count()
+      """
+    When iterated next
+    Then the result should be unordered
+      | result |
+      | d[12].l |
+
+  Scenario: g_V_emit_repeatXboth_dedupX_order_byXcountXlocalXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().emit().repeat(both().dedup()).order().by(count(local))
+      """
+    When iterated next
+    Then the result should be unordered
+      | result |
+      | v[1] |
+      | v[1] |
+      | v[2] |
+      | v[2] |
+      | v[3] |
+      | v[3] |
+      | v[4] |
+      | v[4] |
+      | v[5] |
+      | v[5] |
+      | v[6] |
+      | v[6] |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d64efe52/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
index 6d90687..55c897f 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
@@ -22,6 +22,8 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
@@ -39,12 +41,15 @@ import java.util.Map;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.SINK;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.count;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.groupCount;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.has;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.limit;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.loops;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.tail;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
@@ -62,6 +67,27 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
     // DO/WHILE
 
 
+    private static void assertPath(final Traversal<Vertex, Path> traversal) {
+        int path1 = 0;
+        int path2 = 0;
+        int path3 = 0;
+        while (traversal.hasNext()) {
+            final Path path = traversal.next();
+            if (path.size() == 1) {
+                path1++;
+            } else if (path.size() == 2) {
+                path2++;
+            } else if (path.size() == 3) {
+                path3++;
+            } else {
+                fail("Only path lengths of 1, 2, or 3 should be seen");
+            }
+        }
+        assertEquals(6, path1);
+        assertEquals(6, path2);
+        assertEquals(2, path3);
+    }
+
     public abstract Traversal<Vertex, Path> get_g_V_repeatXoutX_timesX2X_emit_path();
 
     public abstract Traversal<Vertex, String> get_g_V_repeatXoutX_timesX2X_repeatXinX_timesX2X_name();
@@ -80,16 +106,16 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Path> get_g_V_emit_repeatXoutX_timesX2X_path();
 
-    public abstract Traversal<Vertex, String> get_g_VX1X_emitXhasXlabel_personXX_repeatXoutX_name(final Object v1Id);
-
     // SIDE-EFFECTS
 
-    public abstract Traversal<Vertex, Map<String, Long>> get_g_V_repeatXgroupCountXmX_byXnameX_outX_timesX2X_capXmX();
+    public abstract Traversal<Vertex, String> get_g_VX1X_emitXhasXlabel_personXX_repeatXoutX_name(final Object v1Id);
 
     public abstract Traversal<Vertex, Map<Integer, Long>> get_g_VX1X_repeatXgroupCountXmX_byXloopsX_outX_timesX3X_capXmX(final Object v1Id);
 
     //
 
+    public abstract Traversal<Vertex, Map<String, Long>> get_g_V_repeatXgroupCountXmX_byXnameX_outX_timesX2X_capXmX();
+
     public abstract Traversal<Vertex, Map<String, Vertex>> get_g_V_repeatXbothX_timesX10X_asXaX_out_asXbX_selectXa_bX();
 
     public abstract Traversal<Vertex, String> get_g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name(final Object v1Id);
@@ -98,6 +124,14 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Path> get_g_V_hasXname_markoX_repeatXoutE_inV_simplePathX_untilXhasXname_rippleXX_path_byXnameX_byXlabelX();
 
+    public abstract Traversal<Vertex, Long> get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXvX_count();
+
+    public abstract Traversal<Vertex, List<Vertex>> get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXall_vX_order_byXcountXlocalXX_byXlimitXlocal_1X_idX_byXtailXlocal_1X_idX();
+
+    public abstract Traversal<Vertex, Long> get_g_V_emit_repeatXboth_dedupX_count();
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_emit_repeatXboth_dedupX_order_byXcountXlocalXX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_repeatXoutX_timesX2X_emit_path() {
@@ -186,27 +220,6 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
         assertPath(traversal);
     }
 
-    private static void assertPath(final Traversal<Vertex, Path> traversal) {
-        int path1 = 0;
-        int path2 = 0;
-        int path3 = 0;
-        while (traversal.hasNext()) {
-            final Path path = traversal.next();
-            if (path.size() == 1) {
-                path1++;
-            } else if (path.size() == 2) {
-                path2++;
-            } else if (path.size() == 3) {
-                path3++;
-            } else {
-                fail("Only path lengths of 1, 2, or 3 should be seen");
-            }
-        }
-        assertEquals(6, path1);
-        assertEquals(6, path2);
-        assertEquals(2, path3);
-    }
-
     @Test
     @LoadGraphWith(SINK)
     public void g_V_hasXloop_name_loopX_repeatXinX_timesX5X_path_by_name() {
@@ -282,6 +295,26 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
+    public void g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXvX_count() {
+        final Traversal<Vertex, Long> traversal = get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXvX_count();
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        assertEquals(12L, traversal.next().longValue());
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_emit_repeatXboth_dedupX_count() {
+        final Traversal<Vertex, Long> traversal = get_g_V_emit_repeatXboth_dedupX_count();
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        assertEquals(12L, traversal.next().longValue());
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
     public void g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX() {
         final Traversal<Vertex, Map<String, Long>> traversal = get_g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX();
         printTraversalForm(traversal);
@@ -310,6 +343,62 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
         assertEquals("ripple", path.get(4));
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXall_vX_order_byXcountXlocalXX_byXlimitXlocal_1X_idX_byXtailXlocal_1X_idX() {
+        final Traversal<Vertex, List<Vertex>> traversal = get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXall_vX_order_byXcountXlocalXX_byXlimitXlocal_1X_idX_byXtailXlocal_1X_idX();
+        printTraversalForm(traversal);
+        final Vertex marko = convertToVertex(graph, "marko");
+        final Vertex vadas = convertToVertex(graph, "vadas");
+        final Vertex lop = convertToVertex(graph, "lop");
+        final Vertex josh = convertToVertex(graph, "josh");
+        final Vertex ripple = convertToVertex(graph, "ripple");
+        final Vertex peter = convertToVertex(graph, "peter");
+        List<Vertex> vertices;
+        assertEquals(1, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), marko);
+        assertEquals(1, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), vadas);
+        assertEquals(1, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), lop);
+        assertEquals(1, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), josh);
+        assertEquals(1, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), ripple);
+        assertEquals(1, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), peter);
+        assertEquals(2, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), marko); assertEquals(vertices.get(1), vadas);
+        assertEquals(2, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), marko); assertEquals(vertices.get(1), lop);
+        assertEquals(2, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), marko); assertEquals(vertices.get(1), josh);
+        assertEquals(2, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), vadas); assertEquals(vertices.get(1), marko);
+        assertEquals(2, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), lop); assertEquals(vertices.get(1), ripple);
+        assertEquals(2, (vertices = traversal.next()).size());
+        assertEquals(vertices.get(0), josh); assertEquals(vertices.get(1), peter);
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_emit_repeatXboth_dedupX_order_byXcountXlocalXX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_emit_repeatXboth_dedupX_order_byXcountXlocalXX();
+        printTraversalForm(traversal);
+        final Map<Vertex, Integer> tmp = new HashMap<>(6);
+        for (int j = 0; j < 2; j++) {
+            for (int i = 0; i < 6; i++) {
+                assertTrue(traversal.hasNext());
+                tmp.compute(traversal.next(), (k, v) -> v != null ? v + 1 : 1);
+            }
+        }
+        assertFalse(traversal.hasNext());
+        assertEquals(6, tmp.size());
+        assertTrue(tmp.values().stream().noneMatch(v -> v != 2));
+    }
+
     public static class Traversals extends RepeatTest {
 
         @Override
@@ -338,13 +427,13 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Path> get_g_V_emit_repeatXoutX_timesX2X_path() {
-            return g.V().emit().repeat(out()).times(2).path();
+        public Traversal<Vertex, Path> get_g_V_emit_timesX2X_repeatXoutX_path() {
+            return g.V().emit().times(2).repeat(out()).path();
         }
 
         @Override
-        public Traversal<Vertex, Path> get_g_V_emit_timesX2X_repeatXoutX_path() {
-            return g.V().emit().times(2).repeat(out()).path();
+        public Traversal<Vertex, Path> get_g_V_emit_repeatXoutX_timesX2X_path() {
+            return g.V().emit().repeat(out()).times(2).path();
         }
 
         @Override
@@ -386,5 +475,25 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Path> get_g_V_hasXloop_name_loopX_repeatXinX_timesX5X_path_by_name() {
             return g.V().has("loops","name","loop").repeat(__.in()).times(5).path().by("name");
         }
+
+        @Override
+        public Traversal<Vertex, Long> get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXvX_count() {
+            return g.V().as("v").emit().repeat(both().as("v").dedup()).select("v").count();
+        }
+
+        @Override
+        public Traversal<Vertex, List<Vertex>> get_g_V_asXvX_emit_repeatXboth_asXvX_dedupX_selectXall_vX_order_byXcountXlocalXX_byXlimitXlocal_1X_idX_byXtailXlocal_1X_idX() {
+            return g.V().as("v").emit().repeat(both().as("v").dedup()).<List<Vertex>>select(Pop.all, "v").order().by(count(Scope.local)).by(limit(Scope.local, 1).id()).by(tail(Scope.local, 1).id());
+        }
+
+        @Override
+        public Traversal<Vertex, Long> get_g_V_emit_repeatXboth_dedupX_count() {
+            return g.V().emit().repeat(both().dedup()).count();
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_emit_repeatXboth_dedupX_order_byXcountXlocalXX() {
+            return g.V().emit().repeat(both().dedup()).order().by(count(Scope.local));
+        }
     }
 }