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

Cole-Greer pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit d23736b409db8850e993fa9e7b3980d0896ade84
Merge: b89e00b901 c81f7c343f
Author: Cole Greer <[email protected]>
AuthorDate: Thu Jul 23 13:51:09 2026 -0700

    Merge branch '3.7-dev' into 3.8-dev

 CHANGELOG.asciidoc                                 |  2 ++
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  6 ++++
 gremlin-go/driver/cucumber/gremlin.go              |  1 +
 gremlin-go/driver/graphBinary.go                   |  2 +-
 gremlin-go/driver/graphBinary_test.go              | 28 ++++++++++++++++
 .../gremlin-javascript/test/cucumber/gremlin.js    |  1 +
 .../gremlin_python/structure/io/graphbinaryV1.py   | 18 ++++-------
 .../src/main/python/tests/feature/gremlin.py       |  1 +
 .../python/tests/unit/io/test_graphbinaryV1.py     | 37 ++++++++++++++++++++++
 .../test/features/sideEffect/Inject.feature        | 16 +++++++++-
 10 files changed, 99 insertions(+), 13 deletions(-)

diff --cc gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 7f815650d1,ba2f9ab357..fc64d89fe9
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@@ -2014,73 -1516,42 +2014,79 @@@ namespace Gremlin.Net.IntegrationTest.G
                 {"g_V_outXcreatedX_name_groupCountXaX_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Out("created").Values<object>("name").GroupCount("a").Cap<object>("a")}},
 
                 {"g_V_repeatXout_groupCountXaX_byXnameXX_timesX2X_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Repeat(__.Out().GroupCount("a").By("name")).Times(2).Cap<object>("a")}},
 
                 
{"g_V_both_groupCountXaX_byXlabelX_asXbX_barrier_whereXselectXaX_selectXsoftwareX_isXgtX2XXX_selectXbX_name",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Both().GroupCount("a").By(T.Label).As("b").Barrier().Where(__.Select<object>("a").Select<object>("software").Is(P.Gt(2))).Select<object>("b").Values<object>("name")}},
 
 -               
{"g_V_unionXoutXknowsX__outXcreatedX_inXcreatedXX_groupCount_selectXvaluesX_unfold_sum",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Union<object>(__.Out("knows"),__.Out("created").In("created")).GroupCount<object>().Select<object>(Column.Values).Unfold<object>().Sum<object>()}},
 
 +               
{"g_V_unionXoutXknowsX__outXcreatedX_inXcreatedXX_groupCount_selectXvaluesX_unfold_sum",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Union<object>(__.Out("knows"), 
__.Out("created").In("created")).GroupCount<object>().Select<object>(Column.Values).Unfold<object>().Sum<object>()}},
 
                 {"g_V_hasXnoX_groupCount", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Has("no").GroupCount<object>()}}, 
                 {"g_V_hasXnoX_groupCountXaX_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("no").GroupCount("a").Cap<object>("a")}}, 
 -               
{"g_V_unionXrepeatXoutX_timesX2X_groupCountXmX_byXlangXX__repeatXinX_timesX2X_groupCountXmX_byXnameXX_capXmX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Union<object>(__.Repeat(__.Out()).Times(2).GroupCount("m").By("lang"),__.Repeat(__.In()).Times(2).GroupCount("m").By("name")).Cap<object>("m")}},
 
 +               
{"g_V_unionXrepeatXoutX_timesX2X_groupCountXmX_byXlangXX__repeatXinX_timesX2X_groupCountXmX_byXnameXX_capXmX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Union<object>(__.Repeat(__.Out()).Times(2).GroupCount("m").By("lang"), 
__.Repeat(__.In()).Times(2).GroupCount("m").By("name")).Cap<object>("m")}}, 
                 {"g_V_outXcreatedX_groupCountXxX_capXxX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out("created").GroupCount("x").Cap<object>("x")}}, 
                 {"g_V_groupCount_byXbothE_countX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().GroupCount<object>().By(__.BothE().Count())}}, 
 -               
{"g_V_both_groupCountXaX_out_capXaX_selectXkeysX_unfold_both_groupCountXaX_capXaX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Both().GroupCount("a").Out().Cap<object>("a").Select<object>(Column.Keys).Unfold<object>().Both().GroupCount("a").Cap<object>("a")}},
 
 -               
{"g_V_hasXperson_name_markoX_bothXknowsX_groupCount_byXvaluesXnameX_foldX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Has("person","name","marko").Both("knows").GroupCount<object>().By(__.Values<object>("name").Fold())}},
 
 -               {"g_VX1X_out_injectXv2X_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Out().Inject((Vertex) 
p["v2"]).Values<object>("name")}}, 
 -               {"g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).Out().Values<object>("name").Inject("daniel").As("a").Map<object>((IFunction)
 p["l1"]).Path()}}, 
 -               {"g_VX1X_injectXg_VX4XX_out_name", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Inject((Vertex) 
p["v2"]).Out().Values<object>("name")}}, 
 -               {"g_injectXnull_1_3_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null,1,3,null)}}, 
 -               
{"g_injectX10_20_null_20_10_10X_groupCountXxX_dedup_asXyX_projectXa_bX_by_byXselectXxX_selectXselectXyXXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(10,20,null,20,10,10).GroupCount("x").Dedup().As("y").Project<object>("a","b").By().By(__.Select<object>("x").Select<object>(__.Select<object>("y")))}},
 
 -               {"g_injectXname_marko_age_nullX_selectXname_ageX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"]).Select<object>("name","age")}}, 
 -               {"g_injectXnull_nullX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Inject<object>(null,null)}}, 
 +               
{"g_V_both_localXgroupCountXaXX_out_capXaX_selectXkeysX_unfold_both_localXgroupCountXaXX_capXaX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Both().Local<object>(__.GroupCount("a")).Out().Cap<object>("a").Select<object>(Column.Keys).Unfold<object>().Both().Local<object>(__.GroupCount("a")).Cap<object>("a")}},
 
 +               
{"g_V_hasXperson_name_markoX_bothXknowsX_groupCount_byXvaluesXnameX_foldX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("person", "name", 
"marko").Both("knows").GroupCount<object>().By(__.Values<object>("name").Fold())}},
 
 +               {"g_V_outXcreatedX_groupCount_byXnameX_byXageX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out("created").GroupCount<object>().By("name").By("age")}}, 
 +               {"g_V_outXcreatedX_groupCountXxX_byXnameX_byXageX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out("created").GroupCount("x").By("name").By("age")}}, 
 +               {"g_V_groupCountXaX_selectXaX_countXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().GroupCount("a").Select<object>("a").Count(Scope.Local)}}, 
 +               {"g_V_localXgroupCountXaX_selectXaX_countXlocalXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Local<object>(__.GroupCount("a").Select<object>("a").Count(Scope.Local))}},
 
 +               {"g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).Out().Values<object>("name").Inject("daniel").As("a").Map<object>(__.Length()).Path()}},
 
 +               {"g_injectXnull_1_3_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null, 1, 3, null)}}, 
 +               
{"g_injectX10_20_null_20_10_10X_groupCountXxX_dedup_asXyX_projectXa_bX_by_byXselectXxX_selectXselectXyXXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(10, 20, null, 20, 10, 
10).GroupCount("x").Dedup().As("y").Project<object>("a", 
"b").By().By(__.Select<object>("x").Select<object>(__.Select<object>("y")))}}, 
 +               {"g_injectXname_marko_age_nullX_selectXname_ageX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new Dictionary<object, object> {{ "name", "marko" }, 
{ "age", null }}).Select<object>("name", "age")}}, 
 +               {"g_injectXnull_nullX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(null, 
null)}}, 
                 {"g_injectXnullX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(null)}}, 
                 {"g_inject", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>()}}, 
 -               {"g_VX1X_valuesXageX_injectXnull_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["xx1"]).Values<object>("age").Inject(null,null)}}, 
 +               {"g_VX1X_valuesXageX_injectXnull_nullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["xx1"]).Values<object>("age").Inject(null, null)}}, 
                 {"g_VX1X_valuesXageX_injectXnullX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["xx1"]).Values<object>("age").Inject(null)}}, 
                 {"g_VX1X_valuesXageX_inject", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["xx1"]).Values<object>("age").Inject()}}, 
++<<<<<<< HEAD
 +               {"g_injectXnull_1_3_nullX_asXaX_selectXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null, 1, 3, null).As("a").Select<object>("a")}}, 
 +               {"g_injectX1_3X_injectX100_300X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(1, 3).Inject(100, 300)}}, 
 +               {"g_injectX1_3_100_300X_list", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new List<object> { 1, 3, 100, 300 })}}, 
 +               {"g_injectX1_3_100_300X_set", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(new HashSet<object> { 1, 3, 100, 300 })}}, 
 +               {"g_injectX1_1X_set", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new 
HashSet<object> { 1, 1 })}}, 
++=======
+                {"g_injectXnull_1_3_nullX_asXaX_selectXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null,1,3,null).As("a").Select<object>("a")}}, 
+                {"g_injectX1_3lX_injectX100_300X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(1,3).Inject(100,300)}}, 
+                {"g_injectXbigintBoundaryValuesX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject(p["xx1"],p["xx2"],p["xx3"])}}, 
++>>>>>>> 3.7-dev
                 {"g_io_readXkryoX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Io<object>("data/tinkerpop-modern.kryo").Read(), (g,p) =>g.V(), (g,p) 
=>g.E()}}, 
 -               {"g_io_read_withXreader_gryoX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Io<object>("data/tinkerpop-modern.kryo").With("~tinkerpop.io.reader","gryo").Read(),
 (g,p) =>g.V(), (g,p) =>g.E()}}, 
 +               {"g_io_read_withXreader_gryoX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Io<object>("data/tinkerpop-modern.kryo").With(IO.Reader, 
IO.Gryo).Read(), (g,p) =>g.V(), (g,p) =>g.E()}}, 
                 {"g_io_readXgraphsonX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Io<object>("data/tinkerpop-modern.json").Read(), (g,p) =>g.V(), (g,p) 
=>g.E()}}, 
 -               {"g_io_read_withXreader_graphsonX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Io<object>("data/tinkerpop-modern.json").With("~tinkerpop.io.reader","graphson").Read(),
 (g,p) =>g.V(), (g,p) =>g.E()}}, 
 +               {"g_io_read_withXreader_graphsonX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Io<object>("data/tinkerpop-modern.json").With(IO.Reader, 
IO.GraphSON).Read(), (g,p) =>g.V(), (g,p) =>g.E()}}, 
                 {"g_io_readXgraphmlX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Io<object>("data/tinkerpop-modern.xml").Read(), (g,p) =>g.V(), (g,p) 
=>g.E()}}, 
 -               {"g_io_read_withXreader_graphmlX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Io<object>("data/tinkerpop-modern.xml").With("~tinkerpop.io.reader","graphml").Read(),
 (g,p) =>g.V(), (g,p) =>g.E()}}, 
 +               {"g_io_read_withXreader_graphmlX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Io<object>("data/tinkerpop-modern.xml").With(IO.Reader, 
IO.GraphML).Read(), (g,p) =>g.V(), (g,p) =>g.E()}}, 
 +               {"g_withSackX127bX_injectX1bX_sackXsumX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((sbyte) 127).Inject<object>((sbyte) 
1).Sack(Operator.Sum).Sack<object>()}}, 
 +               {"g_withSackX32767sX_injectX1sX_sackXsumX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) 32767).Inject<object>((short) 
1).Sack(Operator.Sum).Sack<object>()}}, 
 +               {"g_withSackX2147483647iX_injectX1iX_sackXsumX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(2147483647).Inject<object>(1).Sack(Operator.Sum).Sack<object>()}}, 
 +               
{"g_withSackX1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXsumX_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(1.7976931348623157e+308d).Inject<object>(1.7976931348623157e+308d).Sack(Operator.Sum).Sack<object>()}},
 
 +               {"g_withSackX_128bX_injectX1bX_sackXminusX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) -128).Inject<object>((short) 
1).Sack(Operator.Minus).Sack<object>()}}, 
 +               {"g_withSackX_32768sX_injectX1sX_sackXminusX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) -32768).Inject<object>((short) 
1).Sack(Operator.Minus).Sack<object>()}}, 
 +               {"g_withSackX_2147483648iX_injectX1iX_sackXminusX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(-2147483648).Inject<object>(1).Sack(Operator.Minus).Sack<object>()}},
 
 +               
{"g_withSackX_1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXminusX_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(-1.7976931348623157e+308d).Inject<object>(1.7976931348623157e+308d).Sack(Operator.Minus).Sack<object>()}},
 
 +               {"g_withSackX127bX_injectX2bX_sackXmultX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((sbyte) 127).Inject<object>((sbyte) 
2).Sack(Operator.Mult).Sack<object>()}}, 
 +               {"g_withSackX32767sX_injectX2sX_sackXmultX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) 32767).Inject<object>((short) 
2).Sack(Operator.Mult).Sack<object>()}}, 
 +               {"g_withSackX2147483647iX_injectX2iX_sackXmultX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(2147483647).Inject<object>(2).Sack(Operator.Mult).Sack<object>()}},
 
 +               
{"g_withSackX1_7976931348623157E_308dX_injectX2dX_sackXmultX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(1.7976931348623157e+308d).Inject<object>(2d).Sack(Operator.Mult).Sack<object>()}},
 
 +               {"g_withSackX127bX_injectX0_5fX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((sbyte) 
127).Inject<object>(0.5f).Sack(Operator.Div).Sack<object>()}}, 
 +               {"g_withSackX32767sX_injectX0_5fX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) 
32767).Inject<object>(0.5f).Sack(Operator.Div).Sack<object>()}}, 
 +               {"g_withSackX2147483647iX_injectX0_5fX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(2147483647).Inject<object>(0.5f).Sack(Operator.Div).Sack<object>()}},
 
 +               
{"g_withSackX1_7976931348623157E_308dX_injectX0_5dX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(1.7976931348623157e+308d).Inject<object>(0.5d).Sack(Operator.Div).Sack<object>()}},
 
 +               {"g_withSackX_128bX_injectX_1bX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) -128).Inject<object>((short) 
-1).Sack(Operator.Div).Sack<object>()}}, 
 +               {"g_withSackX_32768sX_injectX_1sX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack((short) -32768).Inject<object>((short) 
-1).Sack(Operator.Div).Sack<object>()}}, 
 +               {"g_withSackX_2147483648iX_injectX_1iX_sackXdivX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(-2147483648).Inject<object>(-1).Sack(Operator.Div).Sack<object>()}},
 
                 {"g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack("hello").V().OutE().Sack(Operator.Assign).By(T.Label).InV().Sack<object>()}},
 
 -               {"g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(0.0).V().OutE().Sack(Operator.Sum).By("weight").InV().Sack<object>().Sum<object>()}},
 
 -               
{"g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(0.0).V().Repeat(__.OutE().Sack(Operator.Sum).By("weight").InV()).Times(2).Sack<object>()}},
 
 -               
{"g_withBulkXfalseX_withSackX1_sumX_VX1X_localXoutEXknowsX_barrierXnormSackX_inVX_inXknowsX_barrier_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithBulk(false).WithSack(1.0,Operator.Sum).V(p["vid1"]).Local<object>(__.OutE("knows").Barrier(Barrier.NormSack).InV()).In("knows").Barrier().Sack<object>()}},
 
 -               {"g_withBulkXfalseX_withSackX1_sumX_V_out_barrier_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithBulk(false).WithSack(1,Operator.Sum).V().Out().Barrier().Sack<object>()}},
 
 -               
{"g_withSackX1_sumX_VX1X_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(1.0,Operator.Sum).V(p["vid1"]).Local<object>(__.Out("knows").Barrier(Barrier.NormSack)).In("knows").Barrier().Sack<object>()}},
 
 +               {"g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(0.0d).V().OutE().Sack(Operator.Sum).By("weight").InV().Sack<object>().Sum<object>()}},
 
 +               
{"g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(0.0d).V().Repeat(__.OutE().Sack(Operator.Sum).By("weight").InV()).Times(2).Sack<object>()}},
 
 +               
{"g_withBulkXfalseX_withSackX1_sumX_VX1X_localXoutEXknowsX_barrierXnormSackX_inVX_inXknowsX_barrier_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithBulk(false).WithSack(1.0d, 
Operator.Sum).V(p["vid1"]).Local<object>(__.OutE("knows").Barrier(Barrier.NormSack).InV()).In("knows").Barrier().Sack<object>()}},
 
 +               {"g_withBulkXfalseX_withSackX1_sumX_V_out_barrier_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithBulk(false).WithSack(1, 
Operator.Sum).V().Out().Barrier().Sack<object>()}}, 
 +               
{"g_withSackX1_sumX_VX1X_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSack(1.0d, 
Operator.Sum).V(p["vid1"]).Local<object>(__.Out("knows").Barrier(Barrier.NormSack)).In("knows").Barrier().Sack<object>()}},
 
                 {"g_V_sackXassignX_byXageX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Sack(Operator.Assign).By("age").Sack<object>()}}, 
 +               
{"g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(BigInteger.Parse("10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 [...]
 +               {"g_withSackX2X_V_sackXdivX_byXconstantX4_0XX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.WithSack(2).V().Sack(Operator.Div).By(__.Constant<object>(4.0d)).Sack<object>()}},
 
 +               {"g_V_sackXassignX_byXageX_byXnameX_sack", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Sack(Operator.Assign).By("age").By("name").Sack<object>()}}, 
 +               {"g_V_sideEffectXidentityX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().SideEffect(__.Identity())}}, 
 +               {"g_V_sideEffectXidentity_valuesXnameXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().SideEffect(__.Identity().Values<object>("name"))}}, 
 +               {"g_V_sideEffectXpropertyXsingle_age_22X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property(Cardinality.Single, "age", 21), (g,p) 
=>g.V().SideEffect(__.Property(Cardinality.Single, "age", 22)), (g,p) 
=>g.V().Has("age", 21), (g,p) =>g.V().Has("age", 22)}}, 
 +               
{"g_V_group_byXvaluesXnameX_sideEffectXconstantXzyxXX_substringX1XX_byXconstantX1X_sideEffectXconstantXxyzXXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group<object, 
object>().By(__.Values<object>("name").SideEffect(__.Constant<object>("zyx")).Substring(0,
 1)).By(__.Constant<object>(1).SideEffect(__.Constant<object>("xyz")))}}, 
 +               
{"g_withSideEffectXx_setX_V_both_both_sideEffectXlocalXaggregateXxX_byXnameXX_capXxX_unfold",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSideEffect("x", new HashSet<object> {  
}).V().Both().Both().SideEffect(__.Local<object>(__.Aggregate("x").By("name"))).Cap<object>("x").Unfold<object>()}},
 
                 {"g_V_hasXageX_groupCountXaX_byXnameX_out_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Has("age").GroupCount("a").By("name").Out().Cap<object>("a")}}, 
                 {"g_V_groupXaX_byXageX_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group("a").By("age").Cap<object>("a")}}, 
                 {"g_V_groupXaX_byXnameX_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group("a").By("name").Cap<object>("a")}}, 
diff --cc gremlin-go/driver/cucumber/gremlin.go
index 6f74ccef68,23cb7dfeba..6e9fbbf93e
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@@ -2007,35 -1508,14 +2007,36 @@@ var translationMap = map[string][]func(
      "g_VX1X_valuesXageX_injectXnullX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V(p["xx1"]).Values("age").Inject(nil)}}, 
      "g_VX1X_valuesXageX_inject": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["xx1"]).Values("age").Inject()}}, 
      "g_injectXnull_1_3_nullX_asXaX_selectXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(nil, 1, 3, 
nil).As("a").Select("a")}}, 
 -    "g_injectX1_3lX_injectX100_300X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(1, 3).Inject(100, 300)}}, 
 -    "g_injectXbigintBoundaryValuesX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(p["xx1"], p["xx2"], p["xx3"])}}, 
 +    "g_injectX1_3X_injectX100_300X": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(1, 
3).Inject(100, 300)}}, 
 +    "g_injectX1_3_100_300X_list": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject([]interface{}{1, 3, 100, 300})}}, 
 +    "g_injectX1_3_100_300X_set": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(gremlingo.NewSimpleSet(1, 3, 100, 300))}}, 
 +    "g_injectX1_1X_set": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(gremlingo.NewSimpleSet(1, 1))}}, 
