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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7ab1be1278 Fix gremlin-go/dotnet P.outside() and gremlin-go negative 
BigInteger (#3522)
7ab1be1278 is described below

commit 7ab1be1278ab5f7e9fd9216cd9ab050ae46e23bb
Author: Guian Gumpac <[email protected]>
AuthorDate: Mon Jul 20 10:26:25 2026 -0700

    Fix gremlin-go/dotnet P.outside() and gremlin-go negative BigInteger (#3522)
    
    Assisted-by: Kiro: Claude Opus 4.8
---
 CHANGELOG.asciidoc                                 |  2 +
 .../Gremlin.Net/Process/Traversal/GremlinLang.cs   |  2 +-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  6 ++
 .../Process/Traversal/GremlinLangTests.cs          | 21 ++++++
 gremlin-go/driver/cucumber/gremlin.go              |  3 +
 gremlin-go/driver/graphBinaryDeserializer.go       |  4 +-
 gremlin-go/driver/graphBinarySerializer_test.go    | 23 +++++++
 gremlin-go/driver/gremlinlang.go                   |  5 +-
 gremlin-go/driver/gremlinlang_test.go              | 12 ++++
 .../gremlin-javascript/test/cucumber/gremlin.js    |  3 +
 .../src/main/python/tests/feature/gremlin.py       |  3 +
 .../gremlin/language/translator/translations.json  | 75 ++++++++++++++++++++++
 .../gremlin/test/features/data/BigDecimal.feature  | 15 +++++
 .../gremlin/test/features/data/BigInt.feature      | 15 +++++
 .../gremlin/test/features/filter/Is.feature        | 12 ++++
 15 files changed, 196 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index e17a9c506e..3dbf8bf53c 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,6 +27,8 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 * Fixed `gremlin-python` `GremlinLang` equality (`__eq__`) which compared a 
traversal to itself, so traversals with different steps but equal parameters 
were incorrectly considered equal.
 * Removed the deprecated `gremlin-python` `DriverRemoteConnection.submitAsync` 
method in favor of `submit_async`.
+* Fixed `gremlin-go` GraphBinary deserialization of negative `BigInteger` and 
negative-unscaled `BigDecimal` values, which decoded to incorrect values 
because the two's-complement width was computed one byte too wide.
+* Fixed `gremlin-go` and `gremlin-dotnet` `P.outside()` gremlin-lang 
generation to emit comma-separated arguments (`outside(a,b)`) like 
`between`/`inside`, instead of the invalid list-wrapped form (`outside([a,b])`) 
that the server could not parse.
 * Added GraphBinary `Tree` (`0x2b`) serialization and deserialization with a 
native tree-shaped API to `gremlin-python`, `gremlin-dotnet`, `gremlin-go`, and 
`gremlin-javascript`.
 * Added a `gremlin/io` package export in `gremlin-javascript` exposing the 
GraphBinary type serializers.
 * Raised the minimum Java version to 17 for building and running *(breaking)*.
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs 
b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
index 661004fd46..1c78bdf77e 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
@@ -459,7 +459,7 @@ namespace Gremlin.Net.Process.Traversal
                 // For predicates like between/inside, the value is an 
object[] with 2 elements
                 if (p.Value is object[] valArr)
                 {
-                    if (valArr.Length > 1 && p.OperatorName != "between" && 
p.OperatorName != "inside")
+                    if (valArr.Length > 1 && p.OperatorName != "between" && 
p.OperatorName != "inside" && p.OperatorName != "outside")
                     {
                         sb.Append('[');
                         for (int i = 0; i < valArr.Length; i++)
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 9bb1aa80ac..4530230285 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -229,6 +229,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_unionXaddVXpersonX_propertyXname_aliceX_addVXpersonX_propertyXname_bobX_addVXpersonX_propertyXname_chrisX_name",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Union<object>(__.AddV((string) "person").Property("name", "alice"), 
__.AddV((string) "person").Property("name", "bob"), __.AddV((string) 
"person").Property("name", "chris")).Values<object>("name")}}, 
                
{"g_VX_hasLabelXpersonX_unionX_whereX_out_count_isXgtX2XXX_valuesXageX_notX_whereX_bothE_count_isXgt2XXX_valusXnameXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("person").Union<object>(__.Where(__.OutE().Count().Is(P.Gt(2))).Values<object>("age"),
 __.Not(__.Where(__.OutE().Count().Is(P.Gt(2)))).Values<object>("name"))}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 123), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal))}},
 
