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

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


The following commit(s) were added to refs/heads/3.8-dev by this push:
     new 9c7a54c939 TINKERPOP-3115 Better handle overflows with sum() (#3121)
9c7a54c939 is described below

commit 9c7a54c9397357c3216329d5ff67513f8261b99a
Author: Peter Tribe <[email protected]>
AuthorDate: Wed Jun 4 19:43:37 2025 -0600

    TINKERPOP-3115 Better handle overflows with sum() (#3121)
    
    Promote to next highest number type to prevent sum step from overflowing
---
 CHANGELOG.asciidoc                                 |   1 +
 docs/src/dev/provider/gremlin-semantics.asciidoc   |  12 +-
 docs/src/upgrade/release-3.8.x.asciidoc            |  66 +++++-
 .../tinkerpop/gremlin/util/NumberHelper.java       | 168 ++++++++++++---
 .../tinkerpop/gremlin/util/NumberHelperTest.java   | 154 +++++++++++++-
 gremlin-dotnet/build/generate.groovy               |   6 +-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  55 +++--
 gremlin-go/driver/cucumber/gremlin.go              |  55 +++--
 .../internals/NumberSerializationStrategy.js       |   7 +-
 .../gremlin-javascript/test/cucumber/gremlin.js    |  55 +++--
 gremlin-python/src/main/python/radish/gremlin.py   |  55 +++--
 .../gremlin/test/features/map/Sum.feature          |  72 +++++++
 .../gremlin/test/features/sideEffect/Sack.feature  | 228 +++++++++++++++++++++
 13 files changed, 800 insertions(+), 134 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 37786863fb..ae9e0e91b8 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <<release-3-7-XXX, 3.7.XXX>>.
 
+* Modified mathematical operators to prevent overflows in steps such as 
`sum()` and 'sack()' to prefer promotion to the next highest number type.
 * Added `DateTime` ontop of the existing 'datetime' grammar.
 * Added UUID() + UUID(value) to grammar
 * Modified `TraversalStrategy` construction in Javascript where configurations 
are now supplied as a `Map` of options.
diff --git a/docs/src/dev/provider/gremlin-semantics.asciidoc 
b/docs/src/dev/provider/gremlin-semantics.asciidoc
index cccf548560..a499a015fe 100644
--- a/docs/src/dev/provider/gremlin-semantics.asciidoc
+++ b/docs/src/dev/provider/gremlin-semantics.asciidoc
@@ -85,7 +85,7 @@ TinkerPop performs type promotion a.k.a type casting for 
Numbers. Numbers are By
 Double, BigInteger, and BigDecimal. In general, numbers are compared using 
semantic equivalence, without regard for
 their specific type, e.g. `1 == 1.0`.
 
-Numeric types are promoted as follows:
+For comparisons numeric types are promoted as follows:
 
 * First determine whether to use floating point or not. If any numbers in the 
comparison are floating point then we
 convert all of them to floating point.
@@ -104,6 +104,16 @@ convert all of them to floating point.
 BigDecimal and BigInteger may not be supported depending on the language and 
Storage, therefore the behavior of type
 casting for these two types can vary depending on a Graph provider.
 
+For numeric type mathematical operations (div/mul/add/sub), types are promoted 
as follows:
+
+On math operations (when used in steps such as sum/sack) the highest common 
number class between
+the two inputs is used. Any number being floating point forces a floating 
point result.
+If an overflow occurs (either integer or floating-point), the method promotes 
the precision
+by increasing the bit width, until a suitable type is found. If no suitable 
type exists
+(e.g., for very large integers beyond 64-bit), an Arithmetic Exception is 
thrown.
+For floating-point numbers, if double overflows, the result is 
Double.POSITIVE_INFINITY
+or Double.NEGATIVE_INFINITY instead of an exception.
+
 [[gremlin-semantics-concepts]]
 == Comparability, Equality, Orderability, and Equivalence
 
diff --git a/docs/src/upgrade/release-3.8.x.asciidoc 
b/docs/src/upgrade/release-3.8.x.asciidoc
index 0ff2596db1..c1de647afc 100644
--- a/docs/src/upgrade/release-3.8.x.asciidoc
+++ b/docs/src/upgrade/release-3.8.x.asciidoc
@@ -30,6 +30,47 @@ complete list of all the modifications that are part of this 
release.
 
 === Upgrading for Users
 
+==== Auto promotion of number types
+
+Previously, operations like sum or sack that involved mathematical 
calculations did not automatically promote the result
+to a larger numeric type (e.g., from int to long) when needed. As a result, 
values could wrap around within their current
+type, leading to unexpected behavior. This issue has now been resolved by 
enabling automatic type promotion for results.
+
+Now, any mathematical operations such as Add, Sub, Mul, and Div will now 
automatically promote to the next numeric type
+if an overflow is detected. For integers, the promotion sequence is: byte → 
short → int → long → overflow exception. For
+floating-point numbers, the sequence is: float → double → infinity.
+
+The following example showcases the change in overflow behavior between 3.7.3 
and 3.8.0
+
+[source,groovy]
+----
+// 3.7.3
+gremlin> g.inject([Byte.MAX_VALUE, (byte) 1], [Short.MAX_VALUE, (short) 1], 
[Integer.MAX_VALUE,1], [Long.MAX_VALUE, 1l]).sum(local)
+==>-128 // byte
+==>-32768 // short
+==>-2147483648 // int
+==>-9223372036854775808 // long
+
+gremlin> g.inject([Float.MAX_VALUE, Float.MAX_VALUE], [Double.MAX_VALUE, 
Double.MAX_VALUE]).sum(local)
+==>Infinity // float
+==>Infinity // double
+
+// 3.8.0
+gremlin> g.inject([Byte.MAX_VALUE, (byte) 1], [Short.MAX_VALUE, (short) 1], 
[Integer.MAX_VALUE,1]).sum(local)
+==>128 // short
+==>32768 // int
+==>2147483648 // long
+
+gremlin> g.inject([Long.MAX_VALUE, 1l]).sum(local)
+// throws java.lang.ArithmeticException: long overflow
+
+gremlin> g.inject([Float.MAX_VALUE, Float.MAX_VALUE], [Double.MAX_VALUE, 
Double.MAX_VALUE]).sum(local)
+==>6.805646932770577E38 // double
+==>Infinity // double
+----
+
+See link:https://issues.apache.org/jira/browse/TINKERPOP-3115[TINKERPOP-3115] 
for more details.
+
 ==== The Switch from Date to OffsetDateTime
 The default implementation for date type in Gremlin is now changed from the 
`java.util.Date` to the more encompassing `java.time.OffsetDateTime`. This 
means the reference implementation for all date manipulation steps, `asDate()`, 
`dateAdd()`, and `dateDiff()`, as well as helper methods `datetime()`, will 
return `OffsetDateTime`, whose string representation will be in ISO 8601 format.
 
@@ -254,11 +295,6 @@ The GLVs will only support GraphBinary V4 and GraphSON 
support has been removed.
 that was available in most GLVs has been removed. GraphBinary is a more 
compact format and has support for the same
 types. This should lead to increased performance for users upgrading from any 
version of GraphSON to GraphBinary.
 
-==== Improved handling of integer overflows
-
-Integer overflows caused by addition and multiplication operations will throw 
an exception instead of being silently
-skipped with incorrect result.
-
 ==== Gremlin Lang Float Literals Default to Double
 
 The `GremlinLangScriptEngine` has been modified to treat float literals 
without explicit type suffixes (like 'm', 'f',
@@ -334,6 +370,26 @@ 
link:https://tinkerpop.apache.org/docs/3.8.0/dev/provider/#gherkin-tests-suite[P
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-3136[TINKERPOP-3136]
 
+==== Auto promotion of number types
+
+Previously, operations like sum or sack that involved mathematical 
calculations did not automatically promote the result
+to a larger numeric type (e.g., from int to long) when needed. As a result, 
values could wrap around within their current
+type, leading to unexpected behavior. This issue has now been resolved by 
enabling automatic type promotion for results.
+
+Now, any mathematical operations such as Add, Sub, Mul, and Div will now 
automatically promote to the next numeric type
+if an overflow is detected. For integers, the promotion sequence is: byte → 
short → int → long → overflow exception. For
+floating-point numbers, the sequence is: float → double → infinity.
+
+As a example the following query...
+
+"""
+g.withSack(32767s).inject(1s).sack(sum).sack()
+"""
+
+Before would return a short overflow exception or wrap to -1 depending on 
language, but now returns 32769i.
+
+See link:https://issues.apache.org/jira/browse/TINKERPOP-3115[TINKERPOP-3115] 
for more details.
+
 ==== The Switch from Date to OffsetDateTime
 
 The default implementation for date type in Gremlin is now changed from the 
deprecated `java.util.Date` to the more encompassing 
`java.time.OffsetDateTime`. This means the reference implementation for all 
date manipulation steps, `asDate()`, `dateAdd()`, and `dateDiff()`, as well as 
helper methods `datetime()`, will return `OffsetDateTime`, whose string 
representation will be in ISO 8601 format.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/NumberHelper.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/NumberHelper.java
index 1010abd499..78df426e9f 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/NumberHelper.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/NumberHelper.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.util;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.MathContext;
+import java.util.function.Function;
 import java.util.function.BiFunction;
 
 /**
@@ -28,6 +29,29 @@ import java.util.function.BiFunction;
  */
 public final class NumberHelper {
 
+    static final class NumberInfo {
+
+        private int bits;
+        private final boolean fp;
+
+        public int getBits() {
+            return bits;
+        }
+
+        public boolean getFp() {
+            return fp;
+        }
+
+        public void promoteBits() {
+            bits <<= 1;
+        }
+
+        NumberInfo(int bits, boolean fp) {
+            this.bits = bits;
+            this.fp = fp;
+        }
+    }
+
     private static byte asByte(int arg) {
         if (arg > Byte.MAX_VALUE || arg < Byte.MIN_VALUE)
             throw new ArithmeticException("byte overflow");
@@ -44,7 +68,12 @@ public final class NumberHelper {
             (a, b) -> asByte(a.byteValue() + b.byteValue()),
             (a, b) -> asByte(a.byteValue() - b.byteValue()),
             (a, b) -> asByte(a.byteValue() * b.byteValue()),
-            (a, b) -> (byte) (a.byteValue() / b.byteValue()),
+            (a, b) -> {
+                if (a.byteValue() == Byte.MIN_VALUE && b.byteValue() == -1) {
+                    throw new ArithmeticException("byte overflow");
+                }
+                return (byte)(a.byteValue() / b.byteValue());
+            },
             (a, b) -> {
                 if (isNumber(a)) {
                     if (isNumber(b)) {
@@ -71,7 +100,12 @@ public final class NumberHelper {
             (a, b) -> asShort(a.shortValue() + b.shortValue()),
             (a, b) -> asShort(a.shortValue() - b.shortValue()),
             (a, b) -> asShort(a.shortValue() * b.shortValue()),
-            (a, b) -> (short) (a.shortValue() / b.shortValue()),
+            (a, b) -> {
+                if (a.shortValue() == Short.MIN_VALUE && b.shortValue() == -1) 
{
+                    throw new ArithmeticException("short overflow");
+                }
+                return (short)(a.shortValue() / b.shortValue());
+            },
             (a, b) -> {
                 if (isNumber(a)) {
                     if (isNumber(b)) {
@@ -98,7 +132,12 @@ public final class NumberHelper {
             (a, b) -> Math.addExact(a.intValue(), b.intValue()),
             (a, b) -> Math.subtractExact(a.intValue(), b.intValue()),
             (a, b) -> Math.multiplyExact(a.intValue(), b.intValue()),
-            (a, b) -> a.intValue() / b.intValue(),
+            (a, b) -> {
+                if (a.intValue() == Integer.MIN_VALUE && b.intValue() == -1) {
+                    throw new ArithmeticException("integer overflow");
+                }
+                return a.intValue() / b.intValue();
+            },
             (a, b) -> {
                 if (isNumber(a)) {
                     if (isNumber(b)) {
@@ -125,7 +164,12 @@ public final class NumberHelper {
             (a, b) -> Math.addExact(a.longValue(), b.longValue()),
             (a, b) -> Math.subtractExact(a.longValue(), b.longValue()),
             (a, b) -> Math.multiplyExact(a.longValue(), b.longValue()),
-            (a, b) -> a.longValue() / b.longValue(),
+            (a, b) -> {
+                if (a.longValue() == Long.MIN_VALUE && b.longValue() == -1) {
+                    throw new ArithmeticException("long overflow");
+                }
+                return a.longValue() / b.longValue();
+            },
             (a, b) -> {
                 if (isNumber(a)) {
                     if (isNumber(b)) {
@@ -312,11 +356,7 @@ public final class NumberHelper {
         this.cmp = cmp;
     }
 
-    public static Class<? extends Number> getHighestCommonNumberClass(final 
Number... numbers) {
-        return getHighestCommonNumberClass(false, numbers);
-    }
-
-    public static Class<? extends Number> getHighestCommonNumberClass(final 
boolean forceFloatingPoint, final Number... numbers) {
+    static NumberInfo getHighestCommonNumberInfo(final boolean 
forceFloatingPoint, final Number... numbers) {
         int bits = 8;
         boolean fp = forceFloatingPoint;
         for (final Number number : numbers) {
@@ -324,31 +364,78 @@ public final class NumberHelper {
             final Class<? extends Number> clazz = number.getClass();
             if (clazz.equals(Byte.class)) continue;
             if (clazz.equals(Short.class)) {
-                bits = bits < 16 ? 16 : bits;
+                bits = Math.max(bits, 16);
             } else if (clazz.equals(Integer.class)) {
-                bits = bits < 32 ? 32 : bits;
+                bits = Math.max(bits, 32);
             } else if (clazz.equals(Long.class)) {
-                bits = bits < 64 ? 64 : bits;
+                bits = Math.max(bits, 64);
             } else if (clazz.equals(BigInteger.class)) {
-                bits = bits < 128 ? 128 : bits;
+                bits = 128;
             } else if (clazz.equals(Float.class)) {
-                bits = bits < 32 ? 32 : bits;
+                bits = Math.max(bits, 32);
                 fp = true;
             } else if (clazz.equals(Double.class)) {
-                bits = bits < 64 ? 64 : bits;
+                bits = Math.max(bits, 64);
                 fp = true;
             } else /*if (clazz.equals(BigDecimal.class))*/ {
-                bits = bits < 128 ? 128 : bits;
+                bits = 128;
                 fp = true;
                 break; // maxed out, no need to check remaining numbers
             }
         }
-        return determineNumberClass(bits, fp);
+        return  new NumberInfo(bits, fp);
+    }
+
+    public static Class<? extends Number> getHighestCommonNumberClass(final 
Number... numbers) {
+        return getHighestCommonNumberClass(false, numbers);
+    }
+
+    public static Class<? extends Number> getHighestCommonNumberClass(final 
boolean forceFloatingPoint, final Number... numbers) {
+        NumberInfo numberInfo = getHighestCommonNumberInfo(forceFloatingPoint, 
numbers);
+        return determineNumberClass(numberInfo.getBits(), numberInfo.getFp());
+    }
+
+    private static Number mathOperationWithPromote(final 
Function<NumberHelper, BiFunction<Number, Number, Number>> mathFunction, final 
boolean forceFloatingPoint, final Number a, final Number b) {
+        if (null == a || null == b) return a;
+        NumberInfo numberInfo = getHighestCommonNumberInfo(forceFloatingPoint, 
a, b);
+        Number result = 0;
+        while (true) {
+            try {
+                final Class<? extends Number> clazz = 
determineNumberClass(numberInfo.getBits(), numberInfo.getFp());
+                final NumberHelper helper = getHelper(clazz);
+                result = mathFunction.apply(helper).apply(a, b);
+                if (result instanceof BigInteger || result instanceof 
BigDecimal)
+                {
+                    return result;
+                }
+                if (Double.isInfinite(result.doubleValue()))
+                {
+                    throw new ArithmeticException("Floating point overflow 
detected");
+                }
+                return result;
+            } catch (ArithmeticException exception) {
+                if (!numberInfo.getFp() && numberInfo.getBits() >= 64) {
+                    throw exception;
+                } else if (numberInfo.getFp() && numberInfo.getBits() >= 64) {
+                    return result;
+                }
+                numberInfo.promoteBits();
+            }
+        }
     }
 
     /**
      * Adds two numbers returning the highest common number class between them.
      *
+     * <p>
+     * This method returns a result using the highest common number class 
between the two inputs.
+     * If an overflow occurs (either integer or floating-point), the method 
promotes the precision
+     * by increasing the bit width, until a suitable type is found.
+     * If no suitable type exists (e.g., for very large integers beyond 
64-bit),
+     * an {@link ArithmeticException} is thrown. For floating-point numbers, 
if {@code double} overflows,
+     * the result is {@code Double.POSITIVE_INFINITY} or {@code 
Double.NEGATIVE_INFINITY} instead of an exception.
+     * </p>
+     *
      * <pre>
      *     a = 1, b = 1 -> 2
      *     a = null, b = 1 -> null
@@ -360,15 +447,21 @@ public final class NumberHelper {
      * @param b the modifier to {code a}
      */
     public static Number add(final Number a, final Number b) {
-        if (null == a || null == b) return a;
-        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, 
b);
-        return getHelper(clazz).add.apply(a, b);
+        return mathOperationWithPromote(numberHelper -> numberHelper.add, 
false, a, b);
     }
 
-
     /**
      * Subtracts two numbers returning the highest common number class between 
them.
      *
+     * <p>
+     * This method returns a result using the highest common number class 
between the two inputs.
+     * If an overflow occurs (either integer or floating-point), the method 
promotes the precision
+     * by increasing the bit width, until a suitable type is found.
+     * If no suitable type exists (e.g., for very large integers beyond 
64-bit),
+     * an {@link ArithmeticException} is thrown. For floating-point numbers, 
if {@code double} overflows,
+     * the result is {@code Double.POSITIVE_INFINITY} or {@code 
Double.NEGATIVE_INFINITY} instead of an exception.
+     * </p>
+     *
      * <pre>
      *     a = 1, b = 1 -> 0
      *     a = null, b = 1 -> null
@@ -380,14 +473,21 @@ public final class NumberHelper {
      * @param b the modifier to {code a}
      */
     public static Number sub(final Number a, final Number b) {
-        if (null == a || null == b) return a;
-        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, 
b);
-        return getHelper(clazz).sub.apply(a, b);
+        return mathOperationWithPromote(numberHelper -> numberHelper.sub, 
false, a, b);
     }
 
     /**
      * Multiplies two numbers returning the highest common number class 
between them.
      *
+     * <p>
+     * This method returns a result using the highest common number class 
between the two inputs.
+     * If an overflow occurs (either integer or floating-point), the method 
promotes the precision
+     * by increasing the bit width, until a suitable type is found.
+     * If no suitable type exists (e.g., for very large integers beyond 
64-bit),
+     * an {@link ArithmeticException} is thrown. For floating-point numbers, 
if {@code double} overflows,
+     * the result is {@code Double.POSITIVE_INFINITY} or {@code 
Double.NEGATIVE_INFINITY} instead of an exception.
+     * </p>
+     *
      * <pre>
      *     a = 1, b = 2 -> 2
      *     a = null, b = 1 -> null
@@ -399,9 +499,7 @@ public final class NumberHelper {
      * @param b the modifier to {code a}
      */
     public static Number mul(final Number a, final Number b) {
-        if (null == a || null == b) return a;
-        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, 
b);
-        return getHelper(clazz).mul.apply(a, b);
+        return mathOperationWithPromote(numberHelper -> numberHelper.mul, 
false, a, b);
     }
 
     /**
@@ -409,13 +507,21 @@ public final class NumberHelper {
      * {@link #div(Number, Number, boolean)} with a {@code false}.
      */
     public static Number div(final Number a, final Number b) {
-        if (null == a || null == b) return a;
-        return div(a, b, false);
+        return mathOperationWithPromote(numberHelper -> numberHelper.div, 
false, a, b);
     }
 
     /**
      * Divides two numbers returning the highest common number class between 
them.
      *
+     * <p>
+     * This method returns a result using the highest common number class 
between the two inputs.
+     * If an overflow occurs (either integer or floating-point), the method 
promotes the precision
+     * by increasing the bit width, until a suitable type is found.
+     * If no suitable type exists (e.g., for very large integers beyond 
64-bit),
+     * an {@link ArithmeticException} is thrown. For floating-point numbers, 
if {@code double} overflows,
+     * the result is {@code Double.POSITIVE_INFINITY} or {@code 
Double.NEGATIVE_INFINITY} instead of an exception.
+     * </p>
+     *
      * <pre>
      *     a = 4, b = 2 -> 2
      *     a = null, b = 1 -> null
@@ -428,9 +534,7 @@ public final class NumberHelper {
      * @param forceFloatingPoint when set to {@code true} ensures that the 
return value is the highest common floating number class
      */
     public static Number div(final Number a, final Number b, final boolean 
forceFloatingPoint) {
-        if (null == a || null == b) return null;
-        final Class<? extends Number> clazz = 
getHighestCommonNumberClass(forceFloatingPoint, a, b);
-        return getHelper(clazz).div.apply(a, b);
+        return mathOperationWithPromote(numberHelper -> numberHelper.div, 
forceFloatingPoint, a, b);
     }
 
     /**
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/NumberHelperTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/NumberHelperTest.java
index 0c36889239..314be66fcb 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/NumberHelperTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/NumberHelperTest.java
@@ -32,12 +32,16 @@ import static 
org.apache.tinkerpop.gremlin.util.NumberHelper.add;
 import static org.apache.tinkerpop.gremlin.util.NumberHelper.compare;
 import static org.apache.tinkerpop.gremlin.util.NumberHelper.div;
 import static 
org.apache.tinkerpop.gremlin.util.NumberHelper.getHighestCommonNumberClass;
+import static 
org.apache.tinkerpop.gremlin.util.NumberHelper.getHighestCommonNumberInfo;
 import static org.apache.tinkerpop.gremlin.util.NumberHelper.max;
 import static org.apache.tinkerpop.gremlin.util.NumberHelper.min;
 import static org.apache.tinkerpop.gremlin.util.NumberHelper.mul;
 import static org.apache.tinkerpop.gremlin.util.NumberHelper.sub;
+import static org.apache.tinkerpop.gremlin.util.NumberHelper.NumberInfo;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -50,6 +54,17 @@ public class NumberHelperTest {
             (byte) 1, (short) 1, 1, 1L, 1F, 1D, BigInteger.ONE, BigDecimal.ONE
     );
 
+    private final static List<Triplet<Number, Integer, Boolean>> 
NUMBER_INFO_CASES = Arrays.asList(
+            new Triplet<>((byte)1, 8, false),
+            new Triplet<>((short)1, 16, false),
+            new Triplet<>(1, 32, false),
+            new Triplet<>(1L, 64, false),
+            new Triplet<>(BigInteger.ONE, 128, false),
+            new Triplet<>(1F, 32, true),
+            new Triplet<>(1D, 64, true),
+            new Triplet<>(BigDecimal.ONE, 128, true)
+    );
+
     private final static List<Quartet<Number, Number, Class<? extends Number>, 
Class<? extends Number>>> COMMON_NUMBER_CLASSES =
             Arrays.asList(
                     // BYTE
@@ -99,20 +114,41 @@ public class NumberHelperTest {
             );
 
     private final static List<Triplet<Number, Number, String>> OVERFLOW_CASES 
= Arrays.asList(
-            new Triplet<>(Integer.MAX_VALUE, 1, "add"),
-            new Triplet<>(Integer.MIN_VALUE, 1, "sub"),
-            new Triplet<>(Integer.MAX_VALUE, Integer.MAX_VALUE, "mul"),
             new Triplet<>(Long.MAX_VALUE, 1L, "add"),
             new Triplet<>(Long.MIN_VALUE, 1L, "sub"),
-            new Triplet<>(Long.MAX_VALUE,  Integer.MAX_VALUE, "mul"),
-            new Triplet<>(Byte.MAX_VALUE, (byte)100, "add"),
-            new Triplet<>(Byte.MIN_VALUE, (byte)100, "sub"),
-            new Triplet<>((byte)100, (byte)100, "mul"),
-            new Triplet<>(Short.MAX_VALUE, (short)100, "add"),
-            new Triplet<>(Short.MIN_VALUE, (short)100, "sub"),
-            new Triplet<>(Short.MAX_VALUE, (short)100, "mul")
+            new Triplet<>(Long.MIN_VALUE, -1L, "mul"),
+            new Triplet<>(Long.MIN_VALUE, -1L, "div"),
+            new Triplet<>(Long.MAX_VALUE,  Integer.MAX_VALUE, "mul")
+    );
+
+    private final static List<Quartet<Number, Number, String, String>> 
NO_OVERFLOW_CASES = Arrays.asList(
+            new Quartet<>(Byte.MIN_VALUE, (byte)-1, "div", "s"),
+            new Quartet<>(Byte.MAX_VALUE, (byte)100, "add", "s"),
+            new Quartet<>(Byte.MIN_VALUE, (byte)100, "sub", "s"),
+            new Quartet<>((byte)100, (byte)100, "mul", "s"),
+            new Quartet<>(Byte.MAX_VALUE, 0.5f, "div", "f"),
+            new Quartet<>(Short.MIN_VALUE, (short)-1, "div", "i"),
+            new Quartet<>(Short.MAX_VALUE, (short)100, "add", "i"),
+            new Quartet<>(Short.MIN_VALUE, (short)100, "sub", "i"),
+            new Quartet<>(Short.MAX_VALUE, (short)100, "mul", "i"),
+            new Quartet<>(Short.MAX_VALUE, 0.5f, "div", "f"),
+            new Quartet<>(Integer.MIN_VALUE, -1, "div", "l"),
+            new Quartet<>(Integer.MAX_VALUE, 1, "add", "l"),
+            new Quartet<>(Integer.MIN_VALUE, 1, "sub", "l"),
+            new Quartet<>(Integer.MAX_VALUE, Integer.MAX_VALUE, "mul", "l"),
+            new Quartet<>(Integer.MAX_VALUE, 0.5f, "div", "f"),
+            new Quartet<>(Long.MAX_VALUE, 0.5f, "div", "d")
     );
 
+    @Test
+    public void shouldReturnHighestCommonNumberNumberInfo() {
+        for (final Triplet<Number, Integer, Boolean> q : NUMBER_INFO_CASES) {
+            NumberInfo numberInfo = getHighestCommonNumberInfo(false, 
q.getValue0(), q.getValue0());
+            assertEquals(numberInfo.getBits(), (int)q.getValue1());
+            assertEquals(numberInfo.getFp(), (boolean)q.getValue2());
+        }
+    }
+
     @Test
     public void shouldReturnHighestCommonNumberClass() {
         for (final Quartet<Number, Number, Class<? extends Number>, Class<? 
extends Number>> q : COMMON_NUMBER_CLASSES) {
@@ -460,6 +496,48 @@ public class NumberHelperTest {
         }
     }
 
+    @Test
+    public void shouldPromoteFloatToDoubleForAdd() {
+        Number value = add(Float.MAX_VALUE, Float.MAX_VALUE);
+        assertTrue(value instanceof Double);
+        assertFalse(Double.isInfinite(value.doubleValue()));
+    }
+
+    @Test
+    public void shouldPromoteDoubleToInfiniteForAdd() {
+        Number value = add(Double.MAX_VALUE, Double.MAX_VALUE);
+        assertTrue(value instanceof Double);
+        assertTrue(Double.isInfinite(value.doubleValue()));
+    }
+
+    @Test
+    public void shouldPromoteFloatToDoubleForMul() {
+        Number value = mul(Float.MAX_VALUE, 2F);
+        assertTrue(value instanceof Double);
+        assertFalse(Double.isInfinite(value.doubleValue()));
+    }
+
+    @Test
+    public void shouldPromoteDoubleToInfiniteForMul() {
+        Number value = mul(Double.MAX_VALUE, 2F);
+        assertTrue(value instanceof Double);
+        assertTrue(Double.isInfinite(value.doubleValue()));
+    }
+
+    @Test
+    public void shouldPromoteFloatToDoubleForDiv() {
+        Number value = div(Float.MAX_VALUE, 0.5F);
+        assertTrue(value instanceof Double);
+        assertFalse(Double.isInfinite(value.doubleValue()));
+    }
+
+    @Test
+    public void shouldPromoteDoubleToInfiniteForDiv() {
+        Number value = div(Double.MAX_VALUE, 0.5F);
+        assertTrue(value instanceof Double);
+        assertTrue(Double.isInfinite(value.doubleValue()));
+    }
+
     @Test
     public void shouldThrowArithmeticExceptionOnOverflow() {
         for (final Triplet<Number, Number, String> q : OVERFLOW_CASES) {
@@ -467,10 +545,18 @@ public class NumberHelperTest {
                 switch (q.getValue2()) {
                     case "add":
                         add(q.getValue0(), q.getValue1());
+                        break;
                     case "sub":
                         sub(q.getValue0(), q.getValue1());
+                        break;
                     case "mul":
                         mul(q.getValue0(), q.getValue1());
+                        break;
+                    case "div":
+                        div(q.getValue0(), q.getValue1());
+                        break;
+                    default:
+                        fail("Unexpected math operation " + q.getValue2() + 
"'");
                 }
                 fail("ArithmeticException expected");
             }
@@ -480,6 +566,54 @@ public class NumberHelperTest {
         }
     }
 
+    @Test
+    public void shouldNotThrowArithmeticExceptionOnOverflow() {
+        for (final Quartet<Number, Number, String, String> q : 
NO_OVERFLOW_CASES) {
+            try {
+                Number result = 0;
+                switch (q.getValue2()) {
+                    case "add":
+                        result = add(q.getValue0(), q.getValue1());
+                        break;
+                    case "sub":
+                        result = sub(q.getValue0(), q.getValue1());
+                        break;
+                    case "mul":
+                        result = mul(q.getValue0(), q.getValue1());
+                        break;
+                    case "div":
+                        result = div(q.getValue0(), q.getValue1());
+                        break;
+                    default:
+                        fail("Unexpected math operation '" + q.getValue2() + 
"'");
+                }
+                String classValue = result.getClass().toString();
+                switch (q.getValue3()) {
+                    case "s":
+                        assertEquals("class java.lang.Short", classValue);
+                        break;
+                    case "i":
+                        assertEquals("class java.lang.Integer", classValue);
+                        break;
+                    case "l":
+                        assertEquals("class java.lang.Long", classValue);
+                        break;
+                    case "f":
+                        assertEquals("class java.lang.Float", classValue);
+                        break;
+                    case "d":
+                        assertEquals("class java.lang.Double", classValue);
+                        break;
+                    default:
+                        fail("Unexpected class type '" + q.getValue3() + "'");
+                }
+            }
+            catch (ArithmeticException ex) {
+                fail("ArithmeticException bot expected");
+            }
+        }
+    }
+
     @Test
     public void shouldCoerceToReturnSameInstanceForSameClass() {
         final Integer value = 42;
diff --git a/gremlin-dotnet/build/generate.groovy 
b/gremlin-dotnet/build/generate.groovy
index 36eae53cac..1d54dcf8d6 100644
--- a/gremlin-dotnet/build/generate.groovy
+++ b/gremlin-dotnet/build/generate.groovy
@@ -94,7 +94,11 @@ radishGremlinFile.withWriter('UTF-8') { Writer writer ->
 
 
     // some traversals may require a static translation if the translator 
can't handle them for some reason
-    def staticTranslate = [:]
+    def staticTranslate = [
+            "g_withSackX_128bX_injectX1bX_sackXminusX_sack" : "               
{\"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_V_injectX_128b__1bX_sumXX" : "               
{\"g_V_injectX_128b__1bX_sumXX\", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>((short) 
-128, (short) -1).Sum<object>()}}, ",
+            "g_withSackX_128bX_injectX_1bX_sackXdivX_sack" : "               
{\"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>()}}, "
+    ]
     // SAMPLE: g_injectXnull_nullX: "               {\"g_injectXnull_nullX\", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null,null)}}, 
",1\"]).Values<object>(\"age\").Inject(null,null)}}, "
 
     gremlins.each { k,v ->
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 54e8fddd99..c7b67628f8 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -728,24 +728,15 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_order_byXnoX_count", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Order().By("no").Count()}}, 
                {"g_V_group_byXlabelX_count", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group<object, object>().By(T.Label).Count()}}, 
                {"g_V_group_byXlabelX_countXlocalX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Group<object, object>().By(T.Label).Count(Scope.Local)}}, 
-               {"g_injectXdatetimeXstrXX_dateAddXDT_hour_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 
2)}}, 
-               {"g_injectXdatetimeXstrXX_dateAddXhour_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 
2)}}, 
-               {"g_injectXdatetimeXstrXX_dateAddXhour_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 
-1)}}, 
-               {"g_injectXdatetimeXstrXX_dateAddXminute_10X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Minute,
 10)}}, 
-               {"g_injectXdatetimeXstrXX_dateAddXsecond_20X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Second,
 20)}}, 
-               {"g_injectXdatetimeXstrXX_dateAddXday_11X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-09-06T00:00Z")).DateAdd(DT.Day, 
11)}}, 
-               {"g_injectXDateTimeXstrXX_dateAddXDT_hour_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 
2)}}, 
-               {"g_injectXDateTimeXstrXX_dateAddXhour_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 
2)}}, 
-               {"g_injectXDateTimeXstrXX_dateAddXhour_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 
-1)}}, 
-               {"g_injectXDateTimeXstrXX_dateAddXminute_10X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Minute,
 10)}}, 
-               {"g_injectXDateTimeXstrXX_dateAddXsecond_20X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Second,
 20)}}, 
-               {"g_injectXDateTimeXstrXX_dateAddXday_11X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-09-06T00:00Z")).DateAdd(DT.Day, 
11)}}, 
-               {"g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateDiff(DateTimeOffset.Parse("2023-08-09T00:00Z"))}},
 
-               {"g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-08T00:00Z")).DateDiff(__.Constant<object>(DateTimeOffset.Parse("2023-08-01T00:00Z")))}},
 
-               {"g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-08T00:00Z")).DateDiff(__.Inject(DateTimeOffset.Parse("2023-10-11T00:00Z")))}},
 
-               {"g_injectXDateTimeXstr1XX_dateDiffXDateTimeXstr2XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z")).DateDiff(DateTimeOffset.Parse("2023-08-09T00:00Z"))}},
 
-               {"g_injectXDateTimeXstr1XX_dateDiffXconstantXDateTimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-08T00:00Z")).DateDiff(__.Constant<object>(DateTimeOffset.Parse("2023-08-01T00:00Z")))}},
 
-               {"g_injectXDateTimeXstr1XX_dateDiffXinjectXDateTimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(DateTimeOffset.Parse("2023-08-08T00:00Z")).DateDiff(__.Inject(DateTimeOffset.Parse("2023-10-11T00:00Z")))}},
 
+               {"g_injectXdatetimeXstrXX_dateAddXDT_hour_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z"), 
DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 2)}}, 
+               {"g_injectXdatetimeXstrXX_dateAddXhour_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z"), 
DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, 2)}}, 
+               {"g_injectXdatetimeXstrXX_dateAddXhour_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z"), 
DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Hour, -1)}}, 
+               {"g_injectXdatetimeXstrXX_dateAddXminute_10X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z"), 
DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Minute, 10)}}, 
+               {"g_injectXdatetimeXstrXX_dateAddXsecond_20X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z"), 
DateTimeOffset.Parse("2023-08-02T00:00Z")).DateAdd(DT.Second, 20)}}, 
+               {"g_injectXdatetimeXstrXX_dateAddXday_11X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-09-06T00:00Z"), 
DateTimeOffset.Parse("2023-09-06T00:00Z")).DateAdd(DT.Day, 11)}}, 
+               {"g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-02T00:00Z"), 
DateTimeOffset.Parse("2023-08-02T00:00Z")).DateDiff(DateTimeOffset.Parse("2023-08-09T00:00Z"))}},
 
+               {"g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-08T00:00Z"), 
DateTimeOffset.Parse("2023-08-08T00:00Z")).DateDiff(__.Constant<object>(DateTimeOffset.Parse("2023-08-01T00:00Z")))}},
 
+               {"g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(DateTimeOffset.Parse("2023-08-08T00:00Z"), 
DateTimeOffset.Parse("2023-08-08T00:00Z")).DateDiff(__.Inject(DateTimeOffset.Parse("2023-10-11T00:00Z")))}},
 
                {"g_injectXnullX_differenceXinjectX1XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(null).Difference(__.Inject(1))}}, 
                {"g_V_valuesXnameX_differenceXV_foldX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Values<object>("name").Difference(__.V().Fold())}}, 
                {"g_V_fold_differenceXconstantXnullXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Fold().Difference(__.Constant<object>(null))}}, 
@@ -1312,9 +1303,12 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"g_V_hasLabelXsoftwareX_valueXnameX_substringX1_neg1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().HasLabel("software").Values<object>("name").Substring(1, -1)}}, 
                {"g_V_hasLabelXsoftwareX_valueXnameX_substringXneg4_2X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().HasLabel("software").Values<object>("name").Substring(-4, 2)}}, 
                {"g_V_hasLabelXsoftwareX_valueXnameX_substringXneg3_neg1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().HasLabel("software").Values<object>("name").Substring(-3, -1)}}, 
-               {"g_V_sum_overflow_byte", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>((byte) 127, 
(byte) 1).Sum<object>()}}, 
-               {"g_V_sum_overflow_short", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>((short) 
32767, (short) 1).Sum<object>()}}, 
-               {"g_V_sum_overflow_int", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(2147483647, 
1).Sum<object>()}}, 
+               {"g_V_injectX127b_1bX_sumXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>((byte) 127, (byte) 1).Sum<object>()}}, 
+               {"g_V_injectX_128b__1bX_sumXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>((short) -128, (short) -1).Sum<object>()}}, 
+               {"g_V_injectX32767s_1sX_sumXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>((short) 32767, (short) 1).Sum<object>()}}, 
+               {"g_V_injectX_32768s__1sX_sumXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>((short) -32768, (short) -1).Sum<object>()}}, 
+               {"g_V_injectX2147483647i_1iX_sumXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(2147483647, 1).Sum<object>()}}, 
+               {"g_V_injectX_2147483648i__1iX_sumXX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.Inject<object>(-2147483648, -1).Sum<object>()}}, 
                {"g_V_age_sum", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Values<object>("age").Sum<object>()}}, 
                {"g_V_foo_sum", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Values<object>("foo").Sum<object>()}}, 
                {"g_V_age_fold_sumXlocalX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Values<object>("age").Fold().Sum<object>(Scope.Local)}}, 
@@ -1647,6 +1641,25 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                {"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(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((byte) 127).Inject<object>((byte) 
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((byte) 127).Inject<object>((byte) 
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((byte) 
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.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>()}},
 
diff --git a/gremlin-go/driver/cucumber/gremlin.go 
b/gremlin-go/driver/cucumber/gremlin.go
index ecf9ef9efd..57534a17c3 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -698,24 +698,15 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_V_order_byXnoX_count": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Order().By("no").Count()}}, 
     "g_V_group_byXlabelX_count": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Group().By(gremlingo.T.Label).Count()}}, 
     "g_V_group_byXlabelX_countXlocalX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Group().By(gremlingo.T.Label).Count(gremlingo.Scope.Local)}}, 
-    "g_injectXdatetimeXstrXX_dateAddXDT_hour_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, 2)}}, 
-    "g_injectXdatetimeXstrXX_dateAddXhour_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, 2)}}, 
-    "g_injectXdatetimeXstrXX_dateAddXhour_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, -1)}}, 
-    "g_injectXdatetimeXstrXX_dateAddXminute_10X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Minute, 10)}}, 
-    "g_injectXdatetimeXstrXX_dateAddXsecond_20X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Second, 20)}}, 
-    "g_injectXdatetimeXstrXX_dateAddXday_11X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 9, 6, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Day, 11)}}, 
-    "g_injectXDateTimeXstrXX_dateAddXDT_hour_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, 2)}}, 
-    "g_injectXDateTimeXstrXX_dateAddXhour_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, 2)}}, 
-    "g_injectXDateTimeXstrXX_dateAddXhour_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, -1)}}, 
-    "g_injectXDateTimeXstrXX_dateAddXminute_10X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Minute, 10)}}, 
-    "g_injectXDateTimeXstrXX_dateAddXsecond_20X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Second, 20)}}, 
-    "g_injectXDateTimeXstrXX_dateAddXday_11X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 9, 6, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Day, 11)}}, 
-    "g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateDiff(time.Date(2023, 8, 9, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)))}}, 
-    "g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 
0))).DateDiff(gremlingo.T__.Constant(time.Date(2023, 8, 1, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))))}}, 
-    "g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateDiff(gremlingo.T__.Inject(time.Date(2023, 
10, 11, 0, 0, 0, 0, time.FixedZone("UTC+00:00", 0))))}}, 
-    "g_injectXDateTimeXstr1XX_dateDiffXDateTimeXstr2XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateDiff(time.Date(2023, 8, 9, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)))}}, 
-    "g_injectXDateTimeXstr1XX_dateDiffXconstantXDateTimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 
0))).DateDiff(gremlingo.T__.Constant(time.Date(2023, 8, 1, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))))}}, 
-    "g_injectXDateTimeXstr1XX_dateDiffXinjectXDateTimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateDiff(gremlingo.T__.Inject(time.Date(2023, 
10, 11, 0, 0, 0, 0, time.FixedZone("UTC+00:00", 0))))}}, 
+    "g_injectXdatetimeXstrXX_dateAddXDT_hour_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, 2)}}, 
+    "g_injectXdatetimeXstrXX_dateAddXhour_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, 2)}}, 
+    "g_injectXdatetimeXstrXX_dateAddXhour_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Hour, -1)}}, 
+    "g_injectXdatetimeXstrXX_dateAddXminute_10X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Minute, 10)}}, 
+    "g_injectXdatetimeXstrXX_dateAddXsecond_20X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Second, 20)}}, 
+    "g_injectXdatetimeXstrXX_dateAddXday_11X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 9, 6, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 9, 6, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateAdd(gremlingo.DT.Day, 11)}}, 
+    "g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 2, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateDiff(time.Date(2023, 8, 9, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)))}}, 
+    "g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 
0))).DateDiff(gremlingo.T__.Constant(time.Date(2023, 8, 1, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))))}}, 
+    "g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0)), time.Date(2023, 8, 8, 0, 0, 0, 0, 
time.FixedZone("UTC+00:00", 0))).DateDiff(gremlingo.T__.Inject(time.Date(2023, 
10, 11, 0, 0, 0, 0, time.FixedZone("UTC+00:00", 0))))}}, 
     "g_injectXnullX_differenceXinjectX1XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(nil).Difference(gremlingo.T__.Inject(1))}}, 
     "g_V_valuesXnameX_differenceXV_foldX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Values("name").Difference(gremlingo.T__.V().Fold())}}, 
     "g_V_fold_differenceXconstantXnullXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Fold().Difference(gremlingo.T__.Constant(nil))}}, 
@@ -1282,9 +1273,12 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "g_V_hasLabelXsoftwareX_valueXnameX_substringX1_neg1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().HasLabel("software").Values("name").Substring(1, -1)}}, 
     "g_V_hasLabelXsoftwareX_valueXnameX_substringXneg4_2X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().HasLabel("software").Values("name").Substring(-4, 2)}}, 
     "g_V_hasLabelXsoftwareX_valueXnameX_substringXneg3_neg1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().HasLabel("software").Values("name").Substring(-3, -1)}}, 
-    "g_V_sum_overflow_byte": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(127, 
1).Sum()}}, 
-    "g_V_sum_overflow_short": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(32767, 
1).Sum()}}, 
-    "g_V_sum_overflow_int": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(2147483647, 
1).Sum()}}, 
+    "g_V_injectX127b_1bX_sumXX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(127, 
1).Sum()}}, 
+    "g_V_injectX_128b__1bX_sumXX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(-128, 
-1).Sum()}}, 
+    "g_V_injectX32767s_1sX_sumXX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(32767, 
1).Sum()}}, 
+    "g_V_injectX_32768s__1sX_sumXX": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(-32768, 
-1).Sum()}}, 
+    "g_V_injectX2147483647i_1iX_sumXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(2147483647, 1).Sum()}}, 
+    "g_V_injectX_2147483648i__1iX_sumXX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.Inject(-2147483648, -1).Sum()}}, 
     "g_V_age_sum": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Values("age").Sum()}}, 
     "g_V_foo_sum": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Values("foo").Sum()}}, 
     "g_V_age_fold_sumXlocalX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Values("age").Fold().Sum(gremlingo.Scope.Local)}}, 
@@ -1617,6 +1611,25 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     "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(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(127).Inject(1).Sack(gremlingo.Operator.Sum).Sack()}}, 
+    "g_withSackX32767sX_injectX1sX_sackXsumX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(32767).Inject(1).Sack(gremlingo.Operator.Sum).Sack()}}, 
+    "g_withSackX2147483647iX_injectX1iX_sackXsumX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(2147483647).Inject(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(-128).Inject(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(-32768).Inject(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(-2147483648).Inject(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(127).Inject(2).Sack(gremlingo.Operator.Mult).Sack()}}, 
+    "g_withSackX32767sX_injectX2sX_sackXmultX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(32767).Inject(2).Sack(gremlingo.Operator.Mult).Sack()}}, 
+    "g_withSackX2147483647iX_injectX2iX_sackXmultX_sack": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.WithSack(2147483647).Inject(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(127).Inject(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(32767).Inject(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(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(-128).Inject(-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(-32768).Inject(-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(-2147483648).Inject(-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 --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/NumberSerializationStrategy.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/NumberSerializationStrategy.js
index 0a00a74501..e7fe9d2f43 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/NumberSerializationStrategy.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/NumberSerializationStrategy.js
@@ -58,7 +58,12 @@ module.exports = class NumberSerializationStrategy {
         // INT32_MIN/MAX
         return this.ioc.intSerializer.serialize(item, fullyQualifiedFormat);
       }
-      return this.ioc.longSerializer.serialize(item, fullyQualifiedFormat);
+      // eslint-disable-next-line no-loss-of-precision
+      if (item >= -9223372036854775808 && item < 9223372036854775807) {
+        // INT64_MIN/MAX
+        return this.ioc.longSerializer.serialize(item, fullyQualifiedFormat);
+      }
+      return this.ioc.doubleSerializer.serialize(item, fullyQualifiedFormat);
     }
 
     if (typeof item === 'bigint') {
diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 00710cfa37..e1a496e846 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -728,24 +728,15 @@ const gremlins = {
     g_V_order_byXnoX_count: [function({g}) { return 
g.V().order().by("no").count() }], 
     g_V_group_byXlabelX_count: [function({g}) { return 
g.V().group().by(T.label).count() }], 
     g_V_group_byXlabelX_countXlocalX: [function({g}) { return 
g.V().group().by(T.label).count(Scope.local) }], 
-    g_injectXdatetimeXstrXX_dateAddXDT_hour_2X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.hour, 2) }], 
-    g_injectXdatetimeXstrXX_dateAddXhour_2X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.hour, 2) }], 
-    g_injectXdatetimeXstrXX_dateAddXhour_1X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.hour, -1) }], 
-    g_injectXdatetimeXstrXX_dateAddXminute_10X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.minute, 10) }], 
-    g_injectXdatetimeXstrXX_dateAddXsecond_20X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.second, 20) }], 
-    g_injectXdatetimeXstrXX_dateAddXday_11X: [function({g}) { return 
g.inject(new Date('2023-09-06T00:00Z')).dateAdd(DT.day, 11) }], 
-    g_injectXDateTimeXstrXX_dateAddXDT_hour_2X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.hour, 2) }], 
-    g_injectXDateTimeXstrXX_dateAddXhour_2X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.hour, 2) }], 
-    g_injectXDateTimeXstrXX_dateAddXhour_1X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.hour, -1) }], 
-    g_injectXDateTimeXstrXX_dateAddXminute_10X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.minute, 10) }], 
-    g_injectXDateTimeXstrXX_dateAddXsecond_20X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateAdd(DT.second, 20) }], 
-    g_injectXDateTimeXstrXX_dateAddXday_11X: [function({g}) { return 
g.inject(new Date('2023-09-06T00:00Z')).dateAdd(DT.day, 11) }], 
-    g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateDiff(new Date('2023-08-09T00:00Z')) 
}], 
-    g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX: 
[function({g}) { return g.inject(new 
Date('2023-08-08T00:00Z')).dateDiff(__.constant(new Date('2023-08-01T00:00Z'))) 
}], 
-    g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX: [function({g}) 
{ return g.inject(new Date('2023-08-08T00:00Z')).dateDiff(__.inject(new 
Date('2023-10-11T00:00Z'))) }], 
-    g_injectXDateTimeXstr1XX_dateDiffXDateTimeXstr2XX: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z')).dateDiff(new Date('2023-08-09T00:00Z')) 
}], 
-    g_injectXDateTimeXstr1XX_dateDiffXconstantXDateTimeXstr2XXX: 
[function({g}) { return g.inject(new 
Date('2023-08-08T00:00Z')).dateDiff(__.constant(new Date('2023-08-01T00:00Z'))) 
}], 
-    g_injectXDateTimeXstr1XX_dateDiffXinjectXDateTimeXstr2XXX: [function({g}) 
{ return g.inject(new Date('2023-08-08T00:00Z')).dateDiff(__.inject(new 
Date('2023-10-11T00:00Z'))) }], 
+    g_injectXdatetimeXstrXX_dateAddXDT_hour_2X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z'), new 
Date('2023-08-02T00:00Z')).dateAdd(DT.hour, 2) }], 
+    g_injectXdatetimeXstrXX_dateAddXhour_2X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z'), new 
Date('2023-08-02T00:00Z')).dateAdd(DT.hour, 2) }], 
+    g_injectXdatetimeXstrXX_dateAddXhour_1X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z'), new 
Date('2023-08-02T00:00Z')).dateAdd(DT.hour, -1) }], 
+    g_injectXdatetimeXstrXX_dateAddXminute_10X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z'), new 
Date('2023-08-02T00:00Z')).dateAdd(DT.minute, 10) }], 
+    g_injectXdatetimeXstrXX_dateAddXsecond_20X: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z'), new 
Date('2023-08-02T00:00Z')).dateAdd(DT.second, 20) }], 
+    g_injectXdatetimeXstrXX_dateAddXday_11X: [function({g}) { return 
g.inject(new Date('2023-09-06T00:00Z'), new 
Date('2023-09-06T00:00Z')).dateAdd(DT.day, 11) }], 
+    g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX: [function({g}) { return 
g.inject(new Date('2023-08-02T00:00Z'), new 
Date('2023-08-02T00:00Z')).dateDiff(new Date('2023-08-09T00:00Z')) }], 
+    g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX: 
[function({g}) { return g.inject(new Date('2023-08-08T00:00Z'), new 
Date('2023-08-08T00:00Z')).dateDiff(__.constant(new Date('2023-08-01T00:00Z'))) 
}], 
+    g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX: [function({g}) 
{ return g.inject(new Date('2023-08-08T00:00Z'), new 
Date('2023-08-08T00:00Z')).dateDiff(__.inject(new Date('2023-10-11T00:00Z'))) 
}], 
     g_injectXnullX_differenceXinjectX1XX: [function({g}) { return 
g.inject(null).difference(__.inject(1)) }], 
     g_V_valuesXnameX_differenceXV_foldX: [function({g}) { return 
g.V().values("name").difference(__.V().fold()) }], 
     g_V_fold_differenceXconstantXnullXX: [function({g}) { return 
g.V().fold().difference(__.constant(null)) }], 
@@ -1312,9 +1303,12 @@ const gremlins = {
     g_V_hasLabelXsoftwareX_valueXnameX_substringX1_neg1X: [function({g}) { 
return g.V().hasLabel("software").values("name").substring(1, -1) }], 
     g_V_hasLabelXsoftwareX_valueXnameX_substringXneg4_2X: [function({g}) { 
return g.V().hasLabel("software").values("name").substring(-4, 2) }], 
     g_V_hasLabelXsoftwareX_valueXnameX_substringXneg3_neg1X: [function({g}) { 
return g.V().hasLabel("software").values("name").substring(-3, -1) }], 
-    g_V_sum_overflow_byte: [function({g}) { return g.inject(127, 1).sum() }], 
-    g_V_sum_overflow_short: [function({g}) { return g.inject(32767, 1).sum() 
}], 
-    g_V_sum_overflow_int: [function({g}) { return g.inject(2147483647, 
1).sum() }], 
+    g_V_injectX127b_1bX_sumXX: [function({g}) { return g.inject(127, 1).sum() 
}], 
+    g_V_injectX_128b__1bX_sumXX: [function({g}) { return g.inject(-128, 
-1).sum() }], 
+    g_V_injectX32767s_1sX_sumXX: [function({g}) { return g.inject(32767, 
1).sum() }], 
+    g_V_injectX_32768s__1sX_sumXX: [function({g}) { return g.inject(-32768, 
-1).sum() }], 
+    g_V_injectX2147483647i_1iX_sumXX: [function({g}) { return 
g.inject(2147483647, 1).sum() }], 
+    g_V_injectX_2147483648i__1iX_sumXX: [function({g}) { return 
g.inject(-2147483648, -1).sum() }], 
     g_V_age_sum: [function({g}) { return g.V().values("age").sum() }], 
     g_V_foo_sum: [function({g}) { return g.V().values("foo").sum() }], 
     g_V_age_fold_sumXlocalX: [function({g}) { return 
g.V().values("age").fold().sum(Scope.local) }], 
@@ -1647,6 +1641,25 @@ const gremlins = {
     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_(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 --git a/gremlin-python/src/main/python/radish/gremlin.py 
b/gremlin-python/src/main/python/radish/gremlin.py
index 286edad277..5d4b19fa13 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -701,24 +701,15 @@ world.gremlins = {
     'g_V_order_byXnoX_count': [(lambda g:g.V().order().by('no').count())], 
     'g_V_group_byXlabelX_count': [(lambda 
g:g.V().group().by(T.label).count())], 
     'g_V_group_byXlabelX_countXlocalX': [(lambda 
g:g.V().group().by(T.label).count(Scope.local))], 
-    'g_injectXdatetimeXstrXX_dateAddXDT_hour_2X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour,
 2))], 
-    'g_injectXdatetimeXstrXX_dateAddXhour_2X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour,
 2))], 
-    'g_injectXdatetimeXstrXX_dateAddXhour_1X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour,
 -1))], 
-    'g_injectXdatetimeXstrXX_dateAddXminute_10X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.minute,
 10))], 
-    'g_injectXdatetimeXstrXX_dateAddXsecond_20X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.second,
 20))], 
-    'g_injectXdatetimeXstrXX_dateAddXday_11X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-09-06T00:00+00:00')).date_add(DT.day,
 11))], 
-    'g_injectXDateTimeXstrXX_dateAddXDT_hour_2X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour,
 2))], 
-    'g_injectXDateTimeXstrXX_dateAddXhour_2X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour,
 2))], 
-    'g_injectXDateTimeXstrXX_dateAddXhour_1X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour,
 -1))], 
-    'g_injectXDateTimeXstrXX_dateAddXminute_10X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.minute,
 10))], 
-    'g_injectXDateTimeXstrXX_dateAddXsecond_20X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.second,
 20))], 
-    'g_injectXDateTimeXstrXX_dateAddXday_11X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-09-06T00:00+00:00')).date_add(DT.day,
 11))], 
-    'g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_diff(datetime.datetime.fromisoformat('2023-08-09T00:00+00:00')))],
 
-    'g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-08T00:00+00:00')).date_diff(__.constant(datetime.datetime.fromisoformat('2023-08-01T00:00+00:00'))))],
 
-    'g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-08T00:00+00:00')).date_diff(__.inject(datetime.datetime.fromisoformat('2023-10-11T00:00+00:00'))))],
 
-    'g_injectXDateTimeXstr1XX_dateDiffXDateTimeXstr2XX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_diff(datetime.datetime.fromisoformat('2023-08-09T00:00+00:00')))],
 
-    'g_injectXDateTimeXstr1XX_dateDiffXconstantXDateTimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-08T00:00+00:00')).date_diff(__.constant(datetime.datetime.fromisoformat('2023-08-01T00:00+00:00'))))],
 
-    'g_injectXDateTimeXstr1XX_dateDiffXinjectXDateTimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-08T00:00+00:00')).date_diff(__.inject(datetime.datetime.fromisoformat('2023-10-11T00:00+00:00'))))],
 
+    'g_injectXdatetimeXstrXX_dateAddXDT_hour_2X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour, 
2))], 
+    'g_injectXdatetimeXstrXX_dateAddXhour_2X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour, 
2))], 
+    'g_injectXdatetimeXstrXX_dateAddXhour_1X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.hour, 
-1))], 
+    'g_injectXdatetimeXstrXX_dateAddXminute_10X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.minute, 
10))], 
+    'g_injectXdatetimeXstrXX_dateAddXsecond_20X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_add(DT.second, 
20))], 
+    'g_injectXdatetimeXstrXX_dateAddXday_11X': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-09-06T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-09-06T00:00+00:00')).date_add(DT.day, 
11))], 
+    'g_injectXdatetimeXstr1XX_dateDiffXdatetimeXstr2XX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-02T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-02T00:00+00:00')).date_diff(datetime.datetime.fromisoformat('2023-08-09T00:00+00:00')))],
 
+    'g_injectXdatetimeXstr1XX_dateDiffXconstantXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-08T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-08T00:00+00:00')).date_diff(__.constant(datetime.datetime.fromisoformat('2023-08-01T00:00+00:00'))))],
 
+    'g_injectXdatetimeXstr1XX_dateDiffXinjectXdatetimeXstr2XXX': [(lambda 
g:g.inject(datetime.datetime.fromisoformat('2023-08-08T00:00+00:00'), 
datetime.datetime.fromisoformat('2023-08-08T00:00+00:00')).date_diff(__.inject(datetime.datetime.fromisoformat('2023-10-11T00:00+00:00'))))],
 
     'g_injectXnullX_differenceXinjectX1XX': [(lambda 
g:g.inject(None).difference(__.inject(1)))], 
     'g_V_valuesXnameX_differenceXV_foldX': [(lambda 
g:g.V().values('name').difference(__.V().fold()))], 
     'g_V_fold_differenceXconstantXnullXX': [(lambda 
g:g.V().fold().difference(__.constant(None)))], 
@@ -1285,9 +1276,12 @@ world.gremlins = {
     'g_V_hasLabelXsoftwareX_valueXnameX_substringX1_neg1X': [(lambda 
g:g.V().has_label('software').values('name').substring(1, -1))], 
     'g_V_hasLabelXsoftwareX_valueXnameX_substringXneg4_2X': [(lambda 
g:g.V().has_label('software').values('name').substring(-4, 2))], 
     'g_V_hasLabelXsoftwareX_valueXnameX_substringXneg3_neg1X': [(lambda 
g:g.V().has_label('software').values('name').substring(-3, -1))], 
-    'g_V_sum_overflow_byte': [(lambda g:g.inject(127, 1).sum_())], 
-    'g_V_sum_overflow_short': [(lambda g:g.inject(32767, 1).sum_())], 
-    'g_V_sum_overflow_int': [(lambda g:g.inject(2147483647, 1).sum_())], 
+    'g_V_injectX127b_1bX_sumXX': [(lambda g:g.inject(127, 1).sum_())], 
+    'g_V_injectX_128b__1bX_sumXX': [(lambda g:g.inject(-128, -1).sum_())], 
+    'g_V_injectX32767s_1sX_sumXX': [(lambda g:g.inject(32767, 1).sum_())], 
+    'g_V_injectX_32768s__1sX_sumXX': [(lambda g:g.inject(-32768, -1).sum_())], 
+    'g_V_injectX2147483647i_1iX_sumXX': [(lambda g:g.inject(2147483647, 
1).sum_())], 
+    'g_V_injectX_2147483648i__1iX_sumXX': [(lambda g:g.inject(-2147483648, 
-1).sum_())], 
     'g_V_age_sum': [(lambda g:g.V().values('age').sum_())], 
     'g_V_foo_sum': [(lambda g:g.V().values('foo').sum_())], 
     'g_V_age_fold_sumXlocalX': [(lambda 
g:g.V().values('age').fold().sum_(Scope.local))], 
@@ -1620,6 +1614,25 @@ world.gremlins = {
     '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_(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(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())],
 
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Sum.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Sum.feature
index 0776345c3e..0be10b9d21 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Sum.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Sum.feature
@@ -18,6 +18,78 @@
 @StepClassMap @StepSum
 Feature: Step - sum()
 
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_V_injectX127b_1bX_sumXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.inject(127b, 1b).sum()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[128].s |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_V_injectX_128b__1bX_sumXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.inject(-128b, -1b).sum()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-129].s |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_V_injectX32767s_1sX_sumXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.inject(32767s, 1s).sum()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[32768].i |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_V_injectX_32768s__1sX_sumXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.inject(-32768s, -1s).sum()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-32769].i |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_V_injectX2147483647i_1iX_sumXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.inject(2147483647i, 1i).sum()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[2147483648].l |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_V_injectX_2147483648i__1iX_sumXX
+   Given the modern graph
+   And the traversal of
+     """
+     g.inject(-2147483648i, -1i).sum()
+     """
+   When iterated to list
+   Then the result should be unordered
+     | result |
+     | d[-2147483649].l |
+
   Scenario: g_V_age_sum
     Given the modern graph
     And the traversal of
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Sack.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Sack.feature
index 14a099e867..a218dde55b 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Sack.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Sack.feature
@@ -18,6 +18,234 @@
 @StepClassSideEffect @StepSack
 Feature: Step - sack()
 
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX127bX_injectX1bX_sackXsumX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(127b).inject(1b).sack(sum).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[128].s |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX32767sX_injectX1sX_sackXsumX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(32767s).inject(1s).sack(sum).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[32768].i |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX2147483647iX_injectX1iX_sackXsumX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(2147483647i).inject(1i).sack(sum).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[2147483648].l |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: 
g_withSackX1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXsumX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      
g.withSack(1.7976931348623157E+308d).inject(1.7976931348623157E+308d).sack(sum).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[Infinity] |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX_128bX_injectX1bX_sackXminusX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(-128b).inject(1b).sack(minus).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-129].s |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX_32768sX_injectX1sX_sackXminusX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(-32768s).inject(1s).sack(minus).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-32769].i |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX_2147483648iX_injectX1iX_sackXminusX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(-2147483648i).inject(1i).sack(minus).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-2147483649].l |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: 
g_withSackX_1_7976931348623157E_308dX_injectX1_7976931348623157E_308dX_sackXminusX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      
g.withSack(-1.7976931348623157E+308d).inject(1.7976931348623157E+308d).sack(minus).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[-Infinity] |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX127bX_injectX2bX_sackXmultX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(127b).inject(2b).sack(mult).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[254].s |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX32767sX_injectX2sX_sackXmultX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(32767s).inject(2s).sack(mult).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[65534].i |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX2147483647iX_injectX2iX_sackXmultX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(2147483647i).inject(2i).sack(mult).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[4294967294].l |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX1_7976931348623157E_308dX_injectX2dX_sackXmultX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(1.7976931348623157E+308d).inject(2d).sack(mult).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[Infinity] |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX127bX_injectX0_5fX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(127b).inject(0.5f).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[254].f |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX32767sX_injectX0_5fX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(32767s).inject(0.5f).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[65534].f |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX2147483647iX_injectX0_5fX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(2147483647i).inject(0.5f).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[4.294967294e+09].f |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX1_7976931348623157E_308dX_injectX0_5dX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(1.7976931348623157E+308d).inject(0.5d).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[Infinity] |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX_128bX_injectX_1bX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(-128b).inject(-1b).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[128].s |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX_32768sX_injectX_1sX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(-32768s).inject(-1s).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[32768].i |
+
+  @GraphComputerVerificationInjectionNotSupported
+  Scenario: g_withSackX_2147483648iX_injectX_1iX_sackXdivX_sack
+    Given the modern graph
+    And the traversal of
+      """
+      g.withSack(-2147483648i).inject(-1i).sack(div).sack()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | d[2147483648].l |
+
   Scenario: g_withSackXhelloX_V_outE_sackXassignX_byXlabelX_inV_sack
     Given the modern graph
     And the traversal of

Reply via email to