++    "g_injectXbigintBoundaryValuesX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(gremlingo.ParseBigInt("0"), 
gremlingo.ParseBigInt("-129"), gremlingo.ParseBigInt("-32769"))}}, 
      "g_io_readXkryoX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.kryo").Read()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 -    "g_io_read_withXreader_gryoX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.kryo").With("~tinkerpop.io.reader", 
"gryo").Read()}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 +    "g_io_read_withXreader_gryoX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.kryo").With(gremlingo.IO.Reader, 
gremlingo.IO.Gryo).Read()}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
      "g_io_readXgraphsonX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.json").Read()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 -    "g_io_read_withXreader_graphsonX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.json").With("~tinkerpop.io.reader", 
"graphson").Read()}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 +    "g_io_read_withXreader_graphsonX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.json").With(gremlingo.IO.Reader, 
gremlingo.IO.Graphson).Read()}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
      "g_io_readXgraphmlX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.xml").Read()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 -    "g_io_read_withXreader_graphmlX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.xml").With("~tinkerpop.io.reader", 
"graphml").Read()}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 +    "g_io_read_withXreader_graphmlX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Io("data/tinkerpop-modern.xml").With(gremlingo.IO.Reader, 
gremlingo.IO.Graphml).Read()}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.E()}}, 
 +    "g_withSackX127bX_injectX1bX_sackXsumX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int8(127)).Inject(int8(1)).Sack(gremlingo.Operator.Sum).Sack()}}, 
 +    "g_withSackX32767sX_injectX1sX_sackXsumX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int16(32767)).Inject(int16(1)).Sack(gremlingo.Operator.Sum).Sack()}},
 
 +    "g_withSackX2147483647iX_injectX1iX_sackXsumX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int32(2147483647)).Inject(int32(1)).Sack(gremlingo.Operator.Sum).Sack()}},
 
 +    