+               
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", -456), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 10), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).Math("_
 + 0.5")}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_isXgtX0XX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 5), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).Is(P.Gt(0))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_sumX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 2).AddV((string) 
"data").Property("int", 3).AddV((string) "data").Property("int", 4), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).Sum<object>()}},
 
@@ -238,6 +239,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_injectX99X_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_groupCount",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(99).AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).GroupCount<object>()}},
 
                {"g_V_valuesXageX_isXtypeOfXGType_BIGDECIMALXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.TypeOf(GType.BigDecimal))}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 456), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt))}},
 
+               
{"g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", -456), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 100), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt)).Math("_
 * 1000")}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_isXeqX42XX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 42), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt)).Is(P.Eq(42))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_sumX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 10).AddV((string) 
"data").Property("int", 20).AddV((string) "data").Property("int", 30), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt)).Sum<object>()}},
 
@@ -598,6 +600,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_valuesXageX_isX32varX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(p["xx1"])}}, 
                {"g_V_valuesXageX_isXlte_30X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Lte(30))}}, 
                {"g_V_valuesXageX_isXlte_30varX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Lte(p["xx1"]))}}, 
+               {"g_V_valuesXageX_isXoutsideX28_33XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Outside(28, 33))}}, 
                {"g_V_valuesXageX_isXgte_29X_isXlt_34X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Gte(29)).Is(P.Lt(34))}}, 
                {"g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Gte(p["xx1"])).Is(P.Lt(p["xx2"]))}}, 
                {"g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Where(__.In("created").Count().Is(1)).Values<object>("name")}}, 
@@ -2580,6 +2583,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_unionXaddVXpersonX_propertyXname_aliceX_addVXpersonX_propertyXname_bobX_addVXpersonX_propertyXname_chrisX_name",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Union<object>(__.AddV((string) "person").Property("name", "alice"), 
__.AddV((string) "person").Property("name", "bob"), __.AddV((string) 
"person").Property("name", "chris")).Values<object>("name")}}, 
                
{"g_VX_hasLabelXpersonX_unionX_whereX_out_count_isXgtX2XXX_valuesXageX_notX_whereX_bothE_count_isXgt2XXX_valusXnameXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().HasLabel("person").Union<object>(__.Where(__.OutE().Count().Is(P.Gt(2))).Values<object>("age"),
 __.Not(__.Where(__.OutE().Count().Is(P.Gt(2)))).Values<object>("name"))}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 123), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal))}},
 
+               
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", -456), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 10), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).Math("_
 + 0.5")}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_isXgtX0XX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 5), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).Is(P.Gt(0))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_sumX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 2).AddV((string) 
"data").Property("int", 3).AddV((string) "data").Property("int", 4), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).Sum<object>()}},
 
@@ -2589,6 +2593,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_injectX99X_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_groupCount",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(99).AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal)).GroupCount<object>()}},
 
                {"g_V_valuesXageX_isXtypeOfXGType_BIGDECIMALXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.TypeOf(GType.BigDecimal))}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 456), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt))}},
 
+               
{"g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", -456), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 100), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt)).Math("_
 * 1000")}}, 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_isXeqX42XX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 42), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt)).Is(P.Eq(42))}},
 
                
{"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_sumX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV((string) "data").Property("int", 10).AddV((string) 
"data").Property("int", 20).AddV((string) "data").Property("int", 30), (g,p) 
=>g.V().Values<object>("int").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt)).Sum<object>()}},
 
