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

valentyn pushed a commit to branch valentyn/datediff-fix
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit e71d355661effe92a0ac0e825b721b9ff3453685
Author: Valentyn Kahamlyk <[email protected]>
AuthorDate: Fri Nov 10 12:31:02 2023 -0800

    fix for DateDiff step to handle correclty child traversal
---
 docs/src/reference/the-traversal.asciidoc          |  2 +-
 .../process/traversal/step/map/DateDiffStep.java   |  3 ++-
 .../traversal/step/map/DateDiffStepTest.java       |  4 ++--
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 27 +++++++++++-----------
 gremlin-go/driver/cucumber/gremlin.go              | 27 +++++++++++-----------
 .../gremlin-javascript/test/cucumber/gremlin.js    | 27 +++++++++++-----------
 gremlin-python/src/main/python/radish/gremlin.py   | 27 +++++++++++-----------
 .../gremlin/test/features/map/DateDiff.feature     | 16 +++++++++++--
 8 files changed, 75 insertions(+), 58 deletions(-)

diff --git a/docs/src/reference/the-traversal.asciidoc 
b/docs/src/reference/the-traversal.asciidoc
index 31a3430938..5de78ef6ca 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -1372,7 +1372,7 @@ If the incoming traverser is not a Date, then an 
`IllegalArgumentException` will
 
 [gremlin-groovy,modern]
 ----
-g.inject("2023-08-02T00:00:00Z").asDate().dateDiff(inject("2023-08-03T00:00:00Z").asDate())
 <1>
