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

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

commit dbfbb800cfb373f08c61531c22ec47988307b4ff
Author: Ken Hu <[email protected]>
AuthorDate: Tue Oct 14 15:31:47 2025 -0700

    TINKERPOP-3200 Made repeat() act as a global parent
    
    Test tag @GraphComputerVerificationOrderingNotSupported temporarily
    added as there is an unrelated bug in OLAP repeat() that prevents these
    from being tested in the same way as OLTP.
    
    Co-authored-by: Cole-Greer <[email protected]>
---
 CHANGELOG.asciidoc                                 |   1 +
 docs/src/dev/provider/gremlin-semantics.asciidoc   |   5 +-
 docs/src/upgrade/release-3.8.x.asciidoc            | 185 +++++++++++++++++++++
 .../process/traversal/step/branch/RepeatStep.java  |  43 +++--
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  47 ++++--
 gremlin-go/driver/cucumber/gremlin.go              |  47 ++++--
 .../gremlin-javascript/test/cucumber/gremlin.js    |  47 ++++--
 gremlin-python/src/main/python/radish/gremlin.py   |  47 ++++--
 .../apache/tinkerpop/gremlin/features/World.java   |   3 +-
 .../gremlin/test/features/branch/Repeat.feature    | 181 +++++++++++++++++++-
 .../gremlin/test/features/integrated/Paths.feature |  11 +-
 .../integrated/RepeatUnrollStrategy.feature        |  32 ++--
 12 files changed, 546 insertions(+), 103 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index dde7953b08..e457b44e41 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -95,6 +95,7 @@ This release also includes changes from <<release-3-7-XXX, 
3.7.XXX>>.
 * Removed the `@RemoteOnly` testing tag in Gherkin as lambda tests have all 
been moved to the Java test suite.
 * Updated gremlin-javascript to use GraphBinary as default instead of 
GraphSONv3
 * Added the `asNumber()` step to perform number conversion.
+* Changed `repeat()` to make `repeatTraversal` global rather than a mix of 
local and global.
 * Renamed many types in the grammar for consistent use of terms "Literal", 
"Argument", and "Varargs"
 * Changed `gremlin-net` so that System.Text.Json is only listed as an explicit 
dependency when it is not available from the framework.
 * Fixed translation of numeric literals for Go losing type definitions
diff --git a/docs/src/dev/provider/gremlin-semantics.asciidoc 
b/docs/src/dev/provider/gremlin-semantics.asciidoc
index dff6cda769..8df5684db6 100644
--- a/docs/src/dev/provider/gremlin-semantics.asciidoc
+++ b/docs/src/dev/provider/gremlin-semantics.asciidoc
@@ -1974,7 +1974,7 @@ 
link:https://tinkerpop.apache.org/docs/x.y.z/reference/#project-step[reference]
 [[repeat-step]]
 === repeat()
 
-*Description:* Iteratively applies a traversal (the "loop body") to each 
incoming traverser until a stopping
+*Description:* Iteratively applies a traversal (the "loop body") to all 
incoming traversers until a stopping
 condition is met. Optionally, it can emit traversers on each iteration 
according to an emit predicate. The
 repeat step supports loop naming and a loop counter via `loops()`.
 
@@ -2015,6 +2015,9 @@ predicates are evaluated before the first iteration (pre) 
or after each iteratio
 `do/while` semantics respectively:
   - Pre-check / pre-emit: when the modulator appears before `repeat(...)`.
   - Post-check / post-emit: when the modulator appears after `repeat(...)`.
+- Global traversal scope: The `repeatTraversal` is a global child. This means 
all traversers entering the repeat body
+are processed together as a unified stream with global semantics. `Barrier` 
(`order()`, `sample()`, etc.) steps within
+the repeat traversal operate across all traversers collectively rather than in 
isolation per traverser.
 - Loop counter semantics:
   - The loop counter for a given named or unnamed repeat is incremented once 
per completion of the loop body (i.e.,
 after the body finishes), not before. Therefore, `loops()` reflects the number 
of completed iterations.
diff --git a/docs/src/upgrade/release-3.8.x.asciidoc 
b/docs/src/upgrade/release-3.8.x.asciidoc
index 65b5e6a71b..fd2bfed87f 100644
--- a/docs/src/upgrade/release-3.8.x.asciidoc
+++ b/docs/src/upgrade/release-3.8.x.asciidoc
@@ -220,6 +220,135 @@ gremlin> g.inject([Float.MAX_VALUE, Float.MAX_VALUE], 
[Double.MAX_VALUE, Double.
 
 See link:https://issues.apache.org/jira/browse/TINKERPOP-3115[TINKERPOP-3115]
 
+==== repeat() Step Global Children Semantics Change
+
+The `repeat()` step has been updated to treat the repeat traversal as a global 
child in all cases. Previously, the
+repeat traversal behaved as a hybrid between local and global semantics, which 
could lead to unexpected results in
+certain scenarios. The repeat traversal started off as a local child but as 
traversers were added back per iteration,
+it behaved more like a global child.
+
+With this change, the repeat traversal now consistently operates with global 
semantics, meaning that all traversers
+are processed together rather than being processed per traverser. This 
provides more predictable behavior and aligns
+with the semantics of other steps.
+
+[source,text]
+----
+// In 3.7.x and earlier, the order would be local to the first traverser.
+// Notice how the results are grouped by marko, then vadas, then lop
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V(1, 2, 3).
+......1> 
repeat(both().simplePath().order().by("name")).times(2).path().by("name")
+==>[marko,lop,josh]
+==>[marko,josh,lop]
+==>[marko,lop,peter]
+==>[marko,josh,ripple]
+==>[vadas,marko,josh]
+==>[vadas,marko,lop]
+==>[lop,marko,josh]
+==>[lop,josh,marko]
+==>[lop,josh,ripple]
+==>[lop,marko,vadas]
+
+// In 3.8.0, the aggregate now consistently uses global semantics
+// The traversers are now ordered so the traversers from the final iteration 
are ordered first then by
+// the traversers from previous iterations
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V(1, 2, 3).
+......1> 
repeat(both().simplePath().order().by("name")).times(2).path().by("name")
+==>[marko,lop,josh]
+==>[vadas,marko,josh]
+==>[lop,marko,josh]
+==>[marko,josh,lop]
+==>[vadas,marko,lop]
+==>[lop,josh,marko]
+==>[marko,lop,peter]
+==>[marko,josh,ripple]
+==>[lop,josh,ripple]
+==>[lop,marko,vadas]
+----
+
+This change may affect traversals that relied on the previous hybrid behavior, 
particularly those using side effects
+or barrier steps within `repeat()`. Review any traversals using `repeat()` 
with steps like `aggregate()`, `store()`,
+or other barrier steps to ensure they produce the expected results. Note that 
there is no way to exactly replicate the
+old behavior anymore. The following examples show why:
+
+[source,text]
+----
+// In 3.7.x
+gremlin> g.V().repeat(both().order().by("name")).times(1).path()
+==>[v[1],v[4]]
+==>[v[1],v[3]]
+==>[v[1],v[2]]
+==>[v[2],v[1]]
+==>[v[3],v[4]]
+==>[v[3],v[1]]
+==>[v[3],v[6]]
+==>[v[4],v[3]]
+==>[v[4],v[1]]
+==>[v[4],v[5]]
+==>[v[5],v[4]]
+==>[v[6],v[3]]
+
+// In 3.8.0, if there is a single iteration then adding a local() can give the 
same result
+gremlin> g.V().repeat(local(both().order().by("name"))).times(1).path()
+==>[v[1],v[4]]
+==>[v[1],v[3]]
+==>[v[1],v[2]]
+==>[v[2],v[1]]
+==>[v[3],v[4]]
+==>[v[3],v[1]]
+==>[v[3],v[6]]
+==>[v[4],v[3]]
+==>[v[4],v[1]]
+==>[v[4],v[5]]
+==>[v[5],v[4]]
+==>[v[6],v[3]]
+
+
+// In 3.7.x
+gremlin> 
g.V().repeat(local(both().simplePath().order().by("name"))).times(2).path()
+==>[v[1],v[3],v[4]]
+==>[v[1],v[4],v[3]]
+==>[v[1],v[3],v[6]]
+==>[v[1],v[4],v[5]]
+==>[v[2],v[1],v[4]]
+==>[v[2],v[1],v[3]]
+==>[v[3],v[1],v[4]]
+==>[v[3],v[4],v[1]]
+==>[v[3],v[4],v[5]]
+==>[v[3],v[1],v[2]]
+==>[v[4],v[1],v[3]]
+==>[v[4],v[3],v[1]]
+==>[v[4],v[3],v[6]]
+==>[v[4],v[1],v[2]]
+==>[v[5],v[4],v[3]]
+==>[v[5],v[4],v[1]]
+==>[v[6],v[3],v[4]]
+==>[v[6],v[3],v[1]]
+
+// In 3.8.0, if there are multiple iterations then the local() will affect 
each iteration which gives different results
+// than in 3.7.x (shown above)
+gremlin> 
g.V().repeat(local(both().simplePath().order().by("name"))).times(2).path()
+==>[v[1],v[4],v[3]]
+==>[v[1],v[4],v[5]]
+==>[v[1],v[3],v[4]]
+==>[v[1],v[3],v[6]]
+==>[v[2],v[1],v[4]]
+==>[v[2],v[1],v[3]]
+==>[v[3],v[4],v[1]]
+==>[v[3],v[4],v[5]]
+==>[v[3],v[1],v[4]]
+==>[v[3],v[1],v[2]]
+==>[v[4],v[3],v[1]]
+==>[v[4],v[3],v[6]]
+==>[v[4],v[1],v[3]]
+==>[v[4],v[1],v[2]]
+==>[v[5],v[4],v[3]]
+==>[v[5],v[4],v[1]]
+==>[v[6],v[3],v[4]]
+==>[v[6],v[3],v[1]]
+----
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-3200[TINKERPOP-3200]
+
 ==== Prefer OffsetDateTime
 
 The default implementation for date type in Gremlin is now changed from the 
`java.util.Date` to the more encompassing
@@ -927,6 +1056,62 @@ The `ChooseStep` now provides a `ChooseSemantics` enum 
which helps indicate if t
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-3178[TINKERPOP-3178]
 
+===== repeat() Step Global Children Semantics Change
+
+The `RepeatStep` has been updated to consistently treat the repeat traversal 
as a global child rather than using
+hybrid local/global semantics. This change affects how the repeat traversal 
processes traversers and interacts with
+the parent traversal.
+
+Previously, `RepeatStep` would start with local semantics for the first 
iteration and then switch to global semantics
+for the subsequent iterations, which created inconsistencies in how side 
effects and barriers behaved within the repeat
+traversal. The biggest change will be to `Barrier` steps in the repeat 
traversal as they will now have access to all
+the starting traversers.
+
+[source,text]
+----
+// In 3.7.x and earlier, the order would be local to the first traverser.
+// Notice how the results are grouped by marko, then vadas, then lop
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V(1, 2, 3).
+......1> 
repeat(both().simplePath().order().by("name")).times(2).path().by("name")
+==>[marko,lop,josh]
+==>[marko,josh,lop]
+==>[marko,lop,peter]
+==>[marko,josh,ripple]
+==>[vadas,marko,josh]
+==>[vadas,marko,lop]
+==>[lop,marko,josh]
+==>[lop,josh,marko]
+==>[lop,josh,ripple]
+==>[lop,marko,vadas]
+
+// In 3.8.0, the aggregate now consistently uses global semantics
+// The traversers are now ordered so the traversers from the final iteration 
are ordered first then by
+// the traversers from previous iterations
+gremlin> g.withoutStrategies(RepeatUnrollStrategy).V(1, 2, 3).
+......1> 
repeat(both().simplePath().order().by("name")).times(2).path().by("name")
+==>[marko,lop,josh]
+==>[vadas,marko,josh]
+==>[lop,marko,josh]
+==>[marko,josh,lop]
+==>[vadas,marko,lop]
+==>[lop,josh,marko]
+==>[marko,lop,peter]
+==>[marko,josh,ripple]
+==>[lop,josh,ripple]
+==>[lop,marko,vadas]
+----
+
+Providers implementing custom optimizations or strategies around `RepeatStep` 
should verify that their
+implementations account for the repeat traversal being a global child. This 
particularly affects:
+
+- Strategies that analyze or transform repeat traversals
+- Optimizations that depend on the scope semantics of child traversals
+
+The last point about optimizations may be particularly important for providers 
that have memory constraints as this
+change may bring about higher memory usage due to more traversers needing to 
be held in memory.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-3200[TINKERPOP-3200]
+
 ===== Prefer OffsetDateTime
 
 The default implementation for date type in Gremlin is now changed from the 
deprecated `java.util.Date` to the more
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
index 17b8a2ef4e..2abbbc87cc 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
@@ -21,9 +21,12 @@ package 
org.apache.tinkerpop.gremlin.process.traversal.step.branch;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import 
org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -43,6 +46,7 @@ public final class RepeatStep<S> extends ComputerAwareStep<S, 
S> implements Trav
     private Traversal.Admin<S, S> repeatTraversal = null;
     private Traversal.Admin<S, ?> untilTraversal = null;
     private Traversal.Admin<S, ?> emitTraversal = null;
+    private boolean first = true;
     private String loopName = null;
     public boolean untilFirst = false;
     public boolean emitFirst = false;
@@ -206,25 +210,40 @@ public final class RepeatStep<S> extends 
ComputerAwareStep<S, S> implements Trav
             throw new IllegalStateException("The repeat()-traversal was not 
defined: " + this);
 
         while (true) {
-            if (this.repeatTraversal.getEndStep().hasNext()) {
+            if (!first && this.repeatTraversal.getEndStep().hasNext()) {
                 return this.repeatTraversal.getEndStep();
             } else {
-                final Traverser.Admin<S> start = this.starts.next();
-                start.initialiseLoops(this.getId(), this.loopName);
-                if (doUntil(start, true)) {
-                    start.resetLoops();
-                    return IteratorUtils.of(start);
-                }
-                this.repeatTraversal.addStart(start);
-                if (doEmit(start, true)) {
-                    final Traverser.Admin<S> emitSplit = start.split();
-                    emitSplit.resetLoops();
-                    return IteratorUtils.of(emitSplit);
+                this.first = false;
+                if 
(!TraversalHelper.getStepsOfAssignableClassRecursively(Barrier.class, 
repeatTraversal).isEmpty()) {
+                    // If the repeatTraversal has a Barrier then make sure 
that all starts are added to the
+                    // repeatTraversal before it is iterated so that 
RepeatStep always has "global" children.
+                    if (!this.starts.hasNext())
+                        throw FastNoSuchElementException.instance();
+                    while (this.starts.hasNext()) {
+                        processTraverser(this.starts.next());
+                    }
+                } else {
+                    return processTraverser(this.starts.next());
                 }
             }
         }
     }
 
+    private Iterator<Traverser.Admin<S>> processTraverser(final 
Traverser.Admin<S> start) {
+        start.initialiseLoops(this.getId(), this.loopName);
+        if (doUntil(start, true)) {
+            start.resetLoops();
+            return IteratorUtils.of(start);
+        }
+        this.repeatTraversal.addStart(start);
+        if (doEmit(start, true)) {
+            final Traverser.Admin<S> emitSplit = start.split();
+            emitSplit.resetLoops();
+            return IteratorUtils.of(emitSplit);
+        }
+        return Collections.emptyIterator();
+    }
+
     @Override
     protected Iterator<Traverser.Admin<S>> computerAlgorithm() throws 
NoSuchElementException {
         if (null == this.repeatTraversal)
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 9ab8812476..5adc3eeb70 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -151,6 +151,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_V_haxXperson_name_markoX_repeatXoutXcreatedXX_timesX0X_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("person", "name", 
"marko").Repeat(__.Out("created")).Times(0).Values<object>("name")}}, 
                
{"g_V_haxXperson_name_markoX_timesX1X_repeatXoutXcreatedXX_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("person", "name", 
"marko").Times(1).Repeat(__.Out("created")).Values<object>("name")}}, 
                
{"g_V_haxXperson_name_markoX_timesX0X_repeatXoutXcreatedXX_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("person", "name", 
"marko").Times(0).Repeat(__.Out("created")).Values<object>("name")}}, 
+               {"g_V_repeatXboth_hasXnot_productiveXX_timesX3X_constantX1X", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Repeat(__.Both().Has("not", 
"productive")).Times(3).Constant<object>(1)}}, 
+               {"g_V_hasXnot_productiveX_repeatXbothX_timesX3X_constantX1X", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("not", 
"productive").Repeat(__.Both()).Times(3).Constant<object>(1)}}, 
+               {"g_VX1_2_3X_repeatXboth_barrierX_emit_timesX2X_path", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"], p["vid2"], 
p["vid3"]).Repeat(__.Both().Barrier()).Emit().Times(2).Path()}}, 
+               
{"g_V_order_byXname_descX_repeatXboth_simplePath_order_byXname_descXX_timesX2X_path",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Order().By("name", 
Order.Desc).Repeat(__.Both().SimplePath().Order().By("name", 
Order.Desc)).Times(2).Path()}}, 
+               {"g_V_repeatXboth_repeatXorder_byXnameXX_timesX1XX_timesX1X", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Repeat(__.Both().Repeat(__.Order().By("name")).Times(1)).Times(1)}}, 
+               
{"g_V_order_byXname_descX_repeatXlocalXout_order_byXnameXXX_timesX1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Order().By("name", 
Order.Desc).Repeat(__.Local<object>(__.Out().Order().By("name"))).Times(1)}}, 
+               
{"g_V_order_byXnameX_repeatXlocalXboth_simplePath_order_byXnameXXX_timesX2X_path",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Order().By("name").Repeat(__.Local<object>(__.Both().SimplePath().Order().By("name"))).Times(2).Path()}},
 