@@ -2949,6 +2954,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_valuesXageX_isX32varX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(p["xx1"])}}, 
                {"g_V_valuesXageX_isXlte_30X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Lte(30))}}, 
                {"g_V_valuesXageX_isXlte_30varX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Lte(p["xx1"]))}}, 
+               {"g_V_valuesXageX_isXoutsideX28_33XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Outside(28, 33))}}, 
                {"g_V_valuesXageX_isXgte_29X_isXlt_34X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Gte(29)).Is(P.Lt(34))}}, 
                {"g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("age").Is(P.Gte(p["xx1"])).Is(P.Lt(p["xx2"]))}}, 
                {"g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Where(__.In("created").Count().Is(1)).Values<object>("name")}}, 
diff --git 
a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GremlinLangTests.cs
 
b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GremlinLangTests.cs
index c7a60feaf1..d453919e25 100644
--- 
a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GremlinLangTests.cs
+++ 
b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GremlinLangTests.cs
@@ -367,6 +367,27 @@ namespace Gremlin.Net.UnitTest.Process.Traversal
                 _g.V("1", "2").Has("region", P.Within("US-TX", 
"US-GA")).GremlinLang.GetGremlin());
         }
 
+        [Fact]
+        public void g_V_Has_age_Outside_28_33()
+        {
+            Assert.Equal("g.V().has(\"age\",outside(28,33))",
+                _g.V().Has("age", P.Outside(28, 33)).GremlinLang.GetGremlin());
+        }
+
+        [Fact]
+        public void g_V_Has_age_Between_28_33()
+        {
+            Assert.Equal("g.V().has(\"age\",between(28,33))",
+                _g.V().Has("age", P.Between(28, 33)).GremlinLang.GetGremlin());
+        }
+
+        [Fact]
+        public void g_V_Has_age_Inside_28_33()
+        {
+            Assert.Equal("g.V().has(\"age\",inside(28,33))",
+                _g.V().Has("age", P.Inside(28, 33)).GremlinLang.GetGremlin());
+        }
+
         [Fact]
         public void g_V_And_Has_runways_Gt_5_Has_region_USTX()
         {
diff --git a/gremlin-go/driver/cucumber/gremlin.go 
b/gremlin-go/driver/cucumber/gremlin.go
index ad78ab4cb4..2f4e07a82e 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -182,6 +182,7 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_unionXaddVXpersonX_propertyXname_aliceX_addVXpersonX_propertyXname_bobX_addVXpersonX_propertyXname_chrisX_name":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Union(gremlingo.T__.AddV("person").Property("name", "alice"), 
gremlingo.T__.AddV("person").Property("name", "bob"), 
gremlingo.T__.AddV("person").Property("name", "chris")).Values("name")}}, 
     
"g_VX_hasLabelXpersonX_unionX_whereX_out_count_isXgtX2XXX_valuesXageX_notX_whereX_bothE_count_isXgt2XXX_valusXnameXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().HasLabel("person").Union(gremlingo.T__.Where(gremlingo.T__.OutE().Count().Is(gremlingo.P.Gt(2))).Values("age"),
 
gremlingo.T__.Not(gremlingo.T__.Where(gremlingo.T__.OutE().Count().Is(gremlingo.P.Gt(2)))).Values("name"))}},
 
     "g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 123)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal))}},
 
+    
"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", -456)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal))}},
 
     
"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 10)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal)).Math("_
 + 0.5")}}, 
     
"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_isXgtX0XX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 5)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal)).Is(gremlingo.P.Gt(0))}},
 
     
"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_sumX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 
2).AddV("data").Property("int", 3).AddV("data").Property("int", 4)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal))
 [...]
@@ -191,6 +192,7 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_injectX99X_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_groupCount":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(99).AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal)).GroupCount()}},
 
     "g_V_valuesXageX_isXtypeOfXGType_BIGDECIMALXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("age").Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal))}}, 
     "g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 456)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigInt).Is(gremlingo.P.TypeOf(gremlingo.GType.BigInt))}},
 
+    
"g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", -456)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigInt).Is(gremlingo.P.TypeOf(gremlingo.GType.BigInt))}},
 
     
"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 100)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigInt).Is(gremlingo.P.TypeOf(gremlingo.GType.BigInt)).Math("_
 * 1000")}}, 
     
"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_isXeqX42XX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 42)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigInt).Is(gremlingo.P.TypeOf(gremlingo.GType.BigInt)).Is(gremlingo.P.Eq(42))}},
 
     "g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_sumX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("data").Property("int", 
10).AddV("data").Property("int", 20).AddV("data").Property("int", 30)}, func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("int").AsNumber(gremlingo.GType.BigInt).Is(gremlingo.P.TypeOf(gremlingo.GType.BigInt)).Sum()}},
 
@@ -551,6 +553,7 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_V_valuesXageX_isX32varX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Values("age").Is(p["xx1"])}}, 
     "g_V_valuesXageX_isXlte_30X": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Values("age").Is(gremlingo.P.Lte(30))}}, 
     "g_V_valuesXageX_isXlte_30varX": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Values("age").Is(gremlingo.P.Lte(p["xx1"]))}}, 
+    "g_V_valuesXageX_isXoutsideX28_33XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("age").Is(gremlingo.P.Outside(28, 33))}}, 
     "g_V_valuesXageX_isXgte_29X_isXlt_34X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("age").Is(gremlingo.P.Gte(29)).Is(gremlingo.P.Lt(34))}}, 
     "g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("age").Is(gremlingo.P.Gte(p["xx1"])).Is(gremlingo.P.Lt(p["xx2"]))}},
 
     "g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Where(gremlingo.T__.In("created").Count().Is(1)).Values("name")}}, 