+g.inject("2023-08-02T00:00:00Z").asDate().dateDiff(constant("2023-08-03T00:00:00Z").asDate())
 <1>
 ----
 
 <1> Find difference between two dates
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
index b97b70cb96..184d72f582 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java
@@ -22,6 +22,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.Collections;
@@ -57,7 +58,7 @@ public final class DateDiffStep<S> extends ScalarMapStep<S, 
Long> implements Tra
                     String.format("DateDiff can only take Date as argument, 
encountered %s", object.getClass()));
 
         final Date otherDate = value != null ? value :
-                dateTraversal != null && dateTraversal.hasNext() ? 
dateTraversal.next() : null;
+                dateTraversal != null ? TraversalUtil.apply(traverser, 
dateTraversal) : null;
 
         // let's not throw exception and assume null date == 0
         final long otherDateMs = otherDate == null ? 0 : otherDate.getTime();
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
index 0dd1ecefcb..0cffa601ba 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStepTest.java
@@ -75,14 +75,14 @@ public class DateDiffStepTest extends StepTest {
         cal.add(Calendar.DAY_OF_MONTH, 7);
         final Date other = cal.getTime();
 
-        assertEquals(-604800L, (long) 
__.__(now).dateDiff(__.__(other)).next());
+        assertEquals(-604800L, (long) 
__.__(now).dateDiff(__.constant(other)).next());
     }
 
     @Test
     public void shouldHandleNullTraversalParam() {
         final Date now = new Date();
 
-        assertEquals(now.getTime() / 1000, (long) 
__.__(now).dateDiff(__.__()).next());
+        assertEquals(now.getTime() / 1000, (long) 
__.__(now).dateDiff(__.constant(null)).next());
     }
 
     @Test
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index c09c8cb3aa..48f58f89a7 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -641,7 +641,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_injectXdatetimeXstrXX_dateAddXsecond_20X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1690934400000)).DateAdd(DT.Second,20)}},
 
                {"g_injectXdatetimeXstrXX_dateAddXday_11X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1693958400000)).DateAdd(DT.Day,11)}},
 
                {"g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1690934400000)).DateDiff(DateTimeOffset.FromUnixTimeMilliseconds(1691539200000))}},
 
-               {"g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1691452800000)).DateDiff(__.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1690848000000)))}},
 
+               {"g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1691452800000)).DateDiff(__.Constant<object>(DateTimeOffset.FromUnixTimeMilliseconds(1690848000000)))}},
 
+               {"g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1691452800000)).DateDiff(__.Inject(DateTimeOffset.FromUnixTimeMilliseconds(1696982400000)))}},
 
                {"g_injectXnullX_differenceXinjectX1XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null).Difference(__.Inject(1))}}, 
                {"g_V_valuesXnameX_differenceXV_foldX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name").Difference(__.V().Fold())}}, 
                {"g_V_fold_differenceXconstantXnullXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Fold().Difference(__.Constant<object>(null))}}, 
@@ -738,12 +739,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_injectXa_null_bX_intersectXa_cX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Intersect(p["xx2"])}}, 
                {"g_injectXa_null_bX_intersectXa_null_cX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Intersect(p["xx2"])}}, 
                {"g_injectX3_threeX_intersectXfive_three_7X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Intersect(p["xx2"])}}, 
-               {"g_injectX__feature___test__nullX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("  feature"," one test",null,""," ").LTrim()}}, 
-               {"g_injectX__feature__X_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject("  feature  ").LTrim()}}, 
-               {"g_injectXListXa_bXX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).LTrim()}}, 
-               {"g_injectXListX1_2XX_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).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("lang"," [...]
-               {"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","   ripple   
") [...]
                {"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(p["xx1"]).Length()}}, 
@@ -753,6 +748,12 @@ 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,""," ").LTrim()}}, 
+               {"g_injectX__feature__X_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject("  feature  ").LTrim()}}, 
+               {"g_injectXListXa_bXX_lTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).LTrim()}}, 
+               {"g_injectXListX1_2XX_lTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).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("lang"," [...]
+               {"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","   ripple   
") [...]
                {"g_VX1X_mapXnameX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V(p["vid1"]).Map<object>((IFunction) p["l1"])}}, 
                {"g_VX1X_outE_label_mapXlengthX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).OutE().Label().Map<object>((IFunction) p["l1"])}}, 
                {"g_VX1X_out_mapXnameX_mapXlengthX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Out().Map<object>((IFunction) 
p["l1"]).Map<object>((IFunction) p["l2"])}}, 
@@ -1055,12 +1056,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,""," ").RTrim()}}, 
-               {"g_injectX__feature__X_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject("  feature  ").RTrim()}}, 
-               {"g_injectXListXa_bXX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).RTrim()}}, 
-               {"g_injectXListX1_2XX_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).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("lang"," [...]
-               {"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","   ripple   
") [...]
                {"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(p["xx1"]).Replace("a","b")}}, 
@@ -1077,6 +1072,12 @@ 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("b").Reverse()}}, 
                {"g_injectX3_threeX_reverse", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Reverse()}}, 
+               {"g_injectX__feature___test__nullX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>("feature  ","one test ",null,""," ").RTrim()}}, 
+               {"g_injectX__feature__X_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject("  feature  ").RTrim()}}, 
+               {"g_injectXListXa_bXX_rTrim", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).RTrim()}}, 
+               {"g_injectXListX1_2XX_rTrimXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).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("lang"," [...]
+               {"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","   ripple   
") [...]
                {"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 b0a27b0db5..0ead668eda 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -612,7 +612,8 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_injectXdatetimeXstrXX_dateAddXsecond_20X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(time.UnixMilli(1690934400000)).DateAdd(gremlingo.DT.Second, 20)}}, 
     "g_injectXdatetimeXstrXX_dateAddXday_11X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(time.UnixMilli(1693958400000)).DateAdd(gremlingo.DT.Day, 11)}}, 
     "g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(time.UnixMilli(1690934400000)).DateDiff(time.UnixMilli(1691539200000))}},
 
-    "g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(time.UnixMilli(1691452800000)).DateDiff(gremlingo.T__.Inject(time.UnixMilli(1690848000000)))}},
 
+    "g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(time.UnixMilli(1691452800000)).DateDiff(gremlingo.T__.Constant(time.UnixMilli(1690848000000)))}},
 
+    "g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(time.UnixMilli(1691452800000)).DateDiff(gremlingo.T__.Inject(time.UnixMilli(1696982400000)))}},
 
     "g_injectXnullX_differenceXinjectX1XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(nil).Difference(gremlingo.T__.Inject(1))}}, 
     "g_V_valuesXnameX_differenceXV_foldX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("name").Difference(gremlingo.T__.V().Fold())}}, 
     "g_V_fold_differenceXconstantXnullXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Fold().Difference(gremlingo.T__.Constant(nil))}}, 
@@ -709,12 +710,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(p["xx1"]).Intersect(p["xx2"])}}, 
     "g_injectXa_null_bX_intersectXa_null_cX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(p["xx1"]).Intersect(p["xx2"])}}, 
     "g_injectX3_threeX_intersectXfive_three_7X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(p["xx1"]).Intersect(p["xx2"])}}, 
-    "g_injectX__feature___test__nullX_lTrim": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("  feature", " one test", nil, "", " 
").LTrim()}}, 
-    "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(p["xx1"]).LTrim()}}, 
-    "g_injectXListX1_2XX_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(p["xx1"]).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(p["xx1"]).Length()}}, 
@@ -724,6 +719,12 @@ 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, "", " 
").LTrim()}}, 
+    "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(p["xx1"]).LTrim()}}, 
+    "g_injectXListX1_2XX_lTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(p["xx1"]).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_mapXnameX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Map(p["l1"])}}, 
     "g_VX1X_outE_label_mapXlengthX": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE().Label().Map(p["l1"])}}, 
     "g_VX1X_out_mapXnameX_mapXlengthX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Map(p["l1"]).Map(p["l2"])}}, 
@@ -1026,12 +1027,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, "", " 
").RTrim()}}, 
-    "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(p["xx1"]).RTrim()}}, 
-    "g_injectXListX1_2XX_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(p["xx1"]).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(p["xx1"]).Replace("a", "b")}}, 
@@ -1048,6 +1043,12 @@ 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(p["xx1"]).Reverse()}}, 
+    "g_injectX__feature___test__nullX_rTrim": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject("feature  ", "one test ", nil, "", " 
").RTrim()}}, 
+    "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(p["xx1"]).RTrim()}}, 
+    "g_injectXListX1_2XX_rTrimXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(p["xx1"]).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 a450a1421e..9508efd8d4 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
@@ -632,7 +632,8 @@ const gremlins = {
     g_injectXdatetimeXstrXX_dateAddXsecond_20X: [function({g}) { return 
g.inject(new Date(1690934400000)).dateAdd(DT.second,20) }], 
     g_injectXdatetimeXstrXX_dateAddXday_11X: [function({g}) { return 
g.inject(new Date(1693958400000)).dateAdd(DT.day,11) }], 
     g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX: [function({g}) { return 
g.inject(new Date(1690934400000)).dateDiff(new Date(1691539200000)) }], 
-    g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX: [function({g}) 
{ return g.inject(new Date(1691452800000)).dateDiff(__.inject(new 
Date(1690848000000))) }], 
+    g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX: 
[function({g}) { return g.inject(new 
Date(1691452800000)).dateDiff(__.constant(new Date(1690848000000))) }], 
+    g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX: [function({g}) 
{ return g.inject(new Date(1691452800000)).dateDiff(__.inject(new 
Date(1696982400000))) }], 
     g_injectXnullX_differenceXinjectX1XX: [function({g}) { return 
g.inject(null).difference(__.inject(1)) }], 
     g_V_valuesXnameX_differenceXV_foldX: [function({g}) { return 
g.V().values("name").difference(__.V().fold()) }], 
     g_V_fold_differenceXconstantXnullXX: [function({g}) { return 
g.V().fold().difference(__.constant(null)) }], 
@@ -729,12 +730,6 @@ const gremlins = {
     g_injectXa_null_bX_intersectXa_cX: [function({g, xx1, xx2}) { return 
g.inject(xx1).intersect(xx2) }], 
     g_injectXa_null_bX_intersectXa_null_cX: [function({g, xx1, xx2}) { return 
g.inject(xx1).intersect(xx2) }], 
     g_injectX3_threeX_intersectXfive_three_7X: [function({g, xx1, xx2}) { 
return g.inject(xx1).intersect(xx2) }], 
-    g_injectX__feature___test__nullX_lTrim: [function({g}) { return g.inject(" 
 feature"," one test",null,""," ").lTrim() }], 
-    g_injectX__feature__X_lTrim: [function({g}) { return g.inject("  feature  
").lTrim() }], 
-    g_injectXListXa_bXX_lTrim: [function({g, xx1}) { return 
g.inject(xx1).lTrim() }], 
-    g_injectXListX1_2XX_lTrimXlocalX: [function({g, xx1}) { return 
g.inject(xx1).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").property("age",35
 [...]
-    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","peter") 
[...]
     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, xx1}) { return 
g.inject(xx1).length() }], 
@@ -744,6 +739,12 @@ 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,""," ").lTrim() }], 
+    g_injectX__feature__X_lTrim: [function({g}) { return g.inject("  feature  
").lTrim() }], 
+    g_injectXListXa_bXX_lTrim: [function({g, xx1}) { return 
g.inject(xx1).lTrim() }], 
+    g_injectXListX1_2XX_lTrimXlocalX: [function({g, xx1}) { return 
g.inject(xx1).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").property("age",35
 [...]
+    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","peter") 
[...]
     g_VX1X_mapXnameX: [function({g, l1, vid1}) { return g.V(vid1).map(l1) }], 
     g_VX1X_outE_label_mapXlengthX: [function({g, l1, vid1}) { return 
g.V(vid1).outE().label().map(l1) }], 
     g_VX1X_out_mapXnameX_mapXlengthX: [function({g, l1, l2, vid1}) { return 
g.V(vid1).out().map(l1).map(l2) }], 
@@ -1046,12 +1047,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,""," ").rTrim() }], 
-    g_injectX__feature__X_rTrim: [function({g}) { return g.inject("  feature  
").rTrim() }], 
-    g_injectXListXa_bXX_rTrim: [function({g, xx1}) { return 
g.inject(xx1).rTrim() }], 
-    g_injectXListX1_2XX_rTrimXlocalX: [function({g, xx1}) { return 
g.inject(xx1).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").property("age",35
 [...]
-    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","peter") 
[...]
     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, xx1}) { return 
g.inject(xx1).replace("a","b") }], 
@@ -1068,6 +1063,12 @@ 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, xx1}) { return 
g.inject(xx1).reverse() }], 
+    g_injectX__feature___test__nullX_rTrim: [function({g}) { return 
g.inject("feature  ","one test ",null,""," ").rTrim() }], 
+    g_injectX__feature__X_rTrim: [function({g}) { return g.inject("  feature  
").rTrim() }], 
+    g_injectXListXa_bXX_rTrim: [function({g, xx1}) { return 
g.inject(xx1).rTrim() }], 
+    g_injectXListX1_2XX_rTrimXlocalX: [function({g, xx1}) { return 
g.inject(xx1).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").property("age",35
 [...]
+    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","peter") 
[...]
     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 9867df4f1f..e5fdb1a553 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -614,7 +614,8 @@ world.gremlins = {
     'g_injectXdatetimeXstrXX_dateAddXsecond_20X': [(lambda 
g:g.inject(datetime.datetime.utcfromtimestamp(1690934400000 / 
1000.0)).date_add(DT.second,20))], 
     'g_injectXdatetimeXstrXX_dateAddXday_11X': [(lambda 
g:g.inject(datetime.datetime.utcfromtimestamp(1693958400000 / 
1000.0)).date_add(DT.day,11))], 
     'g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX': [(lambda 
g:g.inject(datetime.datetime.utcfromtimestamp(1690934400000 / 
1000.0)).date_diff(datetime.datetime.utcfromtimestamp(1691539200000 / 
1000.0)))], 
-    'g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.utcfromtimestamp(1691452800000 / 
1000.0)).date_diff(__.inject(datetime.datetime.utcfromtimestamp(1690848000000 / 
1000.0))))], 
+    'g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.utcfromtimestamp(1691452800000 / 
1000.0)).date_diff(__.constant(datetime.datetime.utcfromtimestamp(1690848000000 
/ 1000.0))))], 
+    'g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.utcfromtimestamp(1691452800000 / 
1000.0)).date_diff(__.inject(datetime.datetime.utcfromtimestamp(1696982400000 / 
1000.0))))], 
     'g_injectXnullX_differenceXinjectX1XX': [(lambda 
g:g.inject(None).difference(__.inject(1)))], 
     'g_V_valuesXnameX_differenceXV_foldX': [(lambda 
g:g.V().name.difference(__.V().fold()))], 
     'g_V_fold_differenceXconstantXnullXX': [(lambda 
g:g.V().fold().difference(__.constant(None)))], 
@@ -711,12 +712,6 @@ world.gremlins = {
     'g_injectXa_null_bX_intersectXa_cX': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).intersect(xx2))], 
     'g_injectXa_null_bX_intersectXa_null_cX': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).intersect(xx2))], 
     'g_injectX3_threeX_intersectXfive_three_7X': [(lambda g, 
xx1=None,xx2=None:g.inject(xx1).intersect(xx2))], 
-    'g_injectX__feature___test__nullX_lTrim': [(lambda g:g.inject('  
feature',' one test',None,'',' ').lTrim())], 
-    'g_injectX__feature__X_lTrim': [(lambda g:g.inject('  feature  
').lTrim())], 
-    'g_injectXListXa_bXX_lTrim': [(lambda g, xx1=None:g.inject(xx1).lTrim())], 
-    'g_injectXListX1_2XX_lTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).lTrim(Scope.local))], 
-    'g_V_valuesXnameX_lTrim': [(lambda g: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').property('age',35).as_(
 [...]
-    'g_V_valuesXnameX_order_fold_lTrimXlocalX': [(lambda 
g: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').prope
 [...]
     '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, 
xx1=None:g.inject(xx1).length())], 
@@ -726,6 +721,12 @@ world.gremlins = {
     
'g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_or_loops_isX2XX_hasXname_peterX_path_byXnameX':
 [(lambda g, 
vid1=None: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':
 [(lambda g, 
vid1=None: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': 
[(lambda 
g:g.V().emit(__.has('name','marko').or_().loops().is_(2)).repeat(__.out()).name)],
 
+    'g_injectX__feature___test__nullX_lTrim': [(lambda g:g.inject('  
feature',' one test',None,'',' ').lTrim())], 
+    'g_injectX__feature__X_lTrim': [(lambda g:g.inject('  feature  
').lTrim())], 
+    'g_injectXListXa_bXX_lTrim': [(lambda g, xx1=None:g.inject(xx1).lTrim())], 
+    'g_injectXListX1_2XX_lTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).lTrim(Scope.local))], 
+    'g_V_valuesXnameX_lTrim': [(lambda g: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').property('age',35).as_(
 [...]
+    'g_V_valuesXnameX_order_fold_lTrimXlocalX': [(lambda 
g: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').prope
 [...]
     'g_VX1X_mapXnameX': [(lambda g, l1=None,vid1=None:g.V(vid1).map(l1))], 
     'g_VX1X_outE_label_mapXlengthX': [(lambda g, 
l1=None,vid1=None:g.V(vid1).outE().label().map(l1))], 
     'g_VX1X_out_mapXnameX_mapXlengthX': [(lambda g, 
l1=None,l2=None,vid1=None:g.V(vid1).out().map(l1).map(l2))], 
@@ -1028,12 +1029,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,'',' ').rTrim())], 
-    'g_injectX__feature__X_rTrim': [(lambda g:g.inject('  feature  
').rTrim())], 
-    'g_injectXListXa_bXX_rTrim': [(lambda g, xx1=None:g.inject(xx1).rTrim())], 
-    'g_injectXListX1_2XX_rTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).rTrim(Scope.local))], 
-    'g_V_valuesXnameX_rTrim': [(lambda g: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').property('age',35).as_(
 [...]
-    'g_V_valuesXnameX_order_fold_rTrimXlocalX': [(lambda 
g: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').prope
 [...]
     '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, 
xx1=None:g.inject(xx1).replace('a','b'))], 
@@ -1050,6 +1045,12 @@ 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, 
xx1=None:g.inject(xx1).reverse())], 
+    'g_injectX__feature___test__nullX_rTrim': [(lambda g:g.inject('feature  
','one test ',None,'',' ').rTrim())], 
+    'g_injectX__feature__X_rTrim': [(lambda g:g.inject('  feature  
').rTrim())], 
+    'g_injectXListXa_bXX_rTrim': [(lambda g, xx1=None:g.inject(xx1).rTrim())], 
+    'g_injectXListX1_2XX_rTrimXlocalX': [(lambda g, 
xx1=None:g.inject(xx1).rTrim(Scope.local))], 
+    'g_V_valuesXnameX_rTrim': [(lambda g: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').property('age',35).as_(
 [...]
+    'g_V_valuesXnameX_order_fold_rTrimXlocalX': [(lambda 
g: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').prope
 [...]
     '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/resources/org/apache/tinkerpop/gremlin/test/features/map/DateDiff.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/DateDiff.feature
index 0f49b8e094..c931cd263f 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/DateDiff.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/DateDiff.feature
@@ -30,14 +30,26 @@ Feature: Step - dateDiff()
       | result |
       | d[-604800].l |
 
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX
+    Given the empty graph
+    And the traversal of
+      """
+      
g.inject(datetime('2023-08-08T00:00:00Z')).dateDiff(constant(datetime('2023-08-01T00:00:00Z')))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[604800].l |
+
   @GraphComputerVerificationInjectionNotSupported
   Scenario: g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX
     Given the empty graph
     And the traversal of
       """
-      
g.inject(datetime('2023-08-08T00:00:00Z')).dateDiff(inject(datetime('2023-08-01T00:00:00Z')))
+      
g.inject(datetime('2023-08-08T00:00:00Z')).dateDiff(inject(datetime('2023-10-11T00:00:00Z')))
       """
     When iterated to list
     Then the result should be unordered
       | result |
-      | d[604800].l |
\ No newline at end of file
+      | d[0].l |
\ No newline at end of file

Reply via email to