+               
{"g_V_repeatXunionXoutXknowsX_order_byXnameX_inXcreatedX_order_byXnameXXX_timesX1X",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Repeat(__.Union<object>(__.Out("knows").Order().By("name"), 
__.In("created").Order().By("name"))).Times(1)}}, 
                {"g_unionXX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Union<object>()}}, 
                {"g_unionXV_name", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Union<object>(__.V().Values<object>("name"))}}, 
                {"g_unionXVXv1X_VX4XX_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Union<object>(__.V(p["vid1"]), 
__.V(p["vid4"])).Values<object>("name")}}, 
@@ -455,6 +463,11 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_injectX1_2_3X_tailXlocal_1X_unfold", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3 
}).Tail<object>(Scope.Local, 1).Unfold<object>()}}, 
                {"g_injectX1_2_3_4_5_6X_tailXlocal_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3 }, new List<object> { 4, 
5, 6 }).Tail<object>(Scope.Local, 1)}}, 
                {"g_injectX1_2_3_4_5X_tailXlocal_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4, 5 
}).Tail<object>(Scope.Local, 2)}}, 
+               {"a", new List<Func<GraphTraversalSource, IDictionary<string, 
object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4, 
5 }).Tail<object>(Scope.Local, 2)}}, 
+               {"b", new List<Func<GraphTraversalSource, IDictionary<string, 
object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4, 
5 }).Tail<object>(Scope.Local, 2)}}, 
+               {"c", new List<Func<GraphTraversalSource, IDictionary<string, 
object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4, 
5 }).Tail<object>(Scope.Local, 2)}}, 
+               {"d", new List<Func<GraphTraversalSource, IDictionary<string, 
object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4, 
5 }).Tail<object>(Scope.Local, 2)}}, 
+               {"e", new List<Func<GraphTraversalSource, IDictionary<string, 
object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4, 
5 }).Tail<object>(Scope.Local, 2)}}, 
                
{"g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Has("age").As("a").Out().In().Has("age").As("b").Select<object>("a", 
"b").Where("a", P.Eq("b"))}}, 
                
{"g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_neqXbXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Has("age").As("a").Out().In().Has("age").As("b").Select<object>("a", 
"b").Where("a", P.Neq("b"))}}, 
                
{"g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Has("age").As("a").Out().In().Has("age").As("b").Select<object>("a", 
"b").Where(__.As("b").Has("name", "marko"))}}, 
@@ -563,7 +576,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_withoutStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithoutStrategies(typeof(PathProcessorStrategy)).V().As("a").Select<object>("a").By(__.Values<object>("name"))}},
 
                {"g_withStrategiesXPathRetractionStrategyX_V", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new PathRetractionStrategy()).V()}}, 
                {"g_withoutStrategiesXPathRetractionStrategyX_V", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithoutStrategies(typeof(PathRetractionStrategy)).V()}}, 
-               {"g_V_shortestpath", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().As("v").Both().As("v").Project<object>("src", "tgt", 
"p").By(__.Select<object>(Pop.First, "v")).By(__.Select<object>(Pop.Last, 
"v")).By(__.Select<object>(Pop.All, 
"v")).As("triple").Group("x").By(__.Select<object>("src", 
"tgt")).By(__.Select<object>("p").Fold()).Select<object>("tgt").Barrier().Repeat(__.Both().As("v").Project<object>("src",
 "tgt", "p").By(__.Se [...]
+               {"g_V_shortestpath", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().As("v").Both().As("v").Project<object>("src", "tgt", 
"p").By(__.Select<object>(Pop.First, "v")).By(__.Select<object>(Pop.Last, 
"v")).By(__.Select<object>(Pop.All, 
"v")).As("triple").Group("x").By(__.Select<object>("src", 
"tgt")).By(__.Select<object>("p").Fold()).Select<object>("tgt").Barrier().Repeat(__.Both().As("v").Project<object>("src",
 "tgt", "p").By(__.Se [...]
                {"g_V_playlist_paths", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithStrategies(new 
SeedStrategy(seed: 99999)).V().Has("name", 
"Bob_Dylan").In("sungBy").As("a").Repeat(__.Out().Order().By(Order.Shuffle).SimplePath().From("a")).Until(__.Out("writtenBy").Has("name",
 
"Johnny_Cash")).Limit<object>(1).As("b").Repeat(__.Out().Order().By(Order.Shuffle).As("c").SimplePath().From("b").To("c")).Until(__.Out("sungBy").Has("name",
 "Gratef [...]
                
{"g_withStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new ProductiveByStrategy()).V().Group<object, 
object>().By("age").By("name")}}, 
                
{"g_withoutStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithoutStrategies(typeof(ProductiveByStrategy)).V().Group<object, 
object>().By("age").By("name")}}, 
@@ -594,8 +607,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXbothE_otherV_hasXage_ltX30XXX_timesX2X",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithoutStrategies(typeof(RepeatUnrollStrategy)).V().Repeat(__.BothE().OtherV().Has("age",
 P.Lt(30))).Times(2)}}, 
                
{"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new 
RepeatUnrollStrategy()).V().Repeat(__.Both().Limit<object>(1)).Times(2)}}, 
                
{"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithoutStrategies(typeof(RepeatUnrollStrategy)).V().Repeat(__.Both().Limit<object>(1)).Times(2)}},
 
-               
{"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new 
RepeatUnrollStrategy()).V().Order().Repeat(__.Both().Order().Aggregate("x")).Times(2).Limit<object>(5)}},
 
-               
{"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithoutStrategies(typeof(RepeatUnrollStrategy)).V().Order().Repeat(__.Both().Order().Aggregate("x")).Times(2).Limit<object>(5)}},
 
+               
{"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new 
RepeatUnrollStrategy()).V().Order().Repeat(__.Both().Order().Aggregate("x")).Times(2).Limit<object>(10)}},
 
+               
{"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithoutStrategies(typeof(RepeatUnrollStrategy)).V().Order().Repeat(__.Both().Order().Aggregate("x")).Times(2).Limit<object>(10)}},
 
                
{"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new 
RepeatUnrollStrategy()).V().Repeat(__.Both().Sample(1)).Times(2)}}, 
                