diff --git a/gremlin-go/driver/graphBinaryDeserializer.go 
b/gremlin-go/driver/graphBinaryDeserializer.go
index 920edfb374..b086cdfed4 100644
--- a/gremlin-go/driver/graphBinaryDeserializer.go
+++ b/gremlin-go/driver/graphBinaryDeserializer.go
@@ -780,7 +780,9 @@ func (d *GraphBinaryDeserializer) readBigInt() (*big.Int, 
error) {
        bi := big.NewInt(0).SetBytes(b)
        if b[0]&0x80 != 0 {
                one := big.NewInt(1)
-               bitLen := uint((len(b)*8)/8+1) * 8
+               // High bit set: the bytes are a two's-complement negative, so 
recover the
+               // signed value by subtracting 2^(bit width), where the width 
is 8 bits per byte.
+               bitLen := uint(len(b)) * 8
                bi.Sub(bi, new(big.Int).Lsh(one, bitLen))
        }
        return bi, nil
diff --git a/gremlin-go/driver/graphBinarySerializer_test.go 
b/gremlin-go/driver/graphBinarySerializer_test.go
index 7df297cc83..a3cc90b6c9 100644
--- a/gremlin-go/driver/graphBinarySerializer_test.go
+++ b/gremlin-go/driver/graphBinarySerializer_test.go
@@ -221,6 +221,29 @@ func TestGraphBinaryV4(t *testing.T) {
                        assert.Nil(t, err)
                        assert.Equal(t, new(big.Int).SetUint64(uint64(source)), 
res)
                })