"g_withSackX1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXsumX_sack":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(1.7976931348623157e+308).Inject(1.7976931348623157e+308).Sack(gremlingo.Operator.Sum).Sack()}},
 
 +    "g_withSackX_128bX_injectX1bX_sackXminusX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int8(-128)).Inject(int8(1)).Sack(gremlingo.Operator.Minus).Sack()}}, 
 +    "g_withSackX_32768sX_injectX1sX_sackXminusX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int16(-32768)).Inject(int16(1)).Sack(gremlingo.Operator.Minus).Sack()}},
 
 +    "g_withSackX_2147483648iX_injectX1iX_sackXminusX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int32(-2147483648)).Inject(int32(1)).Sack(gremlingo.Operator.Minus).Sack()}},
 
 +    
"g_withSackX_1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXminusX_sack":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(-1.7976931348623157e+308).Inject(1.7976931348623157e+308).Sack(gremlingo.Operator.Minus).Sack()}},
 
 +    "g_withSackX127bX_injectX2bX_sackXmultX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int8(127)).Inject(int8(2)).Sack(gremlingo.Operator.Mult).Sack()}}, 
 +    "g_withSackX32767sX_injectX2sX_sackXmultX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int16(32767)).Inject(int16(2)).Sack(gremlingo.Operator.Mult).Sack()}},
 
 +    "g_withSackX2147483647iX_injectX2iX_sackXmultX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int32(2147483647)).Inject(int32(2)).Sack(gremlingo.Operator.Mult).Sack()}},
 
 +    "g_withSackX1_7976931348623157E_308dX_injectX2dX_sackXmultX_sack": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(1.7976931348623157e+308).Inject(2).Sack(gremlingo.Operator.Mult).Sack()}},
 
 +    "g_withSackX127bX_injectX0_5fX_sackXdivX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int8(127)).Inject(float32(0.5)).Sack(gremlingo.Operator.Div).Sack()}},
 
 +    "g_withSackX32767sX_injectX0_5fX_sackXdivX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int16(32767)).Inject(float32(0.5)).Sack(gremlingo.Operator.Div).Sack()}},
 
 +    "g_withSackX2147483647iX_injectX0_5fX_sackXdivX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int32(2147483647)).Inject(0.5).Sack(gremlingo.Operator.Div).Sack()}},
 
 +    "g_withSackX1_7976931348623157E_308dX_injectX0_5dX_sackXdivX_sack": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(1.7976931348623157e+308).Inject(0.5).Sack(gremlingo.Operator.Div).Sack()}},
 
 +    "g_withSackX_128bX_injectX_1bX_sackXdivX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int8(-128)).Inject(int8(-1)).Sack(gremlingo.Operator.Div).Sack()}}, 
 +    "g_withSackX_32768sX_injectX_1sX_sackXdivX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int16(-32768)).Inject(int16(-1)).Sack(gremlingo.Operator.Div).Sack()}},
 
 +    "g_withSackX_2147483648iX_injectX_1iX_sackXdivX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(int32(-2147483648)).Inject(int32(-1)).Sack(gremlingo.Operator.Div).Sack()}},
 
      "g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack("hello").V().OutE().Sack(gremlingo.Operator.Assign).By(gremlingo.T.Label).InV().Sack()}},
 
      "g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(0.0).V().OutE().Sack(gremlingo.Operator.Sum).By("weight").InV().Sack().Sum()}},
 
      "g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(0.0).V().Repeat(gremlingo.T__.OutE().Sack(gremlingo.Operator.Sum).By("weight").InV()).Times(2).Sack()}},
 
diff --cc gremlin-go/driver/graphBinary_test.go
index a353b57d15,e4aecb3db5..44da7802b1
--- a/gremlin-go/driver/graphBinary_test.go
+++ b/gremlin-go/driver/graphBinary_test.go
@@@ -192,6 -192,34 +192,34 @@@ func TestGraphBinaryV1(t *testing.T) 
                        assert.Nil(t, err)
                        assert.Equal(t, new(big.Int).SetUint64(uint64(source)), 
res)
                })