{"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithoutStrategies(typeof(RepeatUnrollStrategy)).V().Repeat(__.Both().Sample(1)).Times(2)}},
 
                
{"g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXid_123X_propertyXname_markoX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithStrategies(new ReservedKeysVerificationStrategy(throwException: 
true)).AddV("person").Property("id", 123).Property("name", "marko")}}, 
@@ -997,13 +1010,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_injectXa_null_bX_intersectXa_cX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", null, "b" }).Intersect(new 
List<object> { "a", "c" })}}, 
                {"g_injectXa_null_bX_intersectXa_null_cX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", null, "b" }).Intersect(new 
List<object> { "a", null, "c" })}}, 
                {"g_injectX3_threeX_intersectXfive_three_7X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 3, "three" }).Intersect(new 
List<object> { "five", "three", 7 })}}, 
-               {"g_injectX__feature___test__nullX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature", " one test", null, "", " ", " abc", "abc 
", " abc ", "  ").LTrim()}}, 
-               {"g_injectX__feature___test__nullX_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "  feature  ", " one test ", null, 
"", " ", " abc", "abc ", " abc ", "  " }).LTrim<object>(Scope.Local)}}, 
-               {"g_injectX__feature__X_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature  ").LTrim()}}, 
-               {"g_injectXListXa_bXX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", "b" }).LTrim()}}, 
-               {"g_injectXListX1_2XX_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2 
}).LTrim<object>(Scope.Local)}}, 
-               {"g_V_valuesXnameX_lTrim", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Property [...]
-               {"g_V_valuesXnameX_order_fold_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ri [...]
                {"g_injectXfeature_test_nullX_length", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("feature", "test", null).Length()}}, 
                {"g_injectXfeature_test_nullX_lengthXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("feature", "test", 
null).Length<object>(Scope.Local)}}, 
                {"g_injectXListXa_bXX_length", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", "b" }).Length()}}, 
@@ -1013,6 +1019,13 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_or_loops_isX2XX_hasXname_peterX_path_byXnameX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Repeat(__.Both().SimplePath()).Until(__.Has("name", 
"peter").Or().Loops().Is(2)).Has("name", "peter").Path().By("name")}}, 
                
{"g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Repeat(__.Both().SimplePath()).Until(__.Has("name", 
"peter").And().Loops().Is(3)).Has("name", "peter").Path().By("name")}}, 
                
{"g_V_emitXhasXname_markoX_or_loops_isX2XX_repeatXoutX_valuesXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Emit(__.Has("name", 
"marko").Or().Loops().Is(2)).Repeat(__.Out()).Values<object>("name")}}, 
+               {"g_injectX__feature___test__nullX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature", " one test", null, "", " ", " abc", "abc 
", " abc ", "  ").LTrim()}}, 
+               {"g_injectX__feature___test__nullX_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "  feature  ", " one test ", null, 
"", " ", " abc", "abc ", " abc ", "  " }).LTrim<object>(Scope.Local)}}, 
+               {"g_injectX__feature__X_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature  ").LTrim()}}, 
+               {"g_injectXListXa_bXX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", "b" }).LTrim()}}, 
+               {"g_injectXListX1_2XX_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2 
}).LTrim<object>(Scope.Local)}}, 
+               {"g_V_valuesXnameX_lTrim", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Property [...]
+               {"g_V_valuesXnameX_order_fold_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ri [...]
                {"g_VX1X_mapXvaluesXnameXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Map<object>(__.Values<object>("name"))}}, 
                {"g_VX1X_outE_label_mapXlengthX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).OutE().Label().Map<object>(__.Length())}}, 
                {"g_VX1X_out_mapXvaluesXnameXX_mapXlengthX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).Out().Map<object>(__.Values<object>("name")).Map<object>(__.Length())}},
 
@@ -1331,13 +1344,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_hasXageX_propertiesXage_nameX_value", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("age").Properties<object>("age", "name").Value<object>()}}, 
                {"g_V_propertiesXname_age_nullX_value", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Properties<object>("name", "age", null).Value<object>()}}, 
                {"g_V_valuesXname_age_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name", "age", null)}}, 
-               {"g_injectX__feature___test__nullX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("feature  ", "one test ", null, "", " ", " abc", "abc 
", " abc ", "  ").RTrim()}}, 
-               {"g_injectX__feature___test__nullX_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "  feature  ", " one test ", null, 
"", " ", " abc", "abc ", " abc ", "  " }).RTrim<object>(Scope.Local)}}, 
-               {"g_injectX__feature__X_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature  ").RTrim()}}, 
-               {"g_injectXListXa_bXX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", "b" }).RTrim()}}, 
-               {"g_injectXListX1_2XX_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2 
}).RTrim<object>(Scope.Local)}}, 
-               {"g_V_valuesXnameX_rTrim", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Property [...]
-               {"g_V_valuesXnameX_order_fold_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ri [...]
                {"g_injectXthat_this_test_nullX_replaceXh_jX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("that", "this", "test", null).Replace("h", "j")}}, 
                {"g_injectXthat_this_test_nullX_fold_replaceXlocal_h_jX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("that", "this", "test", 
null).Fold().Replace<object>(Scope.Local, "h", "j")}}, 
                {"g_injectXListXa_bXcX_replaceXa_bX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", "b" }).Replace("a", "b")}}, 
@@ -1354,6 +1360,13 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_injectXnullX_reverse", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Inject<object>(null).Reverse()}}, 
                {"g_injectXbX_reverse", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Inject<object>("b").Reverse()}}, 
                {"g_injectX3_threeX_reverse", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 3, "three" }).Reverse()}}, 
+               {"g_injectX__feature___test__nullX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("feature  ", "one test ", null, "", " ", " abc", "abc 
", " abc ", "  ").RTrim()}}, 
+               {"g_injectX__feature___test__nullX_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "  feature  ", " one test ", null, 
"", " ", " abc", "abc ", " abc ", "  " }).RTrim<object>(Scope.Local)}}, 
+               {"g_injectX__feature__X_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature  ").RTrim()}}, 
+               {"g_injectXListXa_bXX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { "a", "b" }).RTrim()}}, 
+               {"g_injectXListX1_2XX_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 2 
}).RTrim<object>(Scope.Local)}}, 
+               {"g_V_valuesXnameX_rTrim", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Property [...]
+               {"g_V_valuesXnameX_order_fold_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ri [...]
                {"g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).As("a").Out("knows").As("b").Select<object>("a", 
"b")}}, 
                {"g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX_byXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).As("a").Out("knows").As("b").Select<object>("a", 
"b").By("name")}}, 
                {"g_VX1X_asXaX_outXknowsX_asXbX_selectXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).As("a").Out("knows").As("b").Select<object>("a")}}, 
diff --git a/gremlin-go/driver/cucumber/gremlin.go 
b/gremlin-go/driver/cucumber/gremlin.go
index 3c3d92fc6b..9c83cf176e 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -121,6 +121,14 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_V_haxXperson_name_markoX_repeatXoutXcreatedXX_timesX0X_name": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Has("person", "name", 
"marko").Repeat(gremlingo.T__.Out("created")).Times(0).Values("name")}}, 
     "g_V_haxXperson_name_markoX_timesX1X_repeatXoutXcreatedXX_name": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Has("person", "name", 
"marko").Times(1).Repeat(gremlingo.T__.Out("created")).Values("name")}}, 
     "g_V_haxXperson_name_markoX_timesX0X_repeatXoutXcreatedXX_name": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Has("person", "name", 
"marko").Times(0).Repeat(gremlingo.T__.Out("created")).Values("name")}}, 
+    "g_V_repeatXboth_hasXnot_productiveXX_timesX3X_constantX1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Repeat(gremlingo.T__.Both().Has("not", 
"productive")).Times(3).Constant(1)}}, 
+    "g_V_hasXnot_productiveX_repeatXbothX_timesX3X_constantX1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Has("not", 
"productive").Repeat(gremlingo.T__.Both()).Times(3).Constant(1)}}, 
+    "g_VX1_2_3X_repeatXboth_barrierX_emit_timesX2X_path": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V(p["vid1"], p["vid2"], 
p["vid3"]).Repeat(gremlingo.T__.Both().Barrier()).Emit().Times(2).Path()}}, 
+    
"g_V_order_byXname_descX_repeatXboth_simplePath_order_byXname_descXX_timesX2X_path":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Order().By("name", 
gremlingo.Order.Desc).Repeat(gremlingo.T__.Both().SimplePath().Order().By("name",
 gremlingo.Order.Desc)).Times(2).Path()}}, 
+    "g_V_repeatXboth_repeatXorder_byXnameXX_timesX1XX_timesX1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Repeat(gremlingo.T__.Both().Repeat(gremlingo.T__.Order().By("name")).Times(1)).Times(1)}},
 
+    "g_V_order_byXname_descX_repeatXlocalXout_order_byXnameXXX_timesX1X": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Order().By("name", 
gremlingo.Order.Desc).Repeat(gremlingo.T__.Local(gremlingo.T__.Out().Order().By("name"))).Times(1)}},
 
+    
"g_V_order_byXnameX_repeatXlocalXboth_simplePath_order_byXnameXXX_timesX2X_path":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Order().By("name").Repeat(gremlingo.T__.Local(gremlingo.T__.Both().SimplePath().Order().By("name"))).Times(2).Path()}},
 
+    
"g_V_repeatXunionXoutXknowsX_order_byXnameX_inXcreatedX_order_byXnameXXX_timesX1X":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Repeat(gremlingo.T__.Union(gremlingo.T__.Out("knows").Order().By("name"), 
gremlingo.T__.In("created").Order().By("name"))).Times(1)}}, 
     "g_unionXX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Union()}}, 
     "g_unionXV_name": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Union(gremlingo.T__.V().Values("name"))}}, 
     "g_unionXVXv1X_VX4XX_name": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Union(gremlingo.T__.V(p["vid1"]), 
gremlingo.T__.V(p["vid4"])).Values("name")}}, 
@@ -425,6 +433,11 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_injectX1_2_3X_tailXlocal_1X_unfold": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 
3}).Tail(gremlingo.Scope.Local, 1).Unfold()}}, 
     "g_injectX1_2_3_4_5_6X_tailXlocal_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3}, 
[]interface{}{4, 5, 6}).Tail(gremlingo.Scope.Local, 1)}}, 
     "g_injectX1_2_3_4_5X_tailXlocal_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4, 
5}).Tail(gremlingo.Scope.Local, 2)}}, 
+    "a": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4, 
5}).Tail(gremlingo.Scope.Local, 2)}}, 
+    "b": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4, 
5}).Tail(gremlingo.Scope.Local, 2)}}, 
+    "c": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4, 
5}).Tail(gremlingo.Scope.Local, 2)}}, 
+    "d": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4, 
5}).Tail(gremlingo.Scope.Local, 2)}}, 
+    "e": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4, 
5}).Tail(gremlingo.Scope.Local, 2)}}, 
     "g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Has("age").As("a").Out().In().Has("age").As("b").Select("a", 
"b").Where("a", gremlingo.P.Eq("b"))}}, 
     "g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_neqXbXX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Has("age").As("a").Out().In().Has("age").As("b").Select("a", 
"b").Where("a", gremlingo.P.Neq("b"))}}, 
     
"g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Has("age").As("a").Out().In().Has("age").As("b").Select("a", 
"b").Where(gremlingo.T__.As("b").Has("name", "marko"))}}, 
@@ -533,7 +546,7 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_withoutStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.PathProcessorStrategy()).V().As("a").Select("a").By(gremlingo.T__.Values("name"))}},
 
     "g_withStrategiesXPathRetractionStrategyX_V": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.PathRetractionStrategy()).V()}}, 
     "g_withoutStrategiesXPathRetractionStrategyX_V": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.PathRetractionStrategy()).V()}}, 