+               t.Run("read-write bigInt negative", func(t *testing.T) {
+                       large, _ := 
new(big.Int).SetString("-1606938044258990275541962092341162602522202993782792835301376",
 10)
+                       for _, source := range []*big.Int{big.NewInt(-1), 
big.NewInt(-128), big.NewInt(-129), big.NewInt(-256), big.NewInt(-65535), 
large} {
+                               var buffer bytes.Buffer
+                               err := bigIntWriter(*source, &buffer, nil)
+                               assert.Nil(t, err)
+                               d := 
NewGraphBinaryDeserializer(bytes.NewReader(buffer.Bytes()))
+                               res, err := d.readBigInt()
+                               assert.Nil(t, err)
+                               assert.Equal(t, source, res)
+                       }
+               })
+               t.Run("read-write BigDecimal negative", func(t *testing.T) {
+                       for _, source := range []*BigDecimal{{2, 
big.NewInt(-1234)}, {0, big.NewInt(-1)}, {4, big.NewInt(-256)}} {
+                               var buffer bytes.Buffer
+                               err := bigDecimalWriter(source, &buffer, nil)
+                               assert.Nil(t, err)
+                               d := 
NewGraphBinaryDeserializer(bytes.NewReader(buffer.Bytes()))
+                               res, err := d.readBigDecimal()
+                               assert.Nil(t, err)
+                               assert.Equal(t, source, res)
+                       }
+               })
                t.Run("read-write list", func(t *testing.T) {
                        var buffer bytes.Buffer
                        source := []interface{}{int32(111), "str"}
diff --git a/gremlin-go/driver/gremlinlang.go b/gremlin-go/driver/gremlinlang.go
index 7e90cb341e..e5565c6837 100644
--- a/gremlin-go/driver/gremlinlang.go
+++ b/gremlin-go/driver/gremlinlang.go
@@ -136,7 +136,6 @@ func escapeString(s string) string {
        return sb.String()
 }
 
-
 func isValidParameterName(name string) bool {
        runes := []rune(name)
        if len(runes) == 0 {
@@ -481,7 +480,7 @@ func (gl *GremlinLang) translatePValue(operator string, 
values []interface{}) (s
                }
        }
 
-       if len(values) > 1 && !allTraversals && operator != "between" && 
operator != "inside" {
+       if len(values) > 1 && !allTraversals && operator != "between" && 
operator != "inside" && operator != "outside" {
                sb.WriteString("[")
        }
 
@@ -496,7 +495,7 @@ func (gl *GremlinLang) translatePValue(operator string, 
values []interface{}) (s
                }
        }
 
-       if len(values) > 1 && !allTraversals && operator != "between" && 
operator != "inside" {
+       if len(values) > 1 && !allTraversals && operator != "between" && 
operator != "inside" && operator != "outside" {
                sb.WriteString("]")
        }
        sb.WriteString(")")
diff --git a/gremlin-go/driver/gremlinlang_test.go 
b/gremlin-go/driver/gremlinlang_test.go
index c8c353b59c..dbd7b19b77 100644
--- a/gremlin-go/driver/gremlinlang_test.go
+++ b/gremlin-go/driver/gremlinlang_test.go
@@ -516,6 +516,18 @@ func Test_GremlinLang(t *testing.T) {
                        },
                        equals: "g.V().has(\"runways\",between(3,5))",
                },
+               {
+                       assert: func(g *GraphTraversalSource) *GraphTraversal {
+                               return g.V().Has("runways", P.Outside(3, 5))
+                       },
+                       equals: "g.V().has(\"runways\",outside(3,5))",
+               },
+               {
+                       assert: func(g *GraphTraversalSource) *GraphTraversal {
+                               return g.V().Has("runways", P.Inside(3, 5))
+                       },
+                       equals: "g.V().has(\"runways\",inside(3,5))",
+               },
                {
                        assert: func(g *GraphTraversalSource) *GraphTraversal {
                                return g.V().Has("runways", P.Inside(3, 5))
diff --git a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js 
b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
index 85bc334b7a..31b50c2df9 100644
--- a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
+++ b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
@@ -213,6 +213,7 @@ const gremlins = {
     
g_unionXaddVXpersonX_propertyXname_aliceX_addVXpersonX_propertyXname_bobX_addVXpersonX_propertyXname_chrisX_name:
 [function({g}) { return g.union(__.addV("person").property("name", "alice"), 
__.addV("person").property("name", "bob"), __.addV("person").property("name", 
"chris")).values("name") }], 
     
g_VX_hasLabelXpersonX_unionX_whereX_out_count_isXgtX2XXX_valuesXageX_notX_whereX_bothE_count_isXgt2XXX_valusXnameXX:
 [function({g}) { return 
g.V().hasLabel("person").union(__.where(__.outE().count().is(P.gt(2))).values("age"),
 __.not(__.where(__.outE().count().is(P.gt(2)))).values("name")) }], 
     g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX: 
[function({g}) { return g.addV("data").property("int", 123) }, function({g}) { 
return 
g.V().values("int").asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal)) 
}], 
+    
g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX:
 [function({g}) { return g.addV("data").property("int", -456) }, function({g}) 
{ return 
g.V().values("int").asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal)) 
}], 
     
g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX:
 [function({g}) { return g.addV("data").property("int", 10) }, function({g}) { 
return 
g.V().values("int").asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal)).math("_
 + 0.5") }], 
     
g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_isXgtX0XX:
 [function({g}) { return g.addV("data").property("int", 5) }, function({g}) { 
return 
g.V().values("int").asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal)).is(P.gt(0))
 }], 
     
g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_sumX: 
[function({g}) { return g.addV("data").property("int", 
2).addV("data").property("int", 3).addV("data").property("int", 4) }, 
function({g}) { return 
g.V().values("int").asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal)).sum()
 }], 
@@ -222,6 +223,7 @@ const gremlins = {
     
g_injectX99X_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_groupCount:
 [function({g}) { return 
g.inject(99).asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal)).groupCount()
 }], 
     g_V_valuesXageX_isXtypeOfXGType_BIGDECIMALXX: [function({g}) { return 
g.V().values("age").is(P.typeOf(GType.bigDecimal)) }], 
     g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX: 
[function({g}) { return g.addV("data").property("int", 456) }, function({g}) { 
return g.V().values("int").asNumber(GType.bigInt).is(P.typeOf(GType.bigInt)) 
}], 
+    g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX: 
[function({g}) { return g.addV("data").property("int", -456) }, function({g}) { 
return g.V().values("int").asNumber(GType.bigInt).is(P.typeOf(GType.bigInt)) 
}], 
     