+               t.Run("write bigInt zero exact bytes", func(t *testing.T) {
+                       var buffer bytes.Buffer
+                       buf, err := bigIntWriter(*big.NewInt(0), &buffer, nil)
+                       assert.Nil(t, err)
+                       assert.Equal(t, []byte{0x00, 0x00, 0x00, 0x01, 0x00}, 
buf)
+               })
+               t.Run("read-write bigInt zero", func(t *testing.T) {
+                       pos := 0
+                       var buffer bytes.Buffer
+                       source := big.NewInt(0)
+                       buf, err := bigIntWriter(*source, &buffer, nil)
+                       assert.Nil(t, err)
+                       res, err := readBigInt(&buf, &pos)
+                       assert.Nil(t, err)
+                       assert.Equal(t, 0, source.Cmp(res.(*big.Int)))
+               })
+               t.Run("read-write bigDecimal zero unscaled", func(t *testing.T) 
{
+                       pos := 0
+                       var buffer bytes.Buffer
 -                      source := &BigDecimal{0, *big.NewInt(0)}
++                      source := &BigDecimal{0, big.NewInt(0)}
+                       buf, err := bigDecimalWriter(source, &buffer, nil)
+                       assert.Nil(t, err)
+                       res, err := readBigDecimal(&buf, &pos)
+                       assert.Nil(t, err)
+                       actual := res.(*BigDecimal)
+                       assert.Equal(t, source.Scale, actual.Scale)
 -                      assert.Equal(t, 0, 
source.UnscaledValue.Cmp(&actual.UnscaledValue))
++                      assert.Equal(t, 0, 
source.UnscaledValue.Cmp(actual.UnscaledValue))
+               })
                t.Run("read-write list", func(t *testing.T) {
                        pos := 0
                        var buffer bytes.Buffer
diff --cc 
gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 2858d4760b,46f7b0d1a2..aca21e540c
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@@ -2015,58 -1507,35 +2015,59 @@@ const gremlins = 
      g_V_outXcreatedX_name_groupCountXaX_capXaX: [function({g}) { return 
g.V().out("created").values("name").groupCount("a").cap("a") }], 
      g_V_repeatXout_groupCountXaX_byXnameXX_timesX2X_capXaX: [function({g}) { 
return g.V().repeat(__.out().groupCount("a").by("name")).times(2).cap("a") }], 
      
g_V_both_groupCountXaX_byXlabelX_asXbX_barrier_whereXselectXaX_selectXsoftwareX_isXgtX2XXX_selectXbX_name:
 [function({g}) { return 
g.V().both().groupCount("a").by(T.label).as("b").barrier().where(__.select("a").select("software").is(P.gt(2))).select("b").values("name")
 }], 
 -    
g_V_unionXoutXknowsX__outXcreatedX_inXcreatedXX_groupCount_selectXvaluesX_unfold_sum:
 [function({g}) { return 
g.V().union(__.out("knows"),__.out("created").in_("created")).groupCount().select(Column.values).unfold().sum()
 }], 
 +    
g_V_unionXoutXknowsX__outXcreatedX_inXcreatedXX_groupCount_selectXvaluesX_unfold_sum:
 [function({g}) { return g.V().union(__.out("knows"), 
__.out("created").in_("created")).groupCount().select(Column.values).unfold().sum()
 }], 
      g_V_hasXnoX_groupCount: [function({g}) { return 
g.V().has("no").groupCount() }], 
      g_V_hasXnoX_groupCountXaX_capXaX: [function({g}) { return 
g.V().has("no").groupCount("a").cap("a") }], 
 -    
g_V_unionXrepeatXoutX_timesX2X_groupCountXmX_byXlangXX__repeatXinX_timesX2X_groupCountXmX_byXnameXX_capXmX:
 [function({g}) { return 
g.V().union(__.repeat(__.out()).times(2).groupCount("m").by("lang"),__.repeat(__.in_()).times(2).groupCount("m").by("name")).cap("m")
 }], 
 +    
g_V_unionXrepeatXoutX_timesX2X_groupCountXmX_byXlangXX__repeatXinX_timesX2X_groupCountXmX_byXnameXX_capXmX:
 [function({g}) { return 
g.V().union(__.repeat(__.out()).times(2).groupCount("m").by("lang"), 
__.repeat(__.in_()).times(2).groupCount("m").by("name")).cap("m") }], 
      g_V_outXcreatedX_groupCountXxX_capXxX: [function({g}) { return 
g.V().out("created").groupCount("x").cap("x") }], 
      g_V_groupCount_byXbothE_countX: [function({g}) { return 
g.V().groupCount().by(__.bothE().count()) }], 
 -    
g_V_both_groupCountXaX_out_capXaX_selectXkeysX_unfold_both_groupCountXaX_capXaX:
 [function({g}) { return 
g.V().both().groupCount("a").out().cap("a").select(Column.keys).unfold().both().groupCount("a").cap("a")
 }], 
 -    g_V_hasXperson_name_markoX_bothXknowsX_groupCount_byXvaluesXnameX_foldX: 
[function({g}) { return 
g.V().has("person","name","marko").both("knows").groupCount().by(__.values("name").fold())
 }], 
 -    g_VX1X_out_injectXv2X_name: [function({g, vid1, v2}) { return 
g.V(vid1).out().inject(v2).values("name") }], 
 -    g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path: [function({g, l1, 
vid1}) { return 
g.V(vid1).out().values("name").inject("daniel").as("a").map(l1).path() }], 
 -    g_VX1X_injectXg_VX4XX_out_name: [function({g, vid1, v2}) { return 
g.V(vid1).inject(v2).out().values("name") }], 
 -    g_injectXnull_1_3_nullX: [function({g}) { return g.inject(null,1,3,null) 
}], 
 -    
g_injectX10_20_null_20_10_10X_groupCountXxX_dedup_asXyX_projectXa_bX_by_byXselectXxX_selectXselectXyXXX:
 [function({g}) { return 
g.inject(10,20,null,20,10,10).groupCount("x").dedup().as("y").project("a","b").by().by(__.select("x").select(__.select("y")))
 }], 
 -    g_injectXname_marko_age_nullX_selectXname_ageX: [function({g, xx1}) { 
return g.inject(xx1).select("name","age") }], 
 -    g_injectXnull_nullX: [function({g}) { return g.inject(null,null) }], 
 +    
g_V_both_localXgroupCountXaXX_out_capXaX_selectXkeysX_unfold_both_localXgroupCountXaXX_capXaX:
 [function({g}) { return 
g.V().both().local(__.groupCount("a")).out().cap("a").select(Column.keys).unfold().both().local(__.groupCount("a")).cap("a")
 }], 
 +    g_V_hasXperson_name_markoX_bothXknowsX_groupCount_byXvaluesXnameX_foldX: 
[function({g}) { return g.V().has("person", "name", 
"marko").both("knows").groupCount().by(__.values("name").fold()) }], 
 +    g_V_outXcreatedX_groupCount_byXnameX_byXageX: [function({g}) { return 
g.V().out("created").groupCount().by("name").by("age") }], 
 +    g_V_outXcreatedX_groupCountXxX_byXnameX_byXageX: [function({g}) { return 
g.V().out("created").groupCount("x").by("name").by("age") }], 
 +    g_V_groupCountXaX_selectXaX_countXlocalX: [function({g}) { return 
g.V().groupCount("a").select("a").count(Scope.local) }], 
 +    g_V_localXgroupCountXaX_selectXaX_countXlocalXX: [function({g}) { return 
g.V().local(__.groupCount("a").select("a").count(Scope.local)) }], 
 +    g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path: [function({g, 
vid1}) { return 
g.V(vid1).out().values("name").inject("daniel").as("a").map(__.length()).path() 
}], 
 +    g_injectXnull_1_3_nullX: [function({g}) { return g.inject(null, 1, 3, 
null) }], 
 +    
g_injectX10_20_null_20_10_10X_groupCountXxX_dedup_asXyX_projectXa_bX_by_byXselectXxX_selectXselectXyXXX:
 [function({g}) { return g.inject(10, 20, null, 20, 10, 
10).groupCount("x").dedup().as("y").project("a", 
"b").by().by(__.select("x").select(__.select("y"))) }], 
 +    g_injectXname_marko_age_nullX_selectXname_ageX: [function({g}) { return 
g.inject(new Map([["name", "marko"], ["age", null]])).select("name", "age") }], 
 +    g_injectXnull_nullX: [function({g}) { return g.inject(null, null) }], 
      g_injectXnullX: [function({g}) { return g.inject(null) }], 
      g_inject: [function({g}) { return g.inject() }], 
 -    g_VX1X_valuesXageX_injectXnull_nullX: [function({g, xx1}) { return 
g.V(xx1).values("age").inject(null,null) }], 
 +    g_VX1X_valuesXageX_injectXnull_nullX: [function({g, xx1}) { return 
g.V(xx1).values("age").inject(null, null) }], 
      g_VX1X_valuesXageX_injectXnullX: [function({g, xx1}) { return 
g.V(xx1).values("age").inject(null) }], 
      g_VX1X_valuesXageX_inject: [function({g, xx1}) { return 
g.V(xx1).values("age").inject() }], 
 -    g_injectXnull_1_3_nullX_asXaX_selectXaX: [function({g}) { return 
g.inject(null,1,3,null).as("a").select("a") }], 
 -    g_injectX1_3lX_injectX100_300X: [function({g}) { return 
g.inject(1,3).inject(100,300) }], 
 -    g_injectXbigintBoundaryValuesX: [function({g, xx1, xx3, xx2}) { return 
g.inject(xx1,xx2,xx3) }], 
 +    g_injectXnull_1_3_nullX_asXaX_selectXaX: [function({g}) { return 
g.inject(null, 1, 3, null).as("a").select("a") }], 
 +    g_injectX1_3X_injectX100_300X: [function({g}) { return g.inject(1, 
3).inject(100, 300) }], 
 +    g_injectX1_3_100_300X_list: [function({g}) { return g.inject([1, 3, 100, 
300]) }], 
 +    g_injectX1_3_100_300X_set: [function({g}) { return g.inject(new Set([1, 
3, 100, 300])) }], 
 +    g_injectX1_1X_set: [function({g}) { return g.inject(new Set([1, 1])) }], 
++    g_injectXbigintBoundaryValuesX: [function({g}) { return g.inject(0, -129, 
-32769) }], 
      g_io_readXkryoX: [function({g}) { return 
g.io("data/tinkerpop-modern.kryo").read() }, function({g}) { return g.V() }, 
function({g}) { return g.E() }], 
 -    g_io_read_withXreader_gryoX: [function({g}) { return 
g.io("data/tinkerpop-modern.kryo").with_("~tinkerpop.io.reader","gryo").read() 
}, function({g}) { return g.V() }, function({g}) { return g.E() }], 
 +    g_io_read_withXreader_gryoX: [function({g}) { return 
g.io("data/tinkerpop-modern.kryo").with_(IO.reader, IO.gryo).read() }, 
function({g}) { return g.V() }, function({g}) { return g.E() }], 
      g_io_readXgraphsonX: [function({g}) { return 
g.io("data/tinkerpop-modern.json").read() }, function({g}) { return g.V() }, 
function({g}) { return g.E() }], 
 -    g_io_read_withXreader_graphsonX: [function({g}) { return 
g.io("data/tinkerpop-modern.json").with_("~tinkerpop.io.reader","graphson").read()
 }, function({g}) { return g.V() }, function({g}) { return g.E() }], 
 +    g_io_read_withXreader_graphsonX: [function({g}) { return 
g.io("data/tinkerpop-modern.json").with_(IO.reader, IO.graphson).read() }, 
function({g}) { return g.V() }, function({g}) { return g.E() }], 
      g_io_readXgraphmlX: [function({g}) { return 
g.io("data/tinkerpop-modern.xml").read() }, function({g}) { return g.V() }, 
function({g}) { return g.E() }], 
 -    g_io_read_withXreader_graphmlX: [function({g}) { return 
g.io("data/tinkerpop-modern.xml").with_("~tinkerpop.io.reader","graphml").read()
 }, function({g}) { return g.V() }, function({g}) { return g.E() }], 
 +    g_io_read_withXreader_graphmlX: [function({g}) { return 
g.io("data/tinkerpop-modern.xml").with_(IO.reader, IO.graphml).read() }, 
function({g}) { return g.V() }, function({g}) { return g.E() }], 
 +    g_withSackX127bX_injectX1bX_sackXsumX_sack: [function({g}) { return 
g.withSack(127).inject(1).sack(Operator.sum).sack() }], 
 +    g_withSackX32767sX_injectX1sX_sackXsumX_sack: [function({g}) { return 
g.withSack(32767).inject(1).sack(Operator.sum).sack() }], 
 +    g_withSackX2147483647iX_injectX1iX_sackXsumX_sack: [function({g}) { 
return g.withSack(2147483647).inject(1).sack(Operator.sum).sack() }], 
 +    
g_withSackX1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXsumX_sack:
 [function({g}) { return 
g.withSack(1.7976931348623157e+308).inject(1.7976931348623157e+308).sack(Operator.sum).sack()
 }], 
 +    g_withSackX_128bX_injectX1bX_sackXminusX_sack: [function({g}) { return 
g.withSack(-128).inject(1).sack(Operator.minus).sack() }], 
 +    g_withSackX_32768sX_injectX1sX_sackXminusX_sack: [function({g}) { return 
g.withSack(-32768).inject(1).sack(Operator.minus).sack() }], 
 +    g_withSackX_2147483648iX_injectX1iX_sackXminusX_sack: [function({g}) { 
return g.withSack(-2147483648).inject(1).sack(Operator.minus).sack() }], 
 +    
g_withSackX_1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXminusX_sack:
 [function({g}) { return 
g.withSack(-1.7976931348623157e+308).inject(1.7976931348623157e+308).sack(Operator.minus).sack()
 }], 
 +    g_withSackX127bX_injectX2bX_sackXmultX_sack: [function({g}) { return 
g.withSack(127).inject(2).sack(Operator.mult).sack() }], 
 +    g_withSackX32767sX_injectX2sX_sackXmultX_sack: [function({g}) { return 
g.withSack(32767).inject(2).sack(Operator.mult).sack() }], 
 +    g_withSackX2147483647iX_injectX2iX_sackXmultX_sack: [function({g}) { 
return g.withSack(2147483647).inject(2).sack(Operator.mult).sack() }], 
 +    g_withSackX1_7976931348623157E_308dX_injectX2dX_sackXmultX_sack: 
[function({g}) { return 
g.withSack(1.7976931348623157e+308).inject(2).sack(Operator.mult).sack() }], 
 +    g_withSackX127bX_injectX0_5fX_sackXdivX_sack: [function({g}) { return 
g.withSack(127).inject(0.5).sack(Operator.div).sack() }], 
 +    g_withSackX32767sX_injectX0_5fX_sackXdivX_sack: [function({g}) { return 
g.withSack(32767).inject(0.5).sack(Operator.div).sack() }], 
 +    g_withSackX2147483647iX_injectX0_5fX_sackXdivX_sack: [function({g}) { 
return g.withSack(2147483647).inject(0.5).sack(Operator.div).sack() }], 
 +    g_withSackX1_7976931348623157E_308dX_injectX0_5dX_sackXdivX_sack: 
[function({g}) { return 
g.withSack(1.7976931348623157e+308).inject(0.5).sack(Operator.div).sack() }], 
 +    g_withSackX_128bX_injectX_1bX_sackXdivX_sack: [function({g}) { return 
g.withSack(-128).inject(-1).sack(Operator.div).sack() }], 
 +    g_withSackX_32768sX_injectX_1sX_sackXdivX_sack: [function({g}) { return 
g.withSack(-32768).inject(-1).sack(Operator.div).sack() }], 
 +    g_withSackX_2147483648iX_injectX_1iX_sackXdivX_sack: [function({g}) { 
return g.withSack(-2147483648).inject(-1).sack(Operator.div).sack() }], 
      g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack: [function({g}) 
{ return 
g.withSack("hello").V().outE().sack(Operator.assign).by(T.label).inV().sack() 
}], 
      g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum: [function({g}) { 
return 
g.withSack(0.0).V().outE().sack(Operator.sum).by("weight").inV().sack().sum() 
}], 
      g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack: 
[function({g}) { return 
g.withSack(0.0).V().repeat(__.outE().sack(Operator.sum).by("weight").inV()).times(2).sack()
 }], 
diff --cc gremlin-python/src/main/python/tests/feature/gremlin.py
index c9ca7ebd30,93907ae78e..9681ab9f8f
--- a/gremlin-python/src/main/python/tests/feature/gremlin.py
+++ b/gremlin-python/src/main/python/tests/feature/gremlin.py
@@@ -1957,103 -1474,57 +1957,104 @@@ world.gremlins = 
      'g_V_hasXlangX_group_byXlangX_byXcountX': [(lambda 
g:g.V().has('lang').group().by('lang').by(__.count()))], 
      'g_V_group_byXoutE_countX_byXnameX': [(lambda 
g:g.V().order().by('name').group().by(__.out_e().count()).by('name'))], 
      'g_V_repeatXbothXfollowedByXX_timesX2X_group_byXsongTypeX_byXcountX': 
[(lambda 
g:g.V().repeat(__.both('followedBy')).times(2).group().by('songType').by(__.count()))],
 
 -    'g_V_group_byXname_substring_1X_byXconstantX1XX': [(lambda g, 
l1=None:g.V().group().by(l1).by(__.constant(1)))], 
 -    
'g_V_out_group_byXlabelX_selectXpersonX_unfold_outXcreatedX_name_limitX2X': 
[(lambda 
g:g.V().out().group().by(T.label).select('person').unfold().out('created').name[0:2])],
 
 +    'g_V_group_byXvaluesXnameX_substringX1XX_byXconstantX1XX': [(lambda 
g:g.V().group().by(__.values('name').substring(0, 1)).by(__.constant(1)))], 
 +    
'g_V_out_group_byXlabelX_selectXpersonX_unfold_outXcreatedX_name_limitX2X': 
[(lambda 
g:g.V().out().group().by(T.label).select('person').unfold().out('created').values('name').limit(2))],
 
      'g_V_hasLabelXsongX_group_byXnameX_byXproperties_groupCount_byXlabelXX': 
[(lambda 
g:g.V().has_label('song').group().by('name').by(__.properties().group_count().by(T.label)))],
 
 -    
'g_V_outXfollowedByX_group_byXsongTypeX_byXbothE_group_byXlabelX_byXweight_sumXX':
 [(lambda 
g:g.V().out('followedBy').group().by('songType').by(__.both_e().group().by(T.label).by(__.weight.sum_())))],
 
 -    
'g_V_group_byXlabelX_byXbothE_groupXaX_byXlabelX_byXweight_sumX_weight_sumX': 
[(lambda 
g:g.V().group().by(T.label).by(__.both_e().group('a').by(T.label).by(__.weight.sum_()).weight.sum_()))],
 
 -    
'g_V_hasLabelXpersonX_asXpX_outXcreatedX_group_byXnameX_byXselectXpX_valuesXageX_sumX':
 [(lambda 
g:g.V().has_label('person').as_('p').out('created').group().by('name').by(__.select('p').age.sum_()))],
 
 +    
'g_V_outXfollowedByX_group_byXsongTypeX_byXbothE_group_byXlabelX_byXweight_sumXX':
 [(lambda 
g:g.V().out('followedBy').group().by('songType').by(__.both_e().group().by(T.label).by(__.values('weight').sum_())))],
 
 +    
'g_V_group_byXlabelX_byXbothE_groupXaX_byXlabelX_byXweight_sumX_weight_sumX': 
[(lambda 
g:g.V().group().by(T.label).by(__.both_e().group('a').by(T.label).by(__.values('weight').sum_()).values('weight').sum_()))],
 
 +    
'g_V_hasLabelXpersonX_asXpX_outXcreatedX_group_byXnameX_byXselectXpX_valuesXageX_sumX':
 [(lambda 
g:g.V().has_label('person').as_('p').out('created').group().by('name').by(__.select('p').values('age').sum_()))],
 
      'g_V_group_byXlabelX_byXlabel_countX': [(lambda 
g:g.V().group().by(__.label()).by(__.label().count()))], 
 +    'g_V_hasXperson_name_withinXvadas_peterXX_group_by_byXout_order_foldX': 
[(lambda g:g.V().has('person', 'name', P.within('vadas', 
'peter')).group().by().by(__.out().order().fold()))], 
 +    'g_V_hasXperson_name_withinXvadas_peterXX_group_by_byXout_foldX': 
[(lambda g:g.V().has('person', 'name', P.within('vadas', 
'peter')).group().by().by(__.out().fold()))], 
 +    'g_V_hasXperson_name_withinXvadas_peterXX_group_by_byXout_orderX': 
[(lambda g:g.V().has('person', 'name', P.within('vadas', 
'peter')).group().by().by(__.out().order()))], 
 +    'g_V_group_byXvaluesXnameXX_byXvaluesXageX_fold_unfoldX': [(lambda 
g:g.V().group().by(__.values('name')).by(__.values('age').fold().unfold()))], 
 +    'g_V_group_byXvaluesXnameXX_byXout_fold_countXlocalX_isXgtX0XXX': 
[(lambda 
g:g.V().group().by(__.values('name')).by(__.out().fold().count(Scope.local).is_(P.gt(0))))],
 
 +    'g_V_hasXperson_name_withinXvadas_peterXX_group_by_byXout_order_countX': 
[(lambda g:g.V().has('person', 'name', P.within('vadas', 
'peter')).group().by().by(__.out().order().count()))], 
 +    
'g_V_hasXperson_name_withinXvadas_peterXX_group_by_byXout_order_fold_countXlocalXX':
 [(lambda g:g.V().has('person', 'name', P.within('vadas', 
'peter')).group().by().by(__.out().order().fold().count(Scope.local)))], 
 +    'g_V_group_by_byXout_label_foldX_selectXvaluesX_unfold_orderXlocalX': 
[(lambda 
g:g.V().group().by().by(__.out().label().fold()).select(Column.values).unfold().order(Scope.local))],
 
 +    
'g_V_group_by_byXout_label_dedup_foldX_selectXvaluesX_unfold_orderXlocalX': 
[(lambda 
g:g.V().group().by().by(__.out().label().dedup().fold()).select(Column.values).unfold().order(Scope.local))],
 
 +    'g_V_group_by_byXout_label_limitX0X_foldX_selectXvaluesX_unfold': 
[(lambda 
g:g.V().group().by().by(__.out().label().limit(0).fold()).select(Column.values).unfold())],
 
 +    
'g_V_group_by_byXout_label_limitX10X_foldX_selectXvaluesX_unfold_orderXlocalX': 
[(lambda 
g:g.V().group().by().by(__.out().label().limit(10).fold()).select(Column.values).unfold().order(Scope.local))],
 
 +    
'g_V_group_by_byXout_label_tailX10X_foldX_selectXvaluesX_unfold_orderXlocalX': 
[(lambda 
g:g.V().group().by().by(__.out().label().tail(10).fold()).select(Column.values).unfold().order(Scope.local))],
 
 +    'g_V_groupXaX_byXnameX_by_selectXaX_countXlocalX': [(lambda 
g:g.V().group('a').by('name').by().select('a').count(Scope.local))], 
 +    'g_V_localXgroupXaX_byXnameX_by_selectXaX_countXlocalXX': [(lambda 
g:g.V().local(__.group('a').by('name').by().select('a').count(Scope.local)))], 
 +    'g_V_group_byXvaluesXnameXX_byXboth_countX': [(lambda 
g:g.V().group().by(__.values('name')).by(__.both().count()))], 
      'g_V_outXcreatedX_groupCount_byXnameX': [(lambda 
g:g.V().out('created').group_count().by('name'))], 
      'g_V_groupCount_byXageX': [(lambda g:g.V().group_count().by('age'))], 
 -    'g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX': [(lambda 
g:g.with_strategies(*[TraversalStrategy('ProductiveByStrategy',{'productiveKeys':[],'strategy':'org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy'},
 
'org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProductiveByStrategy')]).V().group_count().by('age'))],
 
 -    'g_V_outXcreatedX_name_groupCount': [(lambda 
g:g.V().out('created').name.group_count())], 
 +    'g_withStrategiesXProductiveByStrategyX_V_groupCount_byXageX': [(lambda 
g:g.with_strategies(ProductiveByStrategy()).V().group_count().by('age'))], 
 +    'g_V_outXcreatedX_name_groupCount': [(lambda 
g:g.V().out('created').values('name').group_count())], 
      'g_V_outXcreatedX_groupCountXaX_byXnameX_capXaX': [(lambda 
g:g.V().out('created').group_count('a').by('name').cap('a'))], 
 -    'g_V_outXcreatedX_name_groupCountXaX_capXaX': [(lambda 
g:g.V().out('created').name.group_count('a').cap('a'))], 
 +    'g_V_outXcreatedX_name_groupCountXaX_capXaX': [(lambda 
g:g.V().out('created').values('name').group_count('a').cap('a'))], 
      'g_V_repeatXout_groupCountXaX_byXnameXX_timesX2X_capXaX': [(lambda 
g:g.V().repeat(__.out().group_count('a').by('name')).times(2).cap('a'))], 
 -    
'g_V_both_groupCountXaX_byXlabelX_asXbX_barrier_whereXselectXaX_selectXsoftwareX_isXgtX2XXX_selectXbX_name':
 [(lambda 
g:g.V().both().group_count('a').by(T.label).as_('b').barrier().where(__.select('a').select('software').is_(P.gt(2))).select('b').name)],
 
 -    
'g_V_unionXoutXknowsX__outXcreatedX_inXcreatedXX_groupCount_selectXvaluesX_unfold_sum':
 [(lambda 
g:g.V().union(__.out('knows'),__.out('created').in_('created')).group_count().select(Column.values).unfold().sum_())],
 
 +    
'g_V_both_groupCountXaX_byXlabelX_asXbX_barrier_whereXselectXaX_selectXsoftwareX_isXgtX2XXX_selectXbX_name':
 [(lambda 
g:g.V().both().group_count('a').by(T.label).as_('b').barrier().where(__.select('a').select('software').is_(P.gt(2))).select('b').values('name'))],
 
 +    
'g_V_unionXoutXknowsX__outXcreatedX_inXcreatedXX_groupCount_selectXvaluesX_unfold_sum':
 [(lambda g:g.V().union(__.out('knows'), 
__.out('created').in_('created')).group_count().select(Column.values).unfold().sum_())],
 
      'g_V_hasXnoX_groupCount': [(lambda g:g.V().has('no').group_count())], 
      'g_V_hasXnoX_groupCountXaX_capXaX': [(lambda 
g:g.V().has('no').group_count('a').cap('a'))], 
 -    
'g_V_unionXrepeatXoutX_timesX2X_groupCountXmX_byXlangXX__repeatXinX_timesX2X_groupCountXmX_byXnameXX_capXmX':
 [(lambda 
g:g.V().union(__.repeat(__.out()).times(2).group_count('m').by('lang'),__.repeat(__.in_()).times(2).group_count('m').by('name')).cap('m'))],
 
 +    
'g_V_unionXrepeatXoutX_timesX2X_groupCountXmX_byXlangXX__repeatXinX_timesX2X_groupCountXmX_byXnameXX_capXmX':
 [(lambda 
g:g.V().union(__.repeat(__.out()).times(2).group_count('m').by('lang'), 
__.repeat(__.in_()).times(2).group_count('m').by('name')).cap('m'))], 
      'g_V_outXcreatedX_groupCountXxX_capXxX': [(lambda 
g:g.V().out('created').group_count('x').cap('x'))], 
      'g_V_groupCount_byXbothE_countX': [(lambda 
g:g.V().group_count().by(__.both_e().count()))], 
 -    
'g_V_both_groupCountXaX_out_capXaX_selectXkeysX_unfold_both_groupCountXaX_capXaX':
 [(lambda 
g:g.V().both().group_count('a').out().cap('a').select(Column.keys).unfold().both().group_count('a').cap('a'))],
 
 -    
'g_V_hasXperson_name_markoX_bothXknowsX_groupCount_byXvaluesXnameX_foldX': 
[(lambda 
g:g.V().has('person','name','marko').both('knows').group_count().by(__.name.fold()))],
 
 -    'g_VX1X_out_injectXv2X_name': [(lambda g, 
vid1=None,v2=None:g.V(vid1).out().inject(v2).name)], 
 -    'g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path': [(lambda g, 
l1=None,vid1=None:g.V(vid1).out().name.inject('daniel').as_('a').map(l1).path())],
 
 -    'g_VX1X_injectXg_VX4XX_out_name': [(lambda g, 
vid1=None,v2=None:g.V(vid1).inject(v2).out().name)], 
 -    'g_injectXnull_1_3_nullX': [(lambda g:g.inject(None,1,3,None))], 
 -    
'g_injectX10_20_null_20_10_10X_groupCountXxX_dedup_asXyX_projectXa_bX_by_byXselectXxX_selectXselectXyXXX':
 [(lambda 
g:g.inject(10,20,None,20,10,10).group_count('x').dedup().as_('y').project('a','b').by().by(__.select('x').select(__.select('y'))))],
 
 -    'g_injectXname_marko_age_nullX_selectXname_ageX': [(lambda g, 
xx1=None:g.inject(xx1).select('name','age'))], 
 -    'g_injectXnull_nullX': [(lambda g:g.inject(None,None))], 
 +    
'g_V_both_localXgroupCountXaXX_out_capXaX_selectXkeysX_unfold_both_localXgroupCountXaXX_capXaX':
 [(lambda 
g:g.V().both().local(__.group_count('a')).out().cap('a').select(Column.keys).unfold().both().local(__.group_count('a')).cap('a'))],
 
 +    
'g_V_hasXperson_name_markoX_bothXknowsX_groupCount_byXvaluesXnameX_foldX': 
[(lambda g:g.V().has('person', 'name', 
'marko').both('knows').group_count().by(__.values('name').fold()))], 
 +    'g_V_outXcreatedX_groupCount_byXnameX_byXageX': [(lambda 
g:g.V().out('created').group_count().by('name').by('age'))], 
 +    'g_V_outXcreatedX_groupCountXxX_byXnameX_byXageX': [(lambda 
g:g.V().out('created').group_count('x').by('name').by('age'))], 
 +    'g_V_groupCountXaX_selectXaX_countXlocalX': [(lambda 
g:g.V().group_count('a').select('a').count(Scope.local))], 
 +    'g_V_localXgroupCountXaX_selectXaX_countXlocalXX': [(lambda 
g:g.V().local(__.group_count('a').select('a').count(Scope.local)))], 
 +    'g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path': [(lambda g, 
vid1=None:g.V(vid1).out().values('name').inject('daniel').as_('a').map(__.length()).path())],
 
 +    'g_injectXnull_1_3_nullX': [(lambda g:g.inject(None, 1, 3, None))], 
 +    
'g_injectX10_20_null_20_10_10X_groupCountXxX_dedup_asXyX_projectXa_bX_by_byXselectXxX_selectXselectXyXXX':
 [(lambda g:g.inject(10, 20, None, 20, 10, 
10).group_count('x').dedup().as_('y').project('a', 
'b').by().by(__.select('x').select(__.select('y'))))], 
 +    'g_injectXname_marko_age_nullX_selectXname_ageX': [(lambda g:g.inject({ 
'name': 'marko', 'age': None }).select('name', 'age'))], 
 +    'g_injectXnull_nullX': [(lambda g:g.inject(None, None))], 
      'g_injectXnullX': [(lambda g:g.inject(None))], 
      'g_inject': [(lambda g:g.inject())], 
 -    'g_VX1X_valuesXageX_injectXnull_nullX': [(lambda g, 
xx1=None:g.V(xx1).age.inject(None,None))], 
 -    'g_VX1X_valuesXageX_injectXnullX': [(lambda g, 
xx1=None:g.V(xx1).age.inject(None))], 
 -    'g_VX1X_valuesXageX_inject': [(lambda g, 
xx1=None:g.V(xx1).age.inject())], 
 -    'g_injectXnull_1_3_nullX_asXaX_selectXaX': [(lambda 
g:g.inject(None,1,3,None).as_('a').select('a'))], 
 -    'g_injectX1_3lX_injectX100_300X': [(lambda 
g:g.inject(1,3).inject(100,300))], 
 -    'g_injectXbigintBoundaryValuesX': [(lambda g, 
xx1=None,xx3=None,xx2=None:g.inject(xx1,xx2,xx3))], 
 +    'g_VX1X_valuesXageX_injectXnull_nullX': [(lambda g, 
xx1=None:g.V(xx1).values('age').inject(None, None))], 
 +    'g_VX1X_valuesXageX_injectXnullX': [(lambda g, 
xx1=None:g.V(xx1).values('age').inject(None))], 
 +    'g_VX1X_valuesXageX_inject': [(lambda g, 
xx1=None:g.V(xx1).values('age').inject())], 
 +    'g_injectXnull_1_3_nullX_asXaX_selectXaX': [(lambda g:g.inject(None, 1, 
3, None).as_('a').select('a'))], 
 +    'g_injectX1_3X_injectX100_300X': [(lambda g:g.inject(1, 3).inject(100, 
300))], 
 +    'g_injectX1_3_100_300X_list': [(lambda g:g.inject([1, 3, 100, 300]))], 
 +    'g_injectX1_3_100_300X_set': [(lambda g:g.inject({1, 3, 100, 300}))], 
 +    'g_injectX1_1X_set': [(lambda g:g.inject({1, 1}))], 
++    'g_injectXbigintBoundaryValuesX': [(lambda g:g.inject(bigint(0), 
bigint(-129), bigint(-32769)))], 
      'g_io_readXkryoX': [(lambda g:g.io('data/tinkerpop-modern.kryo').read()), 
(lambda g:g.V()), (lambda g:g.E())], 
 -    'g_io_read_withXreader_gryoX': [(lambda 
g:g.io('data/tinkerpop-modern.kryo').with_('~tinkerpop.io.reader','gryo').read()),
 (lambda g:g.V()), (lambda g:g.E())], 
 +    'g_io_read_withXreader_gryoX': [(lambda 
g:g.io('data/tinkerpop-modern.kryo').with_(IO.reader, IO.gryo).read()), (lambda 
g:g.V()), (lambda g:g.E())], 
      'g_io_readXgraphsonX': [(lambda 
g:g.io('data/tinkerpop-modern.json').read()), (lambda g:g.V()), (lambda 
g:g.E())], 
 -    'g_io_read_withXreader_graphsonX': [(lambda 
g:g.io('data/tinkerpop-modern.json').with_('~tinkerpop.io.reader','graphson').read()),
 (lambda g:g.V()), (lambda g:g.E())], 
 +    'g_io_read_withXreader_graphsonX': [(lambda 
g:g.io('data/tinkerpop-modern.json').with_(IO.reader, IO.graphson).read()), 
(lambda g:g.V()), (lambda g:g.E())], 
      'g_io_readXgraphmlX': [(lambda 
g:g.io('data/tinkerpop-modern.xml').read()), (lambda g:g.V()), (lambda 
g:g.E())], 
 -    'g_io_read_withXreader_graphmlX': [(lambda 
g:g.io('data/tinkerpop-modern.xml').with_('~tinkerpop.io.reader','graphml').read()),
 (lambda g:g.V()), (lambda g:g.E())], 
 +    'g_io_read_withXreader_graphmlX': [(lambda 
g:g.io('data/tinkerpop-modern.xml').with_(IO.reader, IO.graphml).read()), 
(lambda g:g.V()), (lambda g:g.E())], 
 +    'g_withSackX127bX_injectX1bX_sackXsumX_sack': [(lambda 
g:g.with_sack(127).inject(1).sack(Operator.sum_).sack())], 
 +    'g_withSackX32767sX_injectX1sX_sackXsumX_sack': [(lambda 
g:g.with_sack(32767).inject(1).sack(Operator.sum_).sack())], 
 +    'g_withSackX2147483647iX_injectX1iX_sackXsumX_sack': [(lambda 
g:g.with_sack(2147483647).inject(1).sack(Operator.sum_).sack())], 
 +    
'g_withSackX1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXsumX_sack':
 [(lambda 
g:g.with_sack(1.7976931348623157e+308).inject(1.7976931348623157e+308).sack(Operator.sum_).sack())],
 
 +    'g_withSackX_128bX_injectX1bX_sackXminusX_sack': [(lambda 
g:g.with_sack(-128).inject(1).sack(Operator.minus).sack())], 
 +    'g_withSackX_32768sX_injectX1sX_sackXminusX_sack': [(lambda 
g:g.with_sack(-32768).inject(1).sack(Operator.minus).sack())], 
 +    'g_withSackX_2147483648iX_injectX1iX_sackXminusX_sack': [(lambda 
g:g.with_sack(-2147483648).inject(1).sack(Operator.minus).sack())], 
 +    
'g_withSackX_1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXminusX_sack':
 [(lambda 
g:g.with_sack(-1.7976931348623157e+308).inject(1.7976931348623157e+308).sack(Operator.minus).sack())],
 
 +    'g_withSackX127bX_injectX2bX_sackXmultX_sack': [(lambda 
g:g.with_sack(127).inject(2).sack(Operator.mult).sack())], 
 +    'g_withSackX32767sX_injectX2sX_sackXmultX_sack': [(lambda 
g:g.with_sack(32767).inject(2).sack(Operator.mult).sack())], 
 +    'g_withSackX2147483647iX_injectX2iX_sackXmultX_sack': [(lambda 
g:g.with_sack(2147483647).inject(2).sack(Operator.mult).sack())], 
 +    'g_withSackX1_7976931348623157E_308dX_injectX2dX_sackXmultX_sack': 
[(lambda 
g:g.with_sack(1.7976931348623157e+308).inject(2).sack(Operator.mult).sack())], 
 +    'g_withSackX127bX_injectX0_5fX_sackXdivX_sack': [(lambda 
g:g.with_sack(127).inject(0.5).sack(Operator.div).sack())], 
 +    'g_withSackX32767sX_injectX0_5fX_sackXdivX_sack': [(lambda 
g:g.with_sack(32767).inject(0.5).sack(Operator.div).sack())], 
 +    'g_withSackX2147483647iX_injectX0_5fX_sackXdivX_sack': [(lambda 
g:g.with_sack(2147483647).inject(0.5).sack(Operator.div).sack())], 
 +    'g_withSackX1_7976931348623157E_308dX_injectX0_5dX_sackXdivX_sack': 
[(lambda 
g:g.with_sack(1.7976931348623157e+308).inject(0.5).sack(Operator.div).sack())], 
 +    'g_withSackX_128bX_injectX_1bX_sackXdivX_sack': [(lambda 
g:g.with_sack(-128).inject(-1).sack(Operator.div).sack())], 
 +    'g_withSackX_32768sX_injectX_1sX_sackXdivX_sack': [(lambda 
g:g.with_sack(-32768).inject(-1).sack(Operator.div).sack())], 
 +    'g_withSackX_2147483648iX_injectX_1iX_sackXdivX_sack': [(lambda 
g:g.with_sack(-2147483648).inject(-1).sack(Operator.div).sack())], 
      'g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack': [(lambda 
g:g.with_sack('hello').V().out_e().sack(Operator.assign).by(T.label).in_v().sack())],
 
 -    'g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum': [(lambda 
g:g.with_sack(float(0.0)).V().out_e().sack(Operator.sum_).by('weight').in_v().sack().sum_())],
 
 -    'g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack': 
[(lambda 
g:g.with_sack(float(0.0)).V().repeat(__.out_e().sack(Operator.sum_).by('weight').in_v()).times(2).sack())],
 
 -    
'g_withBulkXfalseX_withSackX1_sumX_VX1X_localXoutEXknowsX_barrierXnormSackX_inVX_inXknowsX_barrier_sack':
 [(lambda g, 
vid1=None:g.with_bulk(False).with_sack(float(1.0),Operator.sum_).V(vid1).local(__.out_e('knows').barrier(Barrier.norm_sack).in_v()).in_('knows').barrier().sack())],
 
 -    'g_withBulkXfalseX_withSackX1_sumX_V_out_barrier_sack': [(lambda 
g:g.with_bulk(False).with_sack(1,Operator.sum_).V().out().barrier().sack())], 
 -    
'g_withSackX1_sumX_VX1X_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack':
 [(lambda g, 
vid1=None:g.with_sack(float(1.0),Operator.sum_).V(vid1).local(__.out('knows').barrier(Barrier.norm_sack)).in_('knows').barrier().sack())],
 
 +    'g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum': [(lambda 
g:g.with_sack(0.0).V().out_e().sack(Operator.sum_).by('weight').in_v().sack().sum_())],
 
 +    'g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack': 
[(lambda 
g:g.with_sack(0.0).V().repeat(__.out_e().sack(Operator.sum_).by('weight').in_v()).times(2).sack())],
 
 +    
'g_withBulkXfalseX_withSackX1_sumX_VX1X_localXoutEXknowsX_barrierXnormSackX_inVX_inXknowsX_barrier_sack':
 [(lambda g, vid1=None:g.with_bulk(False).with_sack(1.0, 
Operator.sum_).V(vid1).local(__.out_e('knows').barrier(Barrier.norm_sack).in_v()).in_('knows').barrier().sack())],
 
 +    'g_withBulkXfalseX_withSackX1_sumX_V_out_barrier_sack': [(lambda 
g:g.with_bulk(False).with_sack(1, Operator.sum_).V().out().barrier().sack())], 
 +    
'g_withSackX1_sumX_VX1X_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack':
 [(lambda g, vid1=None:g.with_sack(1.0, 
Operator.sum_).V(vid1).local(__.out('knows').barrier(Barrier.norm_sack)).in_('knows').barrier().sack())],
 
      'g_V_sackXassignX_byXageX_sack': [(lambda 
g:g.V().sack(Operator.assign).by('age').sack())], 
 +    
'g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack':
 [(lambda 
g:g.with_sack(bigint(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 [...]
 +    'g_withSackX2X_V_sackXdivX_byXconstantX4_0XX_sack': [(lambda 
g:g.with_sack(2).V().sack(Operator.div).by(__.constant(4.0)).sack())], 
 +    'g_V_sackXassignX_byXageX_byXnameX_sack': [(lambda 
g:g.V().sack(Operator.assign).by('age').by('name').sack())], 
 +    'g_V_sideEffectXidentityX': [(lambda 
g:g.V().side_effect(__.identity()))], 
 +    'g_V_sideEffectXidentity_valuesXnameXX': [(lambda 
g:g.V().side_effect(__.identity().values('name')))], 
 +    'g_V_sideEffectXpropertyXsingle_age_22X': [(lambda 
g:g.add_v('person').property(Cardinality.single, 'age', 21)), (lambda 
g:g.V().side_effect(__.property(Cardinality.single, 'age', 22))), (lambda 
g:g.V().has('age', 21)), (lambda g:g.V().has('age', 22))], 
 +    
'g_V_group_byXvaluesXnameX_sideEffectXconstantXzyxXX_substringX1XX_byXconstantX1X_sideEffectXconstantXxyzXXX':
 [(lambda 
g:g.V().group().by(__.values('name').side_effect(__.constant('zyx')).substring(0,
 1)).by(__.constant(1).side_effect(__.constant('xyz'))))], 
 +    
'g_withSideEffectXx_setX_V_both_both_sideEffectXlocalXaggregateXxX_byXnameXX_capXxX_unfold':
 [(lambda g:g.with_side_effect('x', 
set()).V().both().both().side_effect(__.local(__.aggregate('x').by('name'))).cap('x').unfold())],
 
      'g_V_hasXageX_groupCountXaX_byXnameX_out_capXaX': [(lambda 
g:g.V().has('age').group_count('a').by('name').out().cap('a'))], 
      'g_V_groupXaX_byXageX_capXaX': [(lambda 
g:g.V().group('a').by('age').cap('a'))], 
      'g_V_groupXaX_byXnameX_capXaX': [(lambda 
g:g.V().group('a').by('name').cap('a'))], 
diff --cc gremlin-python/src/main/python/tests/unit/io/test_graphbinaryV1.py
index 87aee98931,b4624584b4..6f73a74d2b
--- a/gremlin-python/src/main/python/tests/unit/io/test_graphbinaryV1.py
+++ b/gremlin-python/src/main/python/tests/unit/io/test_graphbinaryV1.py
@@@ -82,8 -111,16 +111,16 @@@ class TestGraphBinaryWriter(object)
          assert x.scale == output.scale
          assert x.unscaled_value == output.unscaled_value
  
+     def test_bigdecimal_negative_boundaries(self):
+         # Negative unscaled values at byte-width boundaries previously raised
+         # OverflowError during serialization (TINKERPOP-3275).
+         for x in [BigDecimal(0, -129), BigDecimal(2, -255)]:
+             output = 
self.graphbinary_reader.read_object(self.graphbinary_writer.write_object(x))
+             assert x.scale == output.scale
+             assert x.unscaled_value == output.unscaled_value
+ 
      def test_date(self):
 -        x = datetime.datetime(2016, 12, 14, 16, 14, 36, 295000)
 +        x = datetime(2016, 12, 14, 16, 14, 36, 295000)
          output = 
self.graphbinary_reader.read_object(self.graphbinary_writer.write_object(x))
          assert x == output
  
diff --cc 
gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Inject.feature
index 52dc8f3857,9acb57253a..5f567c1c6c
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Inject.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Inject.feature
@@@ -182,38 -219,19 +182,52 @@@ Feature: Step - inject(
        | d[1].i |
        | d[3].i |
  
 +  @GraphComputerVerificationInjectionNotSupported
 +  Scenario: g_injectX1_3_100_300X_list
 +    Given the modern graph
 +    And the traversal of
 +      """
 +      g.inject([1, 3, 100, 300])
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
 +      | l[d[1].i,d[3].i,d[100].i,d[300].i] |
 +
 +  @GraphComputerVerificationInjectionNotSupported
 +  Scenario: g_injectX1_3_100_300X_set
 +    Given the modern graph
 +    And the traversal of
 +      """
 +      g.inject({1, 3, 100, 300})
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
 +      | s[d[100].i,d[300].i,d[1].i,d[3].i] |
 +
 +  @GraphComputerVerificationInjectionNotSupported
 +  Scenario: g_injectX1_1X_set
 +    Given the modern graph
 +    And the traversal of
 +      """
 +      g.inject({1, 1})
 +      """
 +    When iterated to list
 +    Then the result should be unordered
 +      | result |
-       | s[d[1].i] |
++      | s[d[1].i] |
++
+   @GraphComputerVerificationInjectionNotSupported
+   Scenario: g_injectXbigintBoundaryValuesX
+     Given the empty graph
 -    And using the parameter xx1 defined as "d[0].n"
 -    And using the parameter xx2 defined as "d[-129].n"
 -    And using the parameter xx3 defined as "d[-32769].n"
+     And the traversal of
+       """
 -      g.inject(xx1, xx2, xx3)
++      g.inject(0n, -129n, -32769n)
+       """
+     When iterated to list
+     Then the result should be unordered
+       | result |
+       | d[0].n |
+       | d[-129].n |
+       | d[-32769].n |

Reply via email to