-    "g_V_shortestpath": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().As("v").Both().As("v").Project("src", "tgt", 
"p").By(gremlingo.T__.Select(gremlingo.Pop.First, 
"v")).By(gremlingo.T__.Select(gremlingo.Pop.Last, 
"v")).By(gremlingo.T__.Select(gremlingo.Pop.All, 
"v")).As("triple").Group("x").By(gremlingo.T__.Select("src", 
"tgt")).By(gremlingo.T__.Select("p").Fold()).Select("tgt").Barrier().Repeat(gremlingo.T__.Both().As("v").P
 [...]
+    "g_V_shortestpath": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().As("v").Both().As("v").Project("src", "tgt", 
"p").By(gremlingo.T__.Select(gremlingo.Pop.First, 
"v")).By(gremlingo.T__.Select(gremlingo.Pop.Last, 
"v")).By(gremlingo.T__.Select(gremlingo.Pop.All, 
"v")).As("triple").Group("x").By(gremlingo.T__.Select("src", 
"tgt")).By(gremlingo.T__.Select("p").Fold()).Select("tgt").Barrier().Repeat(gremlingo.T__.Both().As("v").P
 [...]
     "g_V_playlist_paths": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.SeedStrategy(gremlingo.SeedStrategyConfig{Seed: 
99999})).V().Has("name", 
"Bob_Dylan").In("sungBy").As("a").Repeat(gremlingo.T__.Out().Order().By(gremlingo.Order.Shuffle).SimplePath().From("a")).Until(gremlingo.T__.Out("writtenBy").Has("name",
 
"Johnny_Cash")).Limit(1).As("b").Repeat(gremlingo.T__.Out().Order().By(gremlingo.Order.Shuffle)
 [...]
     "g_withStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.ProductiveByStrategy()).V().Group().By("age").By("name")}},
 
     "g_withoutStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.ProductiveByStrategy()).V().Group().By("age").By("name")}},
 
@@ -564,8 +577,8 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXbothE_otherV_hasXage_ltX30XXX_timesX2X":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.RepeatUnrollStrategy()).V().Repeat(gremlingo.T__.BothE().OtherV().Has("age",
 gremlingo.P.Lt(30))).Times(2)}}, 
     "g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.RepeatUnrollStrategy()).V().Repeat(gremlingo.T__.Both().Limit(1)).Times(2)}},
 
     
"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.RepeatUnrollStrategy()).V().Repeat(gremlingo.T__.Both().Limit(1)).Times(2)}},
 
-    
"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.RepeatUnrollStrategy()).V().Order().Repeat(gremlingo.T__.Both().Order().Aggregate("x")).Times(2).Limit(5)}},
 
-    
"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.RepeatUnrollStrategy()).V().Order().Repeat(gremlingo.T__.Both().Order().Aggregate("x")).Times(2).Limit(5)}},
 
+    
"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.RepeatUnrollStrategy()).V().Order().Repeat(gremlingo.T__.Both().Order().Aggregate("x")).Times(2).Limit(10)}},
 
+    
"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.RepeatUnrollStrategy()).V().Order().Repeat(gremlingo.T__.Both().Order().Aggregate("x")).Times(2).Limit(10)}},
 
     
"g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.RepeatUnrollStrategy()).V().Repeat(gremlingo.T__.Both().Sample(1)).Times(2)}},
 
     
"g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithoutStrategies(gremlingo.RepeatUnrollStrategy()).V().Repeat(gremlingo.T__.Both().Sample(1)).Times(2)}},
 
     
"g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXid_123X_propertyXname_markoX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithStrategies(gremlingo.ReservedKeysVerificationStrategy(gremlingo.ReservedKeysVerificationStrategyConfig{ThrowException:
 true})).AddV("person").Property("id", 123).Property("name", "marko")}}, 
@@ -967,13 +980,6 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_injectXa_null_bX_intersectXa_cX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"a", nil, 
"b"}).Intersect([]interface{}{"a", "c"})}}, 
     "g_injectXa_null_bX_intersectXa_null_cX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"a", nil, 
"b"}).Intersect([]interface{}{"a", nil, "c"})}}, 
     "g_injectX3_threeX_intersectXfive_three_7X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{3, 
"three"}).Intersect([]interface{}{"five", "three", int32(7)})}}, 
-    "g_injectX__feature___test__nullX_lTrim": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("  feature", " one test", nil, "", " 
", " abc", "abc ", " abc ", "  ").LTrim()}}, 
-    "g_injectX__feature___test__nullX_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"  feature  ", " one 
test ", nil, "", " ", " abc", "abc ", " abc ", "  
"}).LTrim(gremlingo.Scope.Local)}}, 
-    "g_injectX__feature__X_lTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("  feature  
").LTrim()}}, 
-    "g_injectXListXa_bXX_lTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{"a", "b"}).LTrim()}}, 
-    "g_injectXListX1_2XX_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 
2}).LTrim(gremlingo.Scope.Local)}}, 
-    "g_V_valuesXnameX_lTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Proper [...]
-    "g_V_valuesXnameX_order_fold_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", " marko 
").Property("age", 29).As("marko").AddV("person").Property("name", "  vadas  
").Property("age", 27).As("vadas").AddV("software").Property("name", "  
lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh  
").Property("age", 32).As("josh").AddV("software").Property("name", "    [...]
     "g_injectXfeature_test_nullX_length": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("feature", "test", nil).Length()}}, 
     "g_injectXfeature_test_nullX_lengthXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("feature", "test", 
nil).Length(gremlingo.Scope.Local)}}, 
     "g_injectXListXa_bXX_length": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{"a", "b"}).Length()}}, 
@@ -983,6 +989,13 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_or_loops_isX2XX_hasXname_peterX_path_byXnameX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Repeat(gremlingo.T__.Both().SimplePath()).Until(gremlingo.T__.Has("name",
 "peter").Or().Loops().Is(2)).Has("name", "peter").Path().By("name")}}, 
     
"g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Repeat(gremlingo.T__.Both().SimplePath()).Until(gremlingo.T__.Has("name",
 "peter").And().Loops().Is(3)).Has("name", "peter").Path().By("name")}}, 
     "g_V_emitXhasXname_markoX_or_loops_isX2XX_repeatXoutX_valuesXnameX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Emit(gremlingo.T__.Has("name", 
"marko").Or().Loops().Is(2)).Repeat(gremlingo.T__.Out()).Values("name")}}, 
+    "g_injectX__feature___test__nullX_lTrim": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("  feature", " one test", nil, "", " 
", " abc", "abc ", " abc ", "  ").LTrim()}}, 
+    "g_injectX__feature___test__nullX_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"  feature  ", " one 
test ", nil, "", " ", " abc", "abc ", " abc ", "  
"}).LTrim(gremlingo.Scope.Local)}}, 
+    "g_injectX__feature__X_lTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("  feature  
").LTrim()}}, 
+    "g_injectXListXa_bXX_lTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{"a", "b"}).LTrim()}}, 
+    "g_injectXListX1_2XX_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 
2}).LTrim(gremlingo.Scope.Local)}}, 
+    "g_V_valuesXnameX_lTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Proper [...]
+    "g_V_valuesXnameX_order_fold_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", " marko 
").Property("age", 29).As("marko").AddV("person").Property("name", "  vadas  
").Property("age", 27).As("vadas").AddV("software").Property("name", "  
lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh  
").Property("age", 32).As("josh").AddV("software").Property("name", "    [...]
     "g_VX1X_mapXvaluesXnameXX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Map(gremlingo.T__.Values("name"))}}, 
     "g_VX1X_outE_label_mapXlengthX": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE().Label().Map(gremlingo.T__.Length())}}, 
     "g_VX1X_out_mapXvaluesXnameXX_mapXlengthX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Map(gremlingo.T__.Values("name")).Map(gremlingo.T__.Length())}},
 
@@ -1301,13 +1314,6 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_V_hasXageX_propertiesXage_nameX_value": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Has("age").Properties("age", 
"name").Value()}}, 
     "g_V_propertiesXname_age_nullX_value": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V().Properties("name", "age", 
nil).Value()}}, 
     "g_V_valuesXname_age_nullX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("name", 
"age", nil)}}, 
-    "g_injectX__feature___test__nullX_rTrim": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("feature  ", "one test ", nil, "", " 
", " abc", "abc ", " abc ", "  ").RTrim()}}, 
-    "g_injectX__feature___test__nullX_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"  feature  ", " one 
test ", nil, "", " ", " abc", "abc ", " abc ", "  
"}).RTrim(gremlingo.Scope.Local)}}, 
-    "g_injectX__feature__X_rTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("  feature  
").RTrim()}}, 
-    "g_injectXListXa_bXX_rTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{"a", "b"}).RTrim()}}, 
-    "g_injectXListX1_2XX_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 
2}).RTrim(gremlingo.Scope.Local)}}, 
-    "g_V_valuesXnameX_rTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Proper [...]
-    "g_V_valuesXnameX_order_fold_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", " marko 
").Property("age", 29).As("marko").AddV("person").Property("name", "  vadas  
").Property("age", 27).As("vadas").AddV("software").Property("name", "  
lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh  
").Property("age", 32).As("josh").AddV("software").Property("name", "    [...]
     "g_injectXthat_this_test_nullX_replaceXh_jX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("that", "this", "test", 
nil).Replace("h", "j")}}, 
     "g_injectXthat_this_test_nullX_fold_replaceXlocal_h_jX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("that", "this", "test", 
nil).Fold().Replace(gremlingo.Scope.Local, "h", "j")}}, 
     "g_injectXListXa_bXcX_replaceXa_bX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"a", 
"b"}).Replace("a", "b")}}, 
@@ -1324,6 +1330,13 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_injectXnullX_reverse": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(nil).Reverse()}}, 
     "g_injectXbX_reverse": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject("b").Reverse()}}, 
     "g_injectX3_threeX_reverse": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{3, "three"}).Reverse()}}, 
+    "g_injectX__feature___test__nullX_rTrim": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("feature  ", "one test ", nil, "", " 
", " abc", "abc ", " abc ", "  ").RTrim()}}, 
+    "g_injectX__feature___test__nullX_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{"  feature  ", " one 
test ", nil, "", " ", " abc", "abc ", " abc ", "  
"}).RTrim(gremlingo.Scope.Local)}}, 
+    "g_injectX__feature__X_rTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("  feature  
").RTrim()}}, 
+    "g_injectXListXa_bXX_rTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{"a", "b"}).RTrim()}}, 
+    "g_injectXListX1_2XX_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 
2}).RTrim(gremlingo.Scope.Local)}}, 
+    "g_V_valuesXnameX_rTrim": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddV("person").Property("name", " marko ").Property("age", 
29).As("marko").AddV("person").Property("name", "  vadas  ").Property("age", 
27).As("vadas").AddV("software").Property("name", "  lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh  ").Property("age", 
32).As("josh").AddV("software").Property("name", "   ripple   ").Proper [...]
+    "g_V_valuesXnameX_order_fold_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", " marko 
").Property("age", 29).As("marko").AddV("person").Property("name", "  vadas  
").Property("age", 27).As("vadas").AddV("software").Property("name", "  
lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh  
").Property("age", 32).As("josh").AddV("software").Property("name", "    [...]
     "g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).As("a").Out("knows").As("b").Select("a", "b")}}, 
     "g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX_byXnameX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).As("a").Out("knows").As("b").Select("a", "b").By("name")}}, 
     "g_VX1X_asXaX_outXknowsX_asXbX_selectXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).As("a").Out("knows").As("b").Select("a")}}, 
diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index e01d05fbc1..60f00f9b85 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -152,6 +152,14 @@ const gremlins = {
     g_V_haxXperson_name_markoX_repeatXoutXcreatedXX_timesX0X_name: 
[function({g}) { return g.V().has("person", "name", 
"marko").repeat(__.out("created")).times(0).values("name") }], 
     g_V_haxXperson_name_markoX_timesX1X_repeatXoutXcreatedXX_name: 
[function({g}) { return g.V().has("person", "name", 
"marko").times(1).repeat(__.out("created")).values("name") }], 
     g_V_haxXperson_name_markoX_timesX0X_repeatXoutXcreatedXX_name: 
[function({g}) { return g.V().has("person", "name", 
"marko").times(0).repeat(__.out("created")).values("name") }], 
+    g_V_repeatXboth_hasXnot_productiveXX_timesX3X_constantX1X: [function({g}) 
{ return g.V().repeat(__.both().has("not", "productive")).times(3).constant(1) 
}], 
+    g_V_hasXnot_productiveX_repeatXbothX_timesX3X_constantX1X: [function({g}) 
{ return g.V().has("not", "productive").repeat(__.both()).times(3).constant(1) 
}], 
+    g_VX1_2_3X_repeatXboth_barrierX_emit_timesX2X_path: [function({g, vid3, 
vid2, vid1}) { return g.V(vid1, vid2, 
vid3).repeat(__.both().barrier()).emit().times(2).path() }], 
+    
g_V_order_byXname_descX_repeatXboth_simplePath_order_byXname_descXX_timesX2X_path:
 [function({g}) { return g.V().order().by("name", 
Order.desc).repeat(__.both().simplePath().order().by("name", 
Order.desc)).times(2).path() }], 
+    g_V_repeatXboth_repeatXorder_byXnameXX_timesX1XX_timesX1X: [function({g}) 
{ return 
g.V().repeat(__.both().repeat(__.order().by("name")).times(1)).times(1) }], 
+    g_V_order_byXname_descX_repeatXlocalXout_order_byXnameXXX_timesX1X: 
[function({g}) { return g.V().order().by("name", 
Order.desc).repeat(__.local(__.out().order().by("name"))).times(1) }], 
+    
g_V_order_byXnameX_repeatXlocalXboth_simplePath_order_byXnameXXX_timesX2X_path: 
[function({g}) { return 
g.V().order().by("name").repeat(__.local(__.both().simplePath().order().by("name"))).times(2).path()
 }], 
+    
g_V_repeatXunionXoutXknowsX_order_byXnameX_inXcreatedX_order_byXnameXXX_timesX1X:
 [function({g}) { return 
g.V().repeat(__.union(__.out("knows").order().by("name"), 
__.in_("created").order().by("name"))).times(1) }], 
     g_unionXX: [function({g}) { return g.union() }], 
     g_unionXV_name: [function({g}) { return g.union(__.V().values("name")) }], 
     g_unionXVXv1X_VX4XX_name: [function({g, vid4, vid1}) { return 
g.union(__.V(vid1), __.V(vid4)).values("name") }], 
@@ -456,6 +464,11 @@ const gremlins = {
     g_injectX1_2_3X_tailXlocal_1X_unfold: [function({g}) { return g.inject([1, 
2, 3]).tail(Scope.local, 1).unfold() }], 
     g_injectX1_2_3_4_5_6X_tailXlocal_1X: [function({g}) { return g.inject([1, 
2, 3], [4, 5, 6]).tail(Scope.local, 1) }], 
     g_injectX1_2_3_4_5X_tailXlocal_2X: [function({g}) { return g.inject([1, 2, 
3, 4, 5]).tail(Scope.local, 2) }], 
+    a: [function({g}) { return g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2) 
}], 
+    b: [function({g}) { return g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2) 
}], 
+    c: [function({g}) { return g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2) 
}], 
+    d: [function({g}) { return g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2) 
}], 
+    e: [function({g}) { return g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2) 
}], 
     g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX: 
[function({g}) { return 
g.V().has("age").as("a").out().in_().has("age").as("b").select("a", 
"b").where("a", P.eq("b")) }], 
     g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_neqXbXX: 
[function({g}) { return 
g.V().has("age").as("a").out().in_().has("age").as("b").select("a", 
"b").where("a", P.neq("b")) }], 
     
