You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/11/14 13:38:53 UTC

[tinkerpop] branch TINKERPOP-1643 updated (8a82659 -> d3b591c)

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a change to branch TINKERPOP-1643
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


 discard 8a82659  Added failing tests for TINKERPOP-1643.
     add 48a1af3  Fixed/added missing feature requirements for tests
     add a097bb8  TINKERPOP-2078 Introduced AnonymousTraversalSource
     add cd12e7d  TINKERPOP-2078 added anonymous traversal to python
     add 834e9c8  TINKERPOP-2078 Add anonymous traversal for js
     add f92e2f0  TINKERPOP-2078 Added AnonymousTraversalSource for .NET
     add 8f80a85  TINKERPOP-2078 Fixed up docs given finalization of .NET/js AnonymousTraversalSource
     add 735579b  TINKERPOP-2078 Refactored Traversal_() to Traversal() in .NET
     add 760352f  TINKERPOP-2078 Used Traversal() in .NET template
     add 89e95f0  TINKERPOP-2078 Deprecated Graph.traversal() in .net,python,js
     add ddbec0b  TINKERPOP-2078 Minor javadoc and reference doc fixes
     add 73aad39  TINKERPOP-2078 Fixed broken XML comment in .NET
     add 2e7b78b  TINKERPOP-2078 Added missing import
     add 8cb89e5  TINKERPOP-2078 Introduce AnonymousTraversalSource in JS
     add d8ac5e5  TINKERPOP-2078 Made python have explicity AnonymousTraversalSource
     add 5af8d08  Allow getting raw JToken data from Gremlin.Net.Driver.GremlinClient.
     add 3bba3d6  Merge branch 'FixTINKERPOP2067' of https://github.com/danielcweber/tinkerpop into danielcweber-FixTINKERPOP2067
     add 6a1bc81  TINKERPOP-2069 Document Gremlin.Net driver config
     add 4811f4e  Merge branch 'TINKERPOP-2069' into tp33
     add b4c0b9a  TINKERPOP-2050 Added :bytecode command to aid with debugging
     add a97caa7  TINKERPOP-2050 Added docs for :bytecode command
     add 0ce1675  TINKERPOP-2050 Support multi-line commands for :bytecode
     add 40c5896  TINKERPOP-2050 Removed the eval/submit options on :bytecode
     add e895a1d  Merge branch 'TINKERPOP-2050' into tp33
     add ff5f19e  TINKERPOP-2010 Generate JSDoc for gremlin-javascript
     add e85667e  Merge branch 'TINKERPOP-2010' into tp33
     new d3b591c  Added failing tests for TINKERPOP-1643.

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (8a82659)
            \
             N -- N -- N   refs/heads/TINKERPOP-1643 (d3b591c)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGELOG.asciidoc                                 |  4 +-
 bin/publish-docs.sh                                | 15 ++++
 docs/site/home/gremlin.html                        |  2 +-
 .../dev/developer/development-environment.asciidoc |  4 +-
 docs/src/dev/provider/index.asciidoc               |  4 +-
 docs/src/index.asciidoc                            |  3 +-
 docs/src/reference/gremlin-applications.asciidoc   | 66 +++++++++------
 docs/src/reference/gremlin-variants.asciidoc       | 61 ++++++++++---
 docs/src/upgrade/release-3.3.x.asciidoc            | 50 +++++++++++
 .../archetype-resources/src/main/java/Service.java |  6 +-
 gremlin-console/conf/remote-graph.properties       |  3 +-
 .../tinkerpop/gremlin/console/Console.groovy       |  2 +
 .../console/commands/BytecodeCommand.groovy        | 64 ++++++++++++++
 .../console/commands/BytecodeCommand.properties    |  7 +-
 .../tinkerpop/gremlin/jsr223/CoreImports.java      |  3 +
 .../process/remote/EmbeddedRemoteConnection.java   |  3 +-
 .../traversal/AnonymousTraversalSource.java        | 99 ++++++++++++++++++++++
 .../gremlin/process/traversal/TraversalSource.java | 11 +++
 .../traversal/dsl/graph/GraphTraversalSource.java  | 13 +++
 .../dsl/graph/GraphTraversalSourceTest.java        |  6 +-
 gremlin-dotnet/glv/P.template                      |  7 +-
 gremlin-dotnet/src/Gremlin.Net.Template/Program.cs |  4 +-
 .../src/Gremlin.Net/Driver/Connection.cs           |  5 +-
 .../src/Gremlin.Net/Driver/GremlinServer.cs        |  3 +-
 .../Traversal/AnonymousTraversalSource.cs}         | 19 +++--
 .../src/Gremlin.Net/Process/Traversal/P.cs         |  7 +-
 gremlin-dotnet/src/Gremlin.Net/Structure/Graph.cs  |  2 +
 .../Driver/GremlinClientTests.cs                   | 29 +++++++
 .../Gherkin/CommonSteps.cs                         |  5 +-
 .../Gherkin/ScenarioData.cs                        |  8 +-
 .../TraversalEvaluationTests.cs                    |  5 +-
 .../BytecodeGeneration/BytecodeGenerationTests.cs  |  9 +-
 .../BytecodeGeneration/StrategiesTests.cs          | 25 ++----
 .../Traversal/DriverRemoteConnection/EnumTests.cs  |  7 +-
 .../GraphTraversalSourceTests.cs                   |  4 +-
 .../DriverRemoteConnection/GraphTraversalTests.cs  | 38 +++------
 .../DriverRemoteConnection/PredicateTests.cs       |  7 +-
 .../DriverRemoteConnection/SideEffectTests.cs      | 32 +++----
 .../DriverRemoteConnection/StrategiesTests.cs      | 46 +++-------
 .../Process/Traversal/Dsl/DslTest.cs               |  4 +-
 .../ServiceTests.cs                                |  5 +-
 .../Process/Traversal/GraphTraversalSourceTests.cs | 13 ++-
 .../driver/remote/DriverRemoteConnection.java      | 21 +++++
 gremlin-javascript/glv/PackageJson.template        |  5 +-
 gremlin-javascript/pom.xml                         | 17 +++-
 .../main/javascript/gremlin-javascript/.gitignore  |  3 +-
 .../driver/auth/authenticator.js => Gruntfile.js}  | 32 ++++---
 .../main/javascript/gremlin-javascript/index.js    |  5 +-
 .../lib/process/anonymous-traversal.js             | 64 ++++++++++++++
 .../lib/process/graph-traversal.js                 |  1 +
 .../gremlin-javascript/lib/structure/graph.js      |  1 +
 .../javascript/gremlin-javascript/package.json     |  5 +-
 .../test/cucumber/feature-steps.js                 |  4 +-
 .../gremlin-javascript/test/cucumber/world.js      |  9 +-
 .../test/integration/traversal-test.js             | 12 +--
 .../gremlin-javascript/test/unit/exports-test.js   |  2 +
 .../gremlin_python/process/anonymous_traversal.py  | 48 +++++++++++
 .../main/jython/gremlin_python/structure/graph.py  |  5 ++
 .../src/main/jython/radish/feature_steps.py        | 17 ++--
 gremlin-python/src/main/jython/radish/terrain.py   |  8 +-
 .../tests/driver/test_driver_remote_connection.py  | 22 ++---
 .../test_driver_remote_connection_threaded.py      |  6 +-
 .../gremlin/driver/remote/RemoteGraphProvider.java |  3 +-
 .../gremlin/server/GremlinServerIntegrateTest.java | 24 ++----
 .../jsr223/GremlinEnabledScriptEngineTest.java     |  2 -
 .../process/traversal/CoreTraversalTest.java       |  8 +-
 .../tinkerpop/gremlin/structure/PropertyTest.java  |  2 +-
 .../gremlin/structure/util/star/StarGraphTest.java |  2 +
 pom.xml                                            |  1 +
 69 files changed, 735 insertions(+), 304 deletions(-)
 create mode 100644 gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/BytecodeCommand.groovy
 copy gremlin-archetype/gremlin-archetype-server/src/test/resources/projects/standard/archetype.properties => gremlin-console/src/main/resources/org/apache/tinkerpop/gremlin/console/commands/BytecodeCommand.properties (83%)
 create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/AnonymousTraversalSource.java
 copy gremlin-dotnet/src/Gremlin.Net/{Structure/Graph.cs => Process/Traversal/AnonymousTraversalSource.cs} (74%)
 copy gremlin-javascript/src/main/javascript/gremlin-javascript/{lib/driver/auth/authenticator.js => Gruntfile.js} (66%)
 create mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/anonymous-traversal.js
 create mode 100644 gremlin-python/src/main/jython/gremlin_python/process/anonymous_traversal.py


[tinkerpop] 01/01: Added failing tests for TINKERPOP-1643.

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-1643
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit d3b591c4db4e54111c296b4e3bc50d5247a77f53
Author: Daniel Kuppitz <da...@hotmail.com>
AuthorDate: Thu Mar 2 12:41:48 2017 +0100

    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.
---
 gremlin-test/features/branch/Repeat.feature        |  66 +++++++++
 .../process/traversal/step/branch/RepeatTest.java  | 165 +++++++++++++++++----
 2 files changed, 203 insertions(+), 28 deletions(-)

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] |
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));
+        }
     }
 }