g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX:
 [function({g}) { return g.addV("data").property("int", 100) }, function({g}) { 
return 
g.V().values("int").asNumber(GType.bigInt).is(P.typeOf(GType.bigInt)).math("_ * 
1000") }], 
     
g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_isXeqX42XX: 
[function({g}) { return g.addV("data").property("int", 42) }, function({g}) { 
return 
g.V().values("int").asNumber(GType.bigInt).is(P.typeOf(GType.bigInt)).is(P.eq(42))
 }], 
     g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_sumX: 
[function({g}) { return g.addV("data").property("int", 
10).addV("data").property("int", 20).addV("data").property("int", 30) }, 
function({g}) { return 
g.V().values("int").asNumber(GType.bigInt).is(P.typeOf(GType.bigInt)).sum() }], 
@@ -582,6 +584,7 @@ const gremlins = {
     g_V_valuesXageX_isX32varX: [function({g, xx1}) { return 
g.V().values("age").is(xx1) }], 
     g_V_valuesXageX_isXlte_30X: [function({g}) { return 
g.V().values("age").is(P.lte(30)) }], 
     g_V_valuesXageX_isXlte_30varX: [function({g, xx1}) { return 
g.V().values("age").is(P.lte(xx1)) }], 
+    g_V_valuesXageX_isXoutsideX28_33XX: [function({g}) { return 
g.V().values("age").is(P.outside(28, 33)) }], 
     g_V_valuesXageX_isXgte_29X_isXlt_34X: [function({g}) { return 
g.V().values("age").is(P.gte(29)).is(P.lt(34)) }], 
     g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX: [function({g, xx1, xx2}) { 
return g.V().values("age").is(P.gte(xx1)).is(P.lt(xx2)) }], 
     g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX: [function({g}) { return 
g.V().where(__.in_("created").count().is(1)).values("name") }], 
diff --git a/gremlin-python/src/main/python/tests/feature/gremlin.py 
b/gremlin-python/src/main/python/tests/feature/gremlin.py
index 4e346fe4ef..3e779314b2 100644
--- a/gremlin-python/src/main/python/tests/feature/gremlin.py
+++ b/gremlin-python/src/main/python/tests/feature/gremlin.py
@@ -187,6 +187,7 @@ world.gremlins = {
     
'g_unionXaddVXpersonX_propertyXname_aliceX_addVXpersonX_propertyXname_bobX_addVXpersonX_propertyXname_chrisX_name':
 [(lambda g:g.union(__.add_v('person').property('name', 'alice'), 
__.add_v('person').property('name', 'bob'), __.add_v('person').property('name', 
'chris')).values('name'))], 
     
'g_VX_hasLabelXpersonX_unionX_whereX_out_count_isXgtX2XXX_valuesXageX_notX_whereX_bothE_count_isXgt2XXX_valusXnameXX':
 [(lambda 
g:g.V().has_label('person').union(__.where(__.out_e().count().is_(P.gt(2))).values('age'),
 __.not_(__.where(__.out_e().count().is_(P.gt(2)))).values('name')))], 
     'g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX': 
[(lambda g:g.add_v('data').property('int', 123)), (lambda 
g:g.V().values('int').as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL)))],
 
+    
'g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX':
 [(lambda g:g.add_v('data').property('int', -456)), (lambda 
g:g.V().values('int').as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL)))],
 
     
'g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX':
 [(lambda g:g.add_v('data').property('int', 10)), (lambda 
g:g.V().values('int').as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL)).math('_
 + 0.5'))], 
     
'g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_isXgtX0XX':
 [(lambda g:g.add_v('data').property('int', 5)), (lambda 
g:g.V().values('int').as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL)).is_(P.gt(0)))],
 
     
'g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_sumX': 
[(lambda g:g.add_v('data').property('int', 2).add_v('data').property('int', 
3).add_v('data').property('int', 4)), (lambda 
g:g.V().values('int').as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL)).sum_())],
 
@@ -196,6 +197,7 @@ world.gremlins = {
     
'g_injectX99X_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_groupCount':
 [(lambda 
g:g.inject(99).as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL)).group_count())],
 
     'g_V_valuesXageX_isXtypeOfXGType_BIGDECIMALXX': [(lambda 
g:g.V().values('age').is_(P.type_of(GType.BIGDECIMAL)))], 
     'g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX': 
[(lambda g:g.add_v('data').property('int', 456)), (lambda 
g:g.V().values('int').as_number(GType.BIGINT).is_(P.type_of(GType.BIGINT)))], 
+    
'g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX': 
[(lambda g:g.add_v('data').property('int', -456)), (lambda 
g:g.V().values('int').as_number(GType.BIGINT).is_(P.type_of(GType.BIGINT)))], 
     