g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX: 
[function({g}) { return 
g.V().has("age").as("a").out().in_().has("age").as("b").select("a", 
"b").where(__.as("b").has("name", "marko")) }], 
@@ -564,7 +577,7 @@ const gremlins = {
     
g_withoutStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX: 
[function({g}) { return 
g.withoutStrategies(PathProcessorStrategy).V().as("a").select("a").by(__.values("name"))
 }], 
     g_withStrategiesXPathRetractionStrategyX_V: [function({g}) { return 
g.withStrategies(new PathRetractionStrategy()).V() }], 
     g_withoutStrategiesXPathRetractionStrategyX_V: [function({g}) { return 
g.withoutStrategies(PathRetractionStrategy).V() }], 
-    g_V_shortestpath: [function({g}) { return 
g.V().as("v").both().as("v").project("src", "tgt", "p").by(__.select(Pop.first, 
"v")).by(__.select(Pop.last, "v")).by(__.select(Pop.all, 
"v")).as("triple").group("x").by(__.select("src", 
"tgt")).by(__.select("p").fold()).select("tgt").barrier().repeat(__.both().as("v").project("src",
 "tgt", "p").by(__.select(Pop.first, "v")).by(__.select(Pop.last, 
"v")).by(__.select(Pop.all, "v")).as("t").filter(__.select(Pop.all, 
"p").count(Scope.local).as(" [...]
+    g_V_shortestpath: [function({g}) { return 
g.V().as("v").both().as("v").project("src", "tgt", "p").by(__.select(Pop.first, 
"v")).by(__.select(Pop.last, "v")).by(__.select(Pop.all, 
"v")).as("triple").group("x").by(__.select("src", 
"tgt")).by(__.select("p").fold()).select("tgt").barrier().repeat(__.both().as("v").project("src",
 "tgt", "p").by(__.select(Pop.first, "v")).by(__.select(Pop.last, 
"v")).by(__.select(Pop.all, "v")).as("t").filter(__.select(Pop.all, 
"p").count(Scope.local).as(" [...]
     g_V_playlist_paths: [function({g}) { return g.withStrategies(new 
SeedStrategy({seed: 99999})).V().has("name", 
"Bob_Dylan").in_("sungBy").as("a").repeat(__.out().order().by(Order.shuffle).simplePath().from_("a")).until(__.out("writtenBy").has("name",
 
"Johnny_Cash")).limit(1).as("b").repeat(__.out().order().by(Order.shuffle).as("c").simplePath().from_("b").to("c")).until(__.out("sungBy").has("name",
 "Grateful_Dead")).limit(1).path().from_("a").unfold().project("song", 
"artists").by("na [...]
     g_withStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX: 
[function({g}) { return g.withStrategies(new 
ProductiveByStrategy()).V().group().by("age").by("name") }], 
     g_withoutStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX: 
[function({g}) { return 
g.withoutStrategies(ProductiveByStrategy).V().group().by("age").by("name") }], 
@@ -595,8 +608,8 @@ const gremlins = {
     
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXbothE_otherV_hasXage_ltX30XXX_timesX2X:
 [function({g}) { return 
g.withoutStrategies(RepeatUnrollStrategy).V().repeat(__.bothE().otherV().has("age",
 P.lt(30))).times(2) }], 
     g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X: 
[function({g}) { return g.withStrategies(new 
RepeatUnrollStrategy()).V().repeat(__.both().limit(1)).times(2) }], 
     
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X: 
[function({g}) { return 
g.withoutStrategies(RepeatUnrollStrategy).V().repeat(__.both().limit(1)).times(2)
 }], 
-    
g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X:
 [function({g}) { return g.withStrategies(new 
RepeatUnrollStrategy()).V().order().repeat(__.both().order().aggregate("x")).times(2).limit(5)
 }], 
-    
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X:
 [function({g}) { return 
g.withoutStrategies(RepeatUnrollStrategy).V().order().repeat(__.both().order().aggregate("x")).times(2).limit(5)
 }], 
+    
g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X:
 [function({g}) { return g.withStrategies(new 
RepeatUnrollStrategy()).V().order().repeat(__.both().order().aggregate("x")).times(2).limit(10)
 }], 
+    
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X:
 [function({g}) { return 
g.withoutStrategies(RepeatUnrollStrategy).V().order().repeat(__.both().order().aggregate("x")).times(2).limit(10)
 }], 
     g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X: 
[function({g}) { return g.withStrategies(new 
RepeatUnrollStrategy()).V().repeat(__.both().sample(1)).times(2) }], 
     
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X: 
[function({g}) { return 
g.withoutStrategies(RepeatUnrollStrategy).V().repeat(__.both().sample(1)).times(2)
 }], 
     
g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXid_123X_propertyXname_markoX:
 [function({g}) { return g.withStrategies(new 
ReservedKeysVerificationStrategy({throwException: 
true})).addV("person").property("id", 123).property("name", "marko") }], 
@@ -998,13 +1011,6 @@ const gremlins = {
     g_injectXa_null_bX_intersectXa_cX: [function({g}) { return g.inject(["a", 
null, "b"]).intersect(["a", "c"]) }], 
     g_injectXa_null_bX_intersectXa_null_cX: [function({g}) { return 
g.inject(["a", null, "b"]).intersect(["a", null, "c"]) }], 
     g_injectX3_threeX_intersectXfive_three_7X: [function({g}) { return 
g.inject([3, "three"]).intersect(["five", "three", 7]) }], 
-    g_injectX__feature___test__nullX_lTrim: [function({g}) { return g.inject(" 
 feature", " one test", null, "", " ", " abc", "abc ", " abc ", "  ").lTrim() 
}], 
-    g_injectX__feature___test__nullX_lTrimXlocalX: [function({g}) { return 
g.inject(["  feature  ", " one test ", null, "", " ", " abc", "abc ", " abc ", 
"  "]).lTrim(Scope.local) }], 
-    g_injectX__feature__X_lTrim: [function({g}) { return g.inject("  feature  
").lTrim() }], 
-    g_injectXListXa_bXX_lTrim: [function({g}) { return g.inject(["a", 
"b"]).lTrim() }], 
-    g_injectXListX1_2XX_lTrimXlocalX: [function({g}) { return g.inject([1, 
2]).lTrim(Scope.local) }], 
-    g_V_valuesXnameX_lTrim: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name", 
"peter").proper [...]
-    g_V_valuesXnameX_order_fold_lTrimXlocalX: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name [...]
     g_injectXfeature_test_nullX_length: [function({g}) { return 
g.inject("feature", "test", null).length() }], 
     g_injectXfeature_test_nullX_lengthXlocalX: [function({g}) { return 
g.inject("feature", "test", null).length(Scope.local) }], 
     g_injectXListXa_bXX_length: [function({g}) { return g.inject(["a", 
"b"]).length() }], 
@@ -1014,6 +1020,13 @@ const gremlins = {
     
g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_or_loops_isX2XX_hasXname_peterX_path_byXnameX:
 [function({g, vid1}) { return 
g.V(vid1).repeat(__.both().simplePath()).until(__.has("name", 
"peter").or().loops().is(2)).has("name", "peter").path().by("name") }], 
     
g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX:
 [function({g, vid1}) { return 
g.V(vid1).repeat(__.both().simplePath()).until(__.has("name", 
"peter").and().loops().is(3)).has("name", "peter").path().by("name") }], 
     g_V_emitXhasXname_markoX_or_loops_isX2XX_repeatXoutX_valuesXnameX: 
[function({g}) { return g.V().emit(__.has("name", 
"marko").or().loops().is(2)).repeat(__.out()).values("name") }], 
+    g_injectX__feature___test__nullX_lTrim: [function({g}) { return g.inject(" 
 feature", " one test", null, "", " ", " abc", "abc ", " abc ", "  ").lTrim() 
}], 
+    g_injectX__feature___test__nullX_lTrimXlocalX: [function({g}) { return 
g.inject(["  feature  ", " one test ", null, "", " ", " abc", "abc ", " abc ", 
"  "]).lTrim(Scope.local) }], 
+    g_injectX__feature__X_lTrim: [function({g}) { return g.inject("  feature  
").lTrim() }], 
+    g_injectXListXa_bXX_lTrim: [function({g}) { return g.inject(["a", 
"b"]).lTrim() }], 
+    g_injectXListX1_2XX_lTrimXlocalX: [function({g}) { return g.inject([1, 
2]).lTrim(Scope.local) }], 
+    g_V_valuesXnameX_lTrim: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name", 
"peter").proper [...]
+    g_V_valuesXnameX_order_fold_lTrimXlocalX: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name [...]
     g_VX1X_mapXvaluesXnameXX: [function({g, vid1}) { return 
g.V(vid1).map(__.values("name")) }], 
     g_VX1X_outE_label_mapXlengthX: [function({g, vid1}) { return 
g.V(vid1).outE().label().map(__.length()) }], 
     g_VX1X_out_mapXvaluesXnameXX_mapXlengthX: [function({g, vid1}) { return 
g.V(vid1).out().map(__.values("name")).map(__.length()) }], 
@@ -1332,13 +1345,6 @@ const gremlins = {
     g_V_hasXageX_propertiesXage_nameX_value: [function({g}) { return 
g.V().has("age").properties("age", "name").value() }], 
     g_V_propertiesXname_age_nullX_value: [function({g}) { return 
g.V().properties("name", "age", null).value() }], 
     g_V_valuesXname_age_nullX: [function({g}) { return g.V().values("name", 
"age", null) }], 
-    g_injectX__feature___test__nullX_rTrim: [function({g}) { return 
g.inject("feature  ", "one test ", null, "", " ", " abc", "abc ", " abc ", "  
").rTrim() }], 
-    g_injectX__feature___test__nullX_rTrimXlocalX: [function({g}) { return 
g.inject(["  feature  ", " one test ", null, "", " ", " abc", "abc ", " abc ", 
"  "]).rTrim(Scope.local) }], 
-    g_injectX__feature__X_rTrim: [function({g}) { return g.inject("  feature  
").rTrim() }], 
-    g_injectXListXa_bXX_rTrim: [function({g}) { return g.inject(["a", 
"b"]).rTrim() }], 
-    g_injectXListX1_2XX_rTrimXlocalX: [function({g}) { return g.inject([1, 
2]).rTrim(Scope.local) }], 
-    g_V_valuesXnameX_rTrim: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name", 
"peter").proper [...]
-    g_V_valuesXnameX_order_fold_rTrimXlocalX: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name [...]
     g_injectXthat_this_test_nullX_replaceXh_jX: [function({g}) { return 
g.inject("that", "this", "test", null).replace("h", "j") }], 
     g_injectXthat_this_test_nullX_fold_replaceXlocal_h_jX: [function({g}) { 
return g.inject("that", "this", "test", null).fold().replace(Scope.local, "h", 
"j") }], 
     g_injectXListXa_bXcX_replaceXa_bX: [function({g}) { return g.inject(["a", 
"b"]).replace("a", "b") }], 
@@ -1355,6 +1361,13 @@ const gremlins = {
     g_injectXnullX_reverse: [function({g}) { return g.inject(null).reverse() 
}], 
     g_injectXbX_reverse: [function({g}) { return g.inject("b").reverse() }], 
     g_injectX3_threeX_reverse: [function({g}) { return g.inject([3, 
"three"]).reverse() }], 
+    g_injectX__feature___test__nullX_rTrim: [function({g}) { return 
g.inject("feature  ", "one test ", null, "", " ", " abc", "abc ", " abc ", "  
").rTrim() }], 
+    g_injectX__feature___test__nullX_rTrimXlocalX: [function({g}) { return 
g.inject(["  feature  ", " one test ", null, "", " ", " abc", "abc ", " abc ", 
"  "]).rTrim(Scope.local) }], 
+    g_injectX__feature__X_rTrim: [function({g}) { return g.inject("  feature  
").rTrim() }], 
+    g_injectXListXa_bXX_rTrim: [function({g}) { return g.inject(["a", 
"b"]).rTrim() }], 
+    g_injectXListX1_2XX_rTrimXlocalX: [function({g}) { return g.inject([1, 
2]).rTrim(Scope.local) }], 
+    g_V_valuesXnameX_rTrim: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name", 
"peter").proper [...]
+    g_V_valuesXnameX_order_fold_rTrimXlocalX: [function({g}) { return 
g.addV("person").property("name", " marko ").property("age", 
29).as("marko").addV("person").property("name", "  vadas  ").property("age", 
27).as("vadas").addV("software").property("name", "  lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh  ").property("age", 
32).as("josh").addV("software").property("name", "   ripple   
").property("lang", "java").as("ripple").addV("person").property("name [...]
     g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX: [function({g, vid1}) { return 
g.V(vid1).as("a").out("knows").as("b").select("a", "b") }], 
     g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX_byXnameX: [function({g, vid1}) { 
return g.V(vid1).as("a").out("knows").as("b").select("a", "b").by("name") }], 
     g_VX1X_asXaX_outXknowsX_asXbX_selectXaX: [function({g, vid1}) { return 
g.V(vid1).as("a").out("knows").as("b").select("a") }], 
diff --git a/gremlin-python/src/main/python/radish/gremlin.py 
b/gremlin-python/src/main/python/radish/gremlin.py
index 3fd2da2666..d04e77ca7b 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -124,6 +124,14 @@ world.gremlins = {
     'g_V_haxXperson_name_markoX_repeatXoutXcreatedXX_timesX0X_name': [(lambda 
g:g.V().has('person', 'name', 
'marko').repeat(__.out('created')).times(0).values('name'))], 
     'g_V_haxXperson_name_markoX_timesX1X_repeatXoutXcreatedXX_name': [(lambda 
g:g.V().has('person', 'name', 
'marko').times(1).repeat(__.out('created')).values('name'))], 
     'g_V_haxXperson_name_markoX_timesX0X_repeatXoutXcreatedXX_name': [(lambda 
g:g.V().has('person', 'name', 
'marko').times(0).repeat(__.out('created')).values('name'))], 
+    'g_V_repeatXboth_hasXnot_productiveXX_timesX3X_constantX1X': [(lambda 
g:g.V().repeat(__.both().has('not', 'productive')).times(3).constant(1))], 
+    'g_V_hasXnot_productiveX_repeatXbothX_timesX3X_constantX1X': [(lambda 
g:g.V().has('not', 'productive').repeat(__.both()).times(3).constant(1))], 
+    'g_VX1_2_3X_repeatXboth_barrierX_emit_timesX2X_path': [(lambda g, 
vid3=None,vid2=None,vid1=None:g.V(vid1, vid2, 
vid3).repeat(__.both().barrier()).emit().times(2).path())], 
+    
'g_V_order_byXname_descX_repeatXboth_simplePath_order_byXname_descXX_timesX2X_path':
 [(lambda g:g.V().order().by('name', 
Order.desc).repeat(__.both().simple_path().order().by('name', 
Order.desc)).times(2).path())], 
+    'g_V_repeatXboth_repeatXorder_byXnameXX_timesX1XX_timesX1X': [(lambda 
g:g.V().repeat(__.both().repeat(__.order().by('name')).times(1)).times(1))], 
+    'g_V_order_byXname_descX_repeatXlocalXout_order_byXnameXXX_timesX1X': 
[(lambda g:g.V().order().by('name', 
Order.desc).repeat(__.local(__.out().order().by('name'))).times(1))], 
+    
'g_V_order_byXnameX_repeatXlocalXboth_simplePath_order_byXnameXXX_timesX2X_path':
 [(lambda 
g:g.V().order().by('name').repeat(__.local(__.both().simple_path().order().by('name'))).times(2).path())],
 
+    
'g_V_repeatXunionXoutXknowsX_order_byXnameX_inXcreatedX_order_byXnameXXX_timesX1X':
 [(lambda g:g.V().repeat(__.union(__.out('knows').order().by('name'), 
__.in_('created').order().by('name'))).times(1))], 
     'g_unionXX': [(lambda g:g.union())], 
     'g_unionXV_name': [(lambda g:g.union(__.V().values('name')))], 
     'g_unionXVXv1X_VX4XX_name': [(lambda g, 
vid4=None,vid1=None:g.union(__.V(vid1), __.V(vid4)).values('name'))], 
@@ -428,6 +436,11 @@ world.gremlins = {
     'g_injectX1_2_3X_tailXlocal_1X_unfold': [(lambda g:g.inject([1, 2, 
3]).tail(Scope.local, 1).unfold())], 
     'g_injectX1_2_3_4_5_6X_tailXlocal_1X': [(lambda g:g.inject([1, 2, 3], [4, 
5, 6]).tail(Scope.local, 1))], 
     'g_injectX1_2_3_4_5X_tailXlocal_2X': [(lambda g:g.inject([1, 2, 3, 4, 
5]).tail(Scope.local, 2))], 
+    'a': [(lambda g:g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2))], 
+    'b': [(lambda g:g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2))], 
+    'c': [(lambda g:g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2))], 
+    'd': [(lambda g:g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2))], 
+    'e': [(lambda g:g.inject([1, 2, 3, 4, 5]).tail(Scope.local, 2))], 
     'g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX': 
[(lambda 
g:g.V().has('age').as_('a').out().in_().has('age').as_('b').select('a', 
'b').where('a', P.eq('b')))], 
     'g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_neqXbXX': 
[(lambda 
g:g.V().has('age').as_('a').out().in_().has('age').as_('b').select('a', 
'b').where('a', P.neq('b')))], 
     
'g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX':
 [(lambda 
g:g.V().has('age').as_('a').out().in_().has('age').as_('b').select('a', 
'b').where(__.as_('b').has('name', 'marko')))], 
@@ -536,7 +549,7 @@ world.gremlins = {
     
'g_withoutStrategiesXPathProcessorStrategyX_V_asXaX_selectXaX_byXvaluesXnameXX':
 [(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy')]).V().as_('a').select('a').by(__.values('name')))],
 
     'g_withStrategiesXPathRetractionStrategyX_V': [(lambda 
g:g.with_strategies(PathRetractionStrategy()).V())], 
     'g_withoutStrategiesXPathRetractionStrategyX_V': [(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy')]).V())],
 
-    'g_V_shortestpath': [(lambda 
g:g.V().as_('v').both().as_('v').project('src', 'tgt', 
'p').by(__.select(Pop.first, 'v')).by(__.select(Pop.last, 
'v')).by(__.select(Pop.all_, 'v')).as_('triple').group('x').by(__.select('src', 
'tgt')).by(__.select('p').fold()).select('tgt').barrier().repeat(__.both().as_('v').project('src',
 'tgt', 'p').by(__.select(Pop.first, 'v')).by(__.select(Pop.last, 
'v')).by(__.select(Pop.all_, 'v')).as_('t').filter_(__.select(Pop.all_, 
'p').count(Scope.local).as_('l [...]
+    'g_V_shortestpath': [(lambda 
g:g.V().as_('v').both().as_('v').project('src', 'tgt', 
'p').by(__.select(Pop.first, 'v')).by(__.select(Pop.last, 
'v')).by(__.select(Pop.all_, 'v')).as_('triple').group('x').by(__.select('src', 
'tgt')).by(__.select('p').fold()).select('tgt').barrier().repeat(__.both().as_('v').project('src',
 'tgt', 'p').by(__.select(Pop.first, 'v')).by(__.select(Pop.last, 
'v')).by(__.select(Pop.all_, 'v')).as_('t').filter_(__.select(Pop.all_, 
'p').count(Scope.local).as_('l [...]
     'g_V_playlist_paths': [(lambda 
g:g.with_strategies(SeedStrategy(seed=99999)).V().has('name', 
'Bob_Dylan').in_('sungBy').as_('a').repeat(__.out().order().by(Order.shuffle).simple_path().from_('a')).until(__.out('writtenBy').has('name',
 
'Johnny_Cash')).limit(1).as_('b').repeat(__.out().order().by(Order.shuffle).as_('c').simple_path().from_('b').to('c')).until(__.out('sungBy').has('name',
 'Grateful_Dead')).limit(1).path().from_('a').unfold().project('song', 
'artists').by('name').by(__.c [...]
     'g_withStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX': 
[(lambda 
g:g.with_strategies(ProductiveByStrategy()).V().group().by('age').by('name'))], 
     'g_withoutStrategiesXProductiveByStrategyX_V_group_byXageX_byXnameX': 
[(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy')]).V().group().by('age').by('name'))],
 
@@ -567,8 +580,8 @@ world.gremlins = {
     
'g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXbothE_otherV_hasXage_ltX30XXX_timesX2X':
 [(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy')]).V().repeat(__.both_e().other_v().has('age',
 P.lt(30))).times(2))], 
     'g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X': 
[(lambda 
g:g.with_strategies(RepeatUnrollStrategy()).V().repeat(__.both().limit(1)).times(2))],
 
     
'g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_limitX1XX_timesX2X': 
[(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy')]).V().repeat(__.both().limit(1)).times(2))],
 
-    
'g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X':
 [(lambda 
g:g.with_strategies(RepeatUnrollStrategy()).V().order().repeat(__.both().order().aggregate('x')).times(2).limit(5))],
 
-    
'g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X':
 [(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy')]).V().order().repeat(__.both().order().aggregate('x')).times(2).limit(5))],
 
+    
'g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X':
 [(lambda 
g:g.with_strategies(RepeatUnrollStrategy()).V().order().repeat(__.both().order().aggregate('x')).times(2).limit(10))],
 
+    
'g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X':
 [(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy')]).V().order().repeat(__.both().order().aggregate('x')).times(2).limit(10))],
 
     
'g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X': 
[(lambda 
g:g.with_strategies(RepeatUnrollStrategy()).V().repeat(__.both().sample(1)).times(2))],
 
     
'g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X': 
[(lambda 
g:g.without_strategies(*[GremlinType('org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy')]).V().repeat(__.both().sample(1)).times(2))],
 
     
'g_withStrategiesXReservedKeysVerificationStrategyXthrowException_trueXX_addVXpersonX_propertyXid_123X_propertyXname_markoX':
 [(lambda 
g:g.with_strategies(ReservedKeysVerificationStrategy(throw_exception=True)).add_v('person').property('id',
 123).property('name', 'marko'))], 
@@ -970,13 +983,6 @@ world.gremlins = {
     'g_injectXa_null_bX_intersectXa_cX': [(lambda g:g.inject(['a', None, 
'b']).intersect(['a', 'c']))], 
     'g_injectXa_null_bX_intersectXa_null_cX': [(lambda g:g.inject(['a', None, 
'b']).intersect(['a', None, 'c']))], 
     'g_injectX3_threeX_intersectXfive_three_7X': [(lambda g:g.inject([3, 
'three']).intersect(['five', 'three', 7]))], 
-    'g_injectX__feature___test__nullX_lTrim': [(lambda g:g.inject('  feature', 
' one test', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').l_trim())], 
-    'g_injectX__feature___test__nullX_lTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).l_trim(Scope.local))], 
-    'g_injectX__feature__X_lTrim': [(lambda g:g.inject('  feature  
').l_trim())], 
-    'g_injectXListXa_bXX_lTrim': [(lambda g:g.inject(['a', 'b']).l_trim())], 
-    'g_injectXListX1_2XX_lTrimXlocalX': [(lambda g:g.inject([1, 
2]).l_trim(Scope.local))], 
-    'g_V_valuesXnameX_lTrim': [(lambda g:g.add_v('person').property('name', ' 
marko ').property('age', 29).as_('marko').add_v('person').property('name', '  
vadas  ').property('age', 27).as_('vadas').add_v('software').property('name', ' 
 lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh  ').property('age', 32).as_('josh').add_v('software').property('name', '  
 ripple   ').property('lang', 
'java').as_('ripple').add_v('person').property('name', 'peter').proper [...]
-    'g_V_valuesXnameX_order_fold_lTrimXlocalX': [(lambda 
g:g.add_v('person').property('name', ' marko ').property('age', 
29).as_('marko').add_v('person').property('name', '  vadas  ').property('age', 
27).as_('vadas').add_v('software').property('name', '  lop').property('lang', 
'java').as_('lop').add_v('person').property('name', 'josh  ').property('age', 
32).as_('josh').add_v('software').property('name', '   ripple   
').property('lang', 'java').as_('ripple').add_v('person').property('name [...]
     'g_injectXfeature_test_nullX_length': [(lambda g:g.inject('feature', 
'test', None).length())], 
     'g_injectXfeature_test_nullX_lengthXlocalX': [(lambda 
g:g.inject('feature', 'test', None).length(Scope.local))], 
     'g_injectXListXa_bXX_length': [(lambda g:g.inject(['a', 'b']).length())], 
@@ -986,6 +992,13 @@ world.gremlins = {
     
'g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_or_loops_isX2XX_hasXname_peterX_path_byXnameX':
 [(lambda g, 
vid1=None:g.V(vid1).repeat(__.both().simple_path()).until(__.has('name', 
'peter').or_().loops().is_(2)).has('name', 'peter').path().by('name'))], 
     
'g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX':
 [(lambda g, 
vid1=None:g.V(vid1).repeat(__.both().simple_path()).until(__.has('name', 
'peter').and_().loops().is_(3)).has('name', 'peter').path().by('name'))], 
     'g_V_emitXhasXname_markoX_or_loops_isX2XX_repeatXoutX_valuesXnameX': 
[(lambda g:g.V().emit(__.has('name', 
'marko').or_().loops().is_(2)).repeat(__.out()).values('name'))], 
+    'g_injectX__feature___test__nullX_lTrim': [(lambda g:g.inject('  feature', 
' one test', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').l_trim())], 
+    'g_injectX__feature___test__nullX_lTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).l_trim(Scope.local))], 
+    'g_injectX__feature__X_lTrim': [(lambda g:g.inject('  feature  
').l_trim())], 
+    'g_injectXListXa_bXX_lTrim': [(lambda g:g.inject(['a', 'b']).l_trim())], 
+    'g_injectXListX1_2XX_lTrimXlocalX': [(lambda g:g.inject([1, 
2]).l_trim(Scope.local))], 
+    'g_V_valuesXnameX_lTrim': [(lambda g:g.add_v('person').property('name', ' 
marko ').property('age', 29).as_('marko').add_v('person').property('name', '  
vadas  ').property('age', 27).as_('vadas').add_v('software').property('name', ' 
 lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh  ').property('age', 32).as_('josh').add_v('software').property('name', '  
 ripple   ').property('lang', 
'java').as_('ripple').add_v('person').property('name', 'peter').proper [...]
+    'g_V_valuesXnameX_order_fold_lTrimXlocalX': [(lambda 
g:g.add_v('person').property('name', ' marko ').property('age', 
29).as_('marko').add_v('person').property('name', '  vadas  ').property('age', 
27).as_('vadas').add_v('software').property('name', '  lop').property('lang', 
'java').as_('lop').add_v('person').property('name', 'josh  ').property('age', 
32).as_('josh').add_v('software').property('name', '   ripple   
').property('lang', 'java').as_('ripple').add_v('person').property('name [...]
     'g_VX1X_mapXvaluesXnameXX': [(lambda g, 
vid1=None:g.V(vid1).map(__.values('name')))], 
     'g_VX1X_outE_label_mapXlengthX': [(lambda g, 
vid1=None:g.V(vid1).out_e().label().map(__.length()))], 
     'g_VX1X_out_mapXvaluesXnameXX_mapXlengthX': [(lambda g, 
vid1=None:g.V(vid1).out().map(__.values('name')).map(__.length()))], 
@@ -1304,13 +1317,6 @@ world.gremlins = {
     'g_V_hasXageX_propertiesXage_nameX_value': [(lambda 
g:g.V().has('age').properties('age', 'name').value())], 
     'g_V_propertiesXname_age_nullX_value': [(lambda g:g.V().properties('name', 
'age', None).value())], 
     'g_V_valuesXname_age_nullX': [(lambda g:g.V().values('name', 'age', 
None))], 
-    'g_injectX__feature___test__nullX_rTrim': [(lambda g:g.inject('feature  ', 
'one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').r_trim())], 
-    'g_injectX__feature___test__nullX_rTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).r_trim(Scope.local))], 
-    'g_injectX__feature__X_rTrim': [(lambda g:g.inject('  feature  
').r_trim())], 
-    'g_injectXListXa_bXX_rTrim': [(lambda g:g.inject(['a', 'b']).r_trim())], 
-    'g_injectXListX1_2XX_rTrimXlocalX': [(lambda g:g.inject([1, 
2]).r_trim(Scope.local))], 
-    'g_V_valuesXnameX_rTrim': [(lambda g:g.add_v('person').property('name', ' 
marko ').property('age', 29).as_('marko').add_v('person').property('name', '  
vadas  ').property('age', 27).as_('vadas').add_v('software').property('name', ' 
 lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh  ').property('age', 32).as_('josh').add_v('software').property('name', '  
 ripple   ').property('lang', 
'java').as_('ripple').add_v('person').property('name', 'peter').proper [...]
-    'g_V_valuesXnameX_order_fold_rTrimXlocalX': [(lambda 
g:g.add_v('person').property('name', ' marko ').property('age', 
29).as_('marko').add_v('person').property('name', '  vadas  ').property('age', 
27).as_('vadas').add_v('software').property('name', '  lop').property('lang', 
'java').as_('lop').add_v('person').property('name', 'josh  ').property('age', 
32).as_('josh').add_v('software').property('name', '   ripple   
').property('lang', 'java').as_('ripple').add_v('person').property('name [...]
     'g_injectXthat_this_test_nullX_replaceXh_jX': [(lambda g:g.inject('that', 
'this', 'test', None).replace('h', 'j'))], 
     'g_injectXthat_this_test_nullX_fold_replaceXlocal_h_jX': [(lambda 
g:g.inject('that', 'this', 'test', None).fold().replace(Scope.local, 'h', 
'j'))], 
     'g_injectXListXa_bXcX_replaceXa_bX': [(lambda g:g.inject(['a', 
'b']).replace('a', 'b'))], 
@@ -1327,6 +1333,13 @@ world.gremlins = {
     'g_injectXnullX_reverse': [(lambda g:g.inject(None).reverse())], 
     'g_injectXbX_reverse': [(lambda g:g.inject('b').reverse())], 
     'g_injectX3_threeX_reverse': [(lambda g:g.inject([3, 
'three']).reverse())], 
+    'g_injectX__feature___test__nullX_rTrim': [(lambda g:g.inject('feature  ', 
'one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  ').r_trim())], 
+    'g_injectX__feature___test__nullX_rTrimXlocalX': [(lambda g:g.inject(['  
feature  ', ' one test ', None, '', ' ', ' abc', 'abc ', ' abc ', '  
']).r_trim(Scope.local))], 
+    'g_injectX__feature__X_rTrim': [(lambda g:g.inject('  feature  
').r_trim())], 
+    'g_injectXListXa_bXX_rTrim': [(lambda g:g.inject(['a', 'b']).r_trim())], 
+    'g_injectXListX1_2XX_rTrimXlocalX': [(lambda g:g.inject([1, 
2]).r_trim(Scope.local))], 
+    'g_V_valuesXnameX_rTrim': [(lambda g:g.add_v('person').property('name', ' 
marko ').property('age', 29).as_('marko').add_v('person').property('name', '  
vadas  ').property('age', 27).as_('vadas').add_v('software').property('name', ' 
 lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh  ').property('age', 32).as_('josh').add_v('software').property('name', '  
 ripple   ').property('lang', 
'java').as_('ripple').add_v('person').property('name', 'peter').proper [...]
+    'g_V_valuesXnameX_order_fold_rTrimXlocalX': [(lambda 
g:g.add_v('person').property('name', ' marko ').property('age', 
29).as_('marko').add_v('person').property('name', '  vadas  ').property('age', 
27).as_('vadas').add_v('software').property('name', '  lop').property('lang', 
'java').as_('lop').add_v('person').property('name', 'josh  ').property('age', 
32).as_('josh').add_v('software').property('name', '   ripple   
').property('lang', 'java').as_('ripple').add_v('person').property('name [...]
     'g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX': [(lambda g, 
vid1=None:g.V(vid1).as_('a').out('knows').as_('b').select('a', 'b'))], 
     'g_VX1X_asXaX_outXknowsX_asXbX_selectXa_bX_byXnameX': [(lambda g, 
vid1=None:g.V(vid1).as_('a').out('knows').as_('b').select('a', 
'b').by('name'))], 
     'g_VX1X_asXaX_outXknowsX_asXbX_selectXaX': [(lambda g, 
vid1=None:g.V(vid1).as_('a').out('knows').as_('b').select('a'))], 
diff --git 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/World.java 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/World.java
index 4ed0480098..3c5e909aad 100644
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/World.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/World.java
@@ -45,7 +45,8 @@ public interface World {
             "not @GraphComputerVerificationMidVNotSupported and not 
@GraphComputerVerificationElementSupported and " +
             "not @GraphComputerVerificationInjectionNotSupported and " +
             "not @GraphComputerVerificationStarGraphExceeded and not 
@GraphComputerVerificationReferenceOnly and " +
-            "not @TinkerServiceRegistry and not @InsertionOrderingRequired";
+            "not @TinkerServiceRegistry and not @InsertionOrderingRequired" +
+            "not @GraphComputerVerificationOrderingNotSupported";
 
     /**
      * Gets a {@link GraphTraversalSource} that is backed by the specified 
{@link GraphData}. For {@code null}, the
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Repeat.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Repeat.feature
index 9fbdde3ef5..51834c060c 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Repeat.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/branch/Repeat.feature
@@ -429,4 +429,183 @@ Feature: Step - repeat()
     When iterated to list
     Then the result should be unordered
       | result |
-      | marko |
\ No newline at end of file
+      | marko |
+
+  # Proper handling of empty results if repeat doesn't output traversers
+  Scenario: g_V_repeatXboth_hasXnot_productiveXX_timesX3X_constantX1X
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().repeat(__.both().has("not", "productive")).times(3).constant(1)
+      """
+    When iterated to list
+    Then the result should be empty
+
+  # Proper handling of empty results if no traverser goes into repeat
+  Scenario: g_V_hasXnot_productiveX_repeatXbothX_timesX3X_constantX1X
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().has("not", "productive").repeat(__.both()).times(3).constant(1)
+      """
+    When iterated to list
+    Then the result should be empty
+
+  # Each iteration of repeat traversal that ends in a barrier leads to BFS 
style processing
+  @InsertionOrderingRequired
+  Scenario: g_VX1_2_3X_repeatXboth_barrierX_emit_timesX2X_path
+    Given the modern graph
+    And using the parameter vid1 defined as "v[marko].id"
+    And using the parameter vid2 defined as "v[vadas].id"
+    And using the parameter vid3 defined as "v[lop].id"
+    And the traversal of
+      """
+      g.V(vid1, vid2, vid3).repeat(__.both().barrier()).emit().times(2).path()
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | p[v[marko],v[lop]] |
+      | p[v[marko],v[vadas]] |
+      | p[v[marko],v[josh]] |
+      | p[v[vadas],v[marko]] |
+      | p[v[lop],v[marko]] |
+      | p[v[lop],v[josh]] |
+      | p[v[lop],v[peter]] |
+      | p[v[marko],v[lop],v[marko]] |
+      | p[v[marko],v[lop],v[josh]] |
+      | p[v[marko],v[lop],v[peter]] |
+      | p[v[marko],v[vadas],v[marko]] |
+      | p[v[marko],v[josh],v[ripple]] |
+      | p[v[marko],v[josh],v[lop]] |
+      | p[v[marko],v[josh],v[marko]] |
+      | p[v[vadas],v[marko],v[lop]] |
+      | p[v[vadas],v[marko],v[vadas]] |
+      | p[v[vadas],v[marko],v[josh]] |
+      | p[v[lop],v[marko],v[lop]] |
+      | p[v[lop],v[marko],v[vadas]] |
+      | p[v[lop],v[marko],v[josh]] |
+      | p[v[lop],v[josh],v[ripple]] |
+      | p[v[lop],v[josh],v[lop]] |
+      | p[v[lop],v[josh],v[marko]] |
+      | p[v[lop],v[peter],v[lop]] |
+
+  # Global children should be ordered by last loop first
+  @GraphComputerVerificationOrderingNotSupported
+  Scenario: 
g_V_order_byXname_descX_repeatXboth_simplePath_order_byXname_descXX_timesX2X_path
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().order().by("name", 
Order.desc).repeat(__.both().simplePath().order().by("name", 
Order.desc)).times(2).path()
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | p[v[lop],v[marko],v[vadas]] |
+      | p[v[josh],v[marko],v[vadas]] |
+      | p[v[marko],v[josh],v[ripple]] |
+      | p[v[lop],v[josh],v[ripple]] |
+      | p[v[marko],v[lop],v[peter]] |
+      | p[v[josh],v[lop],v[peter]] |
+      | p[v[peter],v[lop],v[marko]] |
+      | p[v[josh],v[lop],v[marko]] |
+      | p[v[ripple],v[josh],v[marko]] |
+      | p[v[lop],v[josh],v[marko]] |
+      | p[v[vadas],v[marko],v[lop]] |
+      | p[v[josh],v[marko],v[lop]] |
+      | p[v[ripple],v[josh],v[lop]] |
+      | p[v[marko],v[josh],v[lop]] |
+      | p[v[vadas],v[marko],v[josh]] |
+      | p[v[lop],v[marko],v[josh]] |
+      | p[v[peter],v[lop],v[josh]] |
+      | p[v[marko],v[lop],v[josh]] |
+
+  # Nested repeat should maintain globalness
+  @GraphComputerVerificationOrderingNotSupported
+  Scenario: g_V_repeatXboth_repeatXorder_byXnameXX_timesX1XX_timesX1X
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().repeat(__.both().repeat(__.order().by("name")).times(1)).times(1)
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | v[josh] |
+      | v[josh] |
+      | v[josh] |
+      | v[lop] |
+      | v[lop] |
+      | v[lop] |
+      | v[marko] |
+      | v[marko] |
+      | v[marko] |
+      | v[peter] |
+      | v[ripple] |
+      | v[vadas] |
+
+  # Nested local inside repeat should prevent global children from parent 
repeat
+  @GraphComputerVerificationStarGraphExceeded
+  Scenario: g_V_order_byXname_descX_repeatXlocalXout_order_byXnameXXX_timesX1X
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().order().by("name", 
Order.desc).repeat(__.local(__.out().order().by("name"))).times(1)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[lop] |
+      | v[josh] |
+      | v[lop] |
+      | v[vadas] |
+      | v[lop] |
+      | v[ripple] |
+
+  # Local child traversal should be applied per loop
+  @GraphComputerVerificationStarGraphExceeded
+  Scenario: 
g_V_order_byXnameX_repeatXlocalXboth_simplePath_order_byXnameXXX_timesX2X_path
+    Given the modern graph
+    And the traversal of
+      """
+      
g.V().order().by("name").repeat(__.local(__.both().simplePath().order().by("name"))).times(2).path()
+      """
+    When iterated to list
+    Then the result should be ordered
+    | result |
+    | p[v[josh],v[lop],v[marko]] |
+    | p[v[josh],v[lop],v[peter]] |
+    | p[v[josh],v[marko],v[lop]] |
+    | p[v[josh],v[marko],v[vadas]] |
+    | p[v[lop],v[josh],v[marko]] |
+    | p[v[lop],v[josh],v[ripple]] |
+    | p[v[lop],v[marko],v[josh]] |
+    | p[v[lop],v[marko],v[vadas]] |
+    | p[v[marko],v[josh],v[lop]] |
+    | p[v[marko],v[josh],v[ripple]] |
+    | p[v[marko],v[lop],v[josh]] |
+    | p[v[marko],v[lop],v[peter]] |
+    | p[v[peter],v[lop],v[josh]] |
+    | p[v[peter],v[lop],v[marko]] |
+    | p[v[ripple],v[josh],v[lop]] |
+    | p[v[ripple],v[josh],v[marko]] |
+    | p[v[vadas],v[marko],v[josh]] |
+    | p[v[vadas],v[marko],v[lop]] |
+
+  # Branching step with global children should remain global in repeat 
traversal
+  @GraphComputerVerificationOrderingNotSupported
+  Scenario: 
g_V_repeatXunionXoutXknowsX_order_byXnameX_inXcreatedX_order_byXnameXXX_timesX1X
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().repeat(__.union(__.out("knows").order().by("name"), 
__.in("created").order().by("name"))).times(1)
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | v[josh] |
+      | v[vadas] |
+      | v[josh] |
+      | v[josh] |
+      | v[marko] |
+      | v[peter] |
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
index 172754f81a..30c1ec5b4f 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/Paths.feature
@@ -38,6 +38,7 @@ Feature: Step - paths
                   by(__.select(Pop.all, "v")).as("t").
                 filter(__.select(Pop.all, "p").count(local).as("l").
                        select(Pop.last, "t").select(Pop.all, 
"p").dedup(Scope.local).count(Scope.local).where(P.eq("l"))).
+                where("src", P.neq("tgt")).
                 select(Pop.last, "t").
                 not(__.select(Pop.all, "p").as("p").count(local).as("l").
                     select(Pop.all, 
"x").unfold().filter(select(keys).where(P.eq("t")).by(__.select("src", "tgt"))).
@@ -63,18 +64,12 @@ Feature: Step - paths
       | l[peter,lop,josh]|
       | l[vadas,marko]|
       | l[ripple,josh]|
-      | l[marko]|
-      | l[josh]|
-      | l[ripple]|
       | l[josh,ripple]|
       | l[peter,lop]|
       | l[vadas,marko,josh]|
       | l[lop,josh,ripple]|
       | l[marko,josh]|
       | l[lop,marko,vadas]|
-      | l[lop]|
-      | l[peter]|
-      | l[vadas]|
       | l[marko,josh,ripple]|
       | l[marko,vadas]|
       | l[vadas,marko,lop]|
@@ -103,11 +98,9 @@ Feature: Step - paths
     When iterated to list
     Then the result should be unordered
       | result |
-      | m[{"song":"TOMORROW IS A LONG TIME","artists":["Bob_Dylan"]}] |
-      | m[{"song":"JOHN BROWN","artists":["Bob_Dylan"]}] |
+      | m[{"song":"I WANT YOU","artists":["Bob_Dylan"]}] |
       | m[{"song":"BABY BLUE","artists":["Unknown"]}] |
       | m[{"song":"CANDYMAN","artists":["Garcia","Hunter"]}] |
       | m[{"song":"BIG RIVER","artists":["Weir","Johnny_Cash"]}] |
       | m[{"song":"TERRAPIN STATION","artists":["Garcia","Hunter"]}] |
       | m[{"song":"DRUMS","artists":["Grateful_Dead"]}] |
-
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature
index 9ca44f3f0f..0f72ca3c14 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/integrated/RepeatUnrollStrategy.feature
@@ -211,11 +211,11 @@ Feature: Step - RepeatUnrollStrategy
   # this traversal is not expected to be unrolled by the strategy but should 
have consistent semantics compared to traversal without the strategy applied
   @WithRepeatUnrollStrategy
   @GraphComputerVerificationStrategyNotSupported
-  Scenario: 
g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X
+  Scenario: 
g_withStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X
     Given the modern graph
     And the traversal of
       """
-      
g.withStrategies(RepeatUnrollStrategy).V().order().repeat(both().order().aggregate('x')).times(2).limit(5)
+      
g.withStrategies(RepeatUnrollStrategy).V().order().repeat(both().order().aggregate('x')).times(2).limit(10)
       """
     When iterated to list
     Then the result should be unordered
@@ -223,15 +223,20 @@ Feature: Step - RepeatUnrollStrategy
       | v[marko] |
       | v[marko] |
       | v[marko] |
-      | v[lop] |
-      | v[josh] |
+      | v[marko] |
+      | v[marko] |
+      | v[marko] |
+      | v[marko] |
+      | v[vadas] |
+      | v[vadas] |
+      | v[vadas] |
 
   @GraphComputerVerificationStrategyNotSupported
-  Scenario: 
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX5X
+  Scenario: 
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_aggregateXxXX_timesX2X_limitX10X
     Given the modern graph
     And the traversal of
       """
-      
g.withoutStrategies(RepeatUnrollStrategy).V().order().repeat(both().order().aggregate('x')).times(2).limit(5)
+      
g.withoutStrategies(RepeatUnrollStrategy).V().order().repeat(both().order().aggregate('x')).times(2).limit(10)
       """
     When iterated to list
     Then the result should be unordered
@@ -239,9 +244,14 @@ Feature: Step - RepeatUnrollStrategy
       | v[marko] |
       | v[marko] |
       | v[marko] |
-      | v[lop] |
-      | v[josh] |
-    
+      | v[marko] |
+      | v[marko] |
+      | v[marko] |
+      | v[marko] |
+      | v[vadas] |
+      | v[vadas] |
+      | v[vadas] |
+
   # this traversal is not expected to be unrolled by the strategy but should 
have consistent semantics compared to traversal without the strategy applied
   @WithRepeatUnrollStrategy
   @GraphComputerVerificationStrategyNotSupported
@@ -252,7 +262,7 @@ Feature: Step - RepeatUnrollStrategy
       
g.withStrategies(RepeatUnrollStrategy).V().repeat(both().sample(1)).times(2)
       """
     When iterated to list
-    Then the result should have a count of 6
+    Then the result should have a count of 1
 
   @GraphComputerVerificationStrategyNotSupported
   Scenario: 
g_withoutStrategiesXRepeatUnrollStrategyX_V_repeatXboth_sampleX1XX_timesX2X
@@ -262,4 +272,4 @@ Feature: Step - RepeatUnrollStrategy
       
g.withoutStrategies(RepeatUnrollStrategy).V().repeat(both().sample(1)).times(2)
       """
     When iterated to list
-    Then the result should have a count of 6
+    Then the result should have a count of 1

Reply via email to