'g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX':
 [(lambda g:g.add_v('data').property('int', 100)), (lambda 
g:g.V().values('int').as_number(GType.BIGINT).is_(P.type_of(GType.BIGINT)).math('_
 * 1000'))], 
     
'g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_isXeqX42XX': 
[(lambda g:g.add_v('data').property('int', 42)), (lambda 
g:g.V().values('int').as_number(GType.BIGINT).is_(P.type_of(GType.BIGINT)).is_(P.eq(42)))],
 
     'g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_sumX': 
[(lambda g:g.add_v('data').property('int', 10).add_v('data').property('int', 
20).add_v('data').property('int', 30)), (lambda 
g:g.V().values('int').as_number(GType.BIGINT).is_(P.type_of(GType.BIGINT)).sum_())],
 
@@ -556,6 +558,7 @@ world.gremlins = {
     'g_V_valuesXageX_isX32varX': [(lambda g, 
xx1=None:g.V().values('age').is_(xx1))], 
     'g_V_valuesXageX_isXlte_30X': [(lambda 
g:g.V().values('age').is_(P.lte(30)))], 
     'g_V_valuesXageX_isXlte_30varX': [(lambda g, 
xx1=None:g.V().values('age').is_(P.lte(xx1)))], 
+    'g_V_valuesXageX_isXoutsideX28_33XX': [(lambda 
g:g.V().values('age').is_(P.outside(28, 33)))], 
     'g_V_valuesXageX_isXgte_29X_isXlt_34X': [(lambda 
g:g.V().values('age').is_(P.gte(29)).is_(P.lt(34)))], 
     'g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX': [(lambda g, 
xx1=None,xx2=None:g.V().values('age').is_(P.gte(xx1)).is_(P.lt(xx2)))], 
     'g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX': [(lambda 
g:g.V().where(__.in_('created').count().is_(1)).values('name'))], 
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json
index 903b797992..65dc301518 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json
@@ -2616,6 +2616,35 @@
             }
         ]
     },
+    {
+        "scenario": 
"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX",
+        "traversals": [
+            {
+                "original": "g.addV(\"data\").property(\"int\", -456)",
+                "language": "g.addV(\"data\").property(\"int\", -456)",
+                "canonical": "g.addV(\"data\").property(\"int\", -456)",
+                "anonymized": "g.addV(string0).property(string1, number0)",
+                "dotnet": "g.AddV((string) \"data\").Property(\"int\", -456)",
+                "go": "g.AddV(\"data\").Property(\"int\", -456)",
+                "groovy": "g.addV(\"data\").property(\"int\", -456)",
+                "java": "g.addV(\"data\").property(\"int\", -456)",
+                "javascript": "g.addV(\"data\").property(\"int\", -456)",
+                "python": "g.add_v('data').property('int', -456)"
+            },
+            {
+                "original": 
"g.V().values(\"int\").asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))",
+                "language": 
"g.V().values(\"int\").asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))",
+                "canonical": 
"g.V().values(\"int\").asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))",
+                "anonymized": 
"g.V().values(string0).asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))",
+                "dotnet": 
"g.V().Values<object>(\"int\").AsNumber(GType.BigDecimal).Is(P.TypeOf(GType.BigDecimal))",
+                "go": 
"g.V().Values(\"int\").AsNumber(gremlingo.GType.BigDecimal).Is(gremlingo.P.TypeOf(gremlingo.GType.BigDecimal))",
+                "groovy": 
"g.V().values(\"int\").asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))",
+                "java": 
"g.V().values(\"int\").asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))",
+                "javascript": 
"g.V().values(\"int\").asNumber(GType.bigDecimal).is(P.typeOf(GType.bigDecimal))",
+                "python": 
"g.V().values('int').as_number(GType.BIGDECIMAL).is_(P.type_of(GType.BIGDECIMAL))"
+            }
+        ]
+    },
     {
         "scenario": 
"g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX",
         "traversals": [
@@ -2853,6 +2882,35 @@
             }
         ]
     },
+    {
+        "scenario": 
"g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX",
+        "traversals": [
+            {
+                "original": "g.addV(\"data\").property(\"int\", -456)",
+                "language": "g.addV(\"data\").property(\"int\", -456)",
+                "canonical": "g.addV(\"data\").property(\"int\", -456)",
+                "anonymized": "g.addV(string0).property(string1, number0)",
+                "dotnet": "g.AddV((string) \"data\").Property(\"int\", -456)",
+                "go": "g.AddV(\"data\").Property(\"int\", -456)",
+                "groovy": "g.addV(\"data\").property(\"int\", -456)",
+                "java": "g.addV(\"data\").property(\"int\", -456)",
+                "javascript": "g.addV(\"data\").property(\"int\", -456)",
+                "python": "g.add_v('data').property('int', -456)"
+            },
+            {
+                "original": 
"g.V().values(\"int\").asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))",
+                "language": 
"g.V().values(\"int\").asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))",
+                "canonical": 
"g.V().values(\"int\").asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))",
+                "anonymized": 
"g.V().values(string0).asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))",
+                "dotnet": 
"g.V().Values<object>(\"int\").AsNumber(GType.BigInt).Is(P.TypeOf(GType.BigInt))",
+                "go": 
"g.V().Values(\"int\").AsNumber(gremlingo.GType.BigInt).Is(gremlingo.P.TypeOf(gremlingo.GType.BigInt))",
+                "groovy": 
"g.V().values(\"int\").asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))",
+                "java": 
"g.V().values(\"int\").asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))",
+                "javascript": 
"g.V().values(\"int\").asNumber(GType.bigInt).is(P.typeOf(GType.bigInt))",
+                "python": 
"g.V().values('int').as_number(GType.BIGINT).is_(P.type_of(GType.BIGINT))"
+            }
+        ]
+    },
     {
         "scenario": 
"g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX",
         "traversals": [
@@ -10095,6 +10153,23 @@
             }
         ]
     },
+    {
+        "scenario": "g_V_valuesXageX_isXoutsideX28_33XX",
+        "traversals": [
+            {
+                "original": "g.V().values(\"age\").is(P.outside(28, 33))",
+                "language": "g.V().values(\"age\").is(P.outside(28, 33))",
+                "canonical": "g.V().values(\"age\").is(P.outside(28, 33))",
+                "anonymized": "g.V().values(string0).is(P.outside(number0, 
number1))",
+                "dotnet": "g.V().Values<object>(\"age\").Is(P.Outside(28, 
33))",
+                "go": "g.V().Values(\"age\").Is(gremlingo.P.Outside(28, 33))",
+                "groovy": "g.V().values(\"age\").is(P.outside(28, 33))",
+                "java": "g.V().values(\"age\").is(P.outside(28, 33))",
+                "javascript": "g.V().values(\"age\").is(P.outside(28, 33))",
+                "python": "g.V().values('age').is_(P.outside(28, 33))"
+            }
+        ]
+    },
     {
         "scenario": "g_V_valuesXageX_isXgte_29X_isXlt_34X",
         "traversals": [
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigDecimal.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigDecimal.feature
index 64c1de0bcb..95734322d9 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigDecimal.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigDecimal.feature
@@ -33,6 +33,21 @@ Feature: Data - BIGDECIMAL
       | result |
       | d[123].m |
 
+  Scenario: 
g_V_valuesXintX_asNumberXGType_BIGDECIMALX_negative_isXtypeOfXGType_BIGDECIMALXX
+    Given the empty graph
+    And the graph initializer of
+      """
+      g.addV("data").property("int", -456)
+      """
+    And the traversal of
+      """
+      
g.V().values("int").asNumber(GType.BIGDECIMAL).is(P.typeOf(GType.BIGDECIMAL))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-456].m |
+
   Scenario: 
g_V_valuesXintX_asNumberXGType_BIGDECIMALX_isXtypeOfXGType_BIGDECIMALXX_mathXaddX0_5XX
     Given the empty graph
     And the graph initializer of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigInt.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigInt.feature
index 7cff49d0e7..95501b5554 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigInt.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigInt.feature
@@ -33,6 +33,21 @@ Feature: Data - BIGINT
       | result |
       | d[456].n |
 
+  Scenario: 
g_V_valuesXintX_asNumberXGType_BIGINTX_negative_isXtypeOfXGType_BIGINTXX
+    Given the empty graph
+    And the graph initializer of
+      """
+      g.addV("data").property("int", -456)
+      """
+    And the traversal of
+      """
+      g.V().values("int").asNumber(GType.BIGINT).is(P.typeOf(GType.BIGINT))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-456].n |
+
   Scenario: 
g_V_valuesXintX_asNumberXGType_BIGINTX_isXtypeOfXGType_BIGINTXX_mathXmulX1000XX
     Given the empty graph
     And the graph initializer of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Is.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Is.feature
index 93afd854b9..b79471b0e9 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Is.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Is.feature
@@ -66,6 +66,18 @@ Feature: Step - is()
       | d[27].i |
       | d[29].i |
 
+  Scenario: g_V_valuesXageX_isXoutsideX28_33XX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().values("age").is(P.outside(28, 33))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[27].i |
+      | d[35].i |
+
   Scenario: g_V_valuesXageX_isXgte_29X_isXlt_34X
     Given the modern graph
     And the traversal of


Reply via email to