You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by xi...@apache.org on 2025/09/05 16:31:11 UTC
(tinkerpop) 10/12: handled overflow edge cases in bigint conversion and refactored coerceTo and castTo to use the same conversion logic in NumberHelper. Removed `n` from N enum value in Grammar, and used `_` suffix for keyword collisions in Java/Groovy/JS.
This is an automated email from the ASF dual-hosted git repository.
xiazcy pushed a commit to branch type-enum-poc
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 13a51e9dfb61b8856230899edae39b80e51b1ad8
Author: xiazcy <xi...@gmail.com>
AuthorDate: Mon Jul 28 19:38:29 2025 -0700
handled overflow edge cases in bigint conversion and refactored coerceTo and castTo to use the same conversion logic in NumberHelper. Removed `n` from N enum value in Grammar, and used `_` suffix for keyword collisions in Java/Groovy/JS.
---
docs/src/reference/the-traversal.asciidoc | 19 +-
docs/src/upgrade/release-3.8.x.asciidoc | 14 +-
.../language/grammar/GenericLiteralVisitor.java | 5 +
.../language/grammar/TraversalEnumParser.java | 11 +
.../language/grammar/TraversalMethodVisitor.java | 2 +-
.../translator/GroovyTranslateVisitor.java | 9 +
.../language/translator/JavaTranslateVisitor.java | 11 +
.../translator/JavascriptTranslateVisitor.java | 9 +
.../tinkerpop/gremlin/process/traversal/N.java | 26 +--
.../io/binary/TypeSerializerRegistry.java | 49 +----
.../structure/io/binary/types/EnumSerializer.java | 1 -
.../structure/io/binary/types/NSerializer.java | 46 ++++
.../structure/io/graphson/GraphSONModule.java | 8 +-
.../io/graphson/TraversalSerializersV2.java | 40 +++-
.../io/graphson/TraversalSerializersV3.java | 40 +++-
.../tinkerpop/gremlin/util/NumberHelper.java | 88 ++++----
.../grammar/GeneralLiteralVisitorTest.java | 38 +++-
.../language/translator/GremlinTranslatorTest.java | 18 ++
.../traversal/step/map/AsNumberStepTest.java | 236 +++++++++++----------
.../tinkerpop/gremlin/util/NumberHelperTest.java | 30 +--
.../src/Gremlin.Net/Process/Traversal/N.cs | 32 +--
.../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 24 +--
gremlin-go/driver/cucumber/gremlin.go | 24 +--
gremlin-go/driver/serializer.go | 2 +-
gremlin-go/driver/traversal.go | 32 +--
.../gremlin-javascript/lib/process/traversal.js | 10 +-
.../gremlin-javascript/test/cucumber/gremlin.js | 24 +--
.../test/unit/graphbinary/AnySerializer-test.js | 6 +-
.../test/unit/graphbinary/EnumSerializer-test.js | 1 +
gremlin-language/src/main/antlr4/Gremlin.g4 | 16 +-
.../language/corpus/DocumentationReader.java | 4 +-
.../python/gremlin_python/process/traversal.py | 21 +-
gremlin-python/src/main/python/radish/gremlin.py | 24 +--
.../tests/driver/test_driver_remote_connection.py | 2 +-
.../gremlin/test/features/map/AsNumber.feature | 46 ++--
35 files changed, 577 insertions(+), 391 deletions(-)
diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc
index 550a1af3d3..6b587212f3 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -844,9 +844,9 @@ All other input types will result in `IllegalArgumentException`.
----
g.inject(1234).asNumber() <1>
g.inject(1.76).asNumber() <2>
-g.inject(1.76).asNumber(N.nint) <3>
+g.inject(1.76).asNumber(N.int_) <3>
g.inject("1b").asNumber() <4>
-g.inject(33550336).asNumber(N.nbyte) <5>
+g.inject(33550336).asNumber(N.byte_) <5>
----
<1> An int will be passed through.
@@ -855,6 +855,21 @@ g.inject(33550336).asNumber(N.nbyte) <5>
<4> String containing any character other than numerical ones will result in `NumberFormatException`.
<5> Narrowing of int to byte that overflows will throw `ArithmeticException`.
+[NOTE, caption=Java]
+====
+The enums values `byte`, `short`, `int`, `long`, `float`, `double` are reserved word in Java, and therefore must be referred to in Gremlin with an underscore appended as a suffix: `byte_`, `short_`, `int_`, `long_`, `float_`, `double_`.
+====
+
+[NOTE, caption=Groovy & Gremlin Console]
+====
+The enums values `byte`, `short`, `int`, `long`, `float`, `double` are reserved word in Groovy, therefore as the Gremlin Console is Groovy-based, they must be referred to in Gremlin with an underscore appended as a suffix: `byte_`, `short_`, `int_`, `long_`, `float_`, `double_`.
+====
+
+[NOTE, caption=JavaScript]
+====
+The enums values `byte`, `short`, `int`, `long`, `float`, `double` are reserved word in Javascript, and therefore must be referred to in Gremlin with an underscore appended as a suffix: `byte_`, `short_`, `int_`, `long_`, `float_`, `double_`.
+====
+
*Additional References*
link:++https://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#asNumber()++[`asNumber()`]
diff --git a/docs/src/upgrade/release-3.8.x.asciidoc b/docs/src/upgrade/release-3.8.x.asciidoc
index 31e9738afc..2ca45e6322 100644
--- a/docs/src/upgrade/release-3.8.x.asciidoc
+++ b/docs/src/upgrade/release-3.8.x.asciidoc
@@ -51,7 +51,7 @@ gremlin> g.inject(1.0, 2l, 3, "4", "0x5").asNumber().sum()
==>15.0
// given sum() step returned a double, one can use asNumber() to further cast the result into desired type
-gremlin> g.inject(1.0, 2l, 3, "4", "0x5").asNumber().sum().asNumber(N.nint)
+gremlin> g.inject(1.0, 2l, 3, "4", "0x5").asNumber().sum().asNumber(N.int_)
==>15
----
@@ -61,11 +61,11 @@ Numerical input will pass through unless a type is specified by the number token
[source,text]
----
-gremlin> g.inject(5.0).asNumber(N.nint)
+gremlin> g.inject(5.0).asNumber(N.int_)
==> 5 // casts double to int
-gremlin> g.inject(12).asNumber(N.nbyte)
+gremlin> g.inject(12).asNumber(N.byte_)
==> 12
-gremlin> g.inject(128).asNumber(N.nbyte)
+gremlin> g.inject(128).asNumber(N.byte_)
==> ArithmeticException
----
@@ -75,11 +75,11 @@ String input will be parsed. By default, the smalled unit of number to be parsed
----
gremlin> g.inject("5").asNumber()
==> 5
-gremlin> g.inject("5.7").asNumber(N.nint)
+gremlin> g.inject("5.7").asNumber(N.int_)
==> 5
-gremlin> g.inject("1,000").asNumber(N.nint)
+gremlin> g.inject("1,000").asNumber(N.int_)
==> NumberFormatException
-gremlin> g.inject("128").asNumber(N.nbyte)
+gremlin> g.inject("128").asNumber(N.byte_)
==> ArithmeticException
----
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
index 2556f6ee87..eb0b9dc343 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
@@ -601,6 +601,11 @@ public class GenericLiteralVisitor extends DefaultGremlinBaseVisitor<Object> {
return TraversalEnumParser.parseTraversalEnumFromContext(Pick.class, ctx);
}
+ @Override
+ public Object visitTraversalN(final GremlinParser.TraversalNContext ctx) {
+ return TraversalEnumParser.parseTraversalNFromContext(ctx);
+ }
+
@Override
public Object visitTraversalStrategy(final GremlinParser.TraversalStrategyContext ctx) {
return antlr.traversalStrategyVisitor.visitTraversalStrategy(ctx);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalEnumParser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalEnumParser.java
index 0c43f9ba49..e894f8bf24 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalEnumParser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalEnumParser.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.language.grammar;
import org.antlr.v4.runtime.tree.ParseTree;
+import org.apache.tinkerpop.gremlin.process.traversal.N;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.structure.Direction;
@@ -65,4 +66,14 @@ public class TraversalEnumParser {
text = text.substring(Direction.class.getSimpleName().length() + 1);
return Direction.directionValueOf(text);
}
+
+ /**
+ * Parsing of {@link N} requires some special handling because of java keyword collision.
+ */
+ public static N parseTraversalNFromContext(final GremlinParser.TraversalNContext context) {
+ String text = context.getText();
+ if (text.startsWith(N.class.getSimpleName()))
+ text = text.substring(N.class.getSimpleName().length() + 1);
+ return text.startsWith("big") ? N.valueOf(text) : N.valueOf(text + "_");
+ }
}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
index 06044ef9dc..2fc4434d3d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
@@ -2117,7 +2117,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
@Override
public GraphTraversal visitTraversalMethod_asNumber_traversalN(final GremlinParser.TraversalMethod_asNumber_traversalNContext ctx) {
return graphTraversal.asNumber(
- TraversalEnumParser.parseTraversalEnumFromContext(N.class, ctx.traversalN()));
+ TraversalEnumParser.parseTraversalNFromContext(ctx.traversalN()));
}
public GraphTraversal[] getNestedTraversalList(final GremlinParser.NestedTraversalListContext ctx) {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
index 97e76358ea..c5d83388d5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
@@ -45,6 +45,15 @@ public class GroovyTranslateVisitor extends TranslateVisitor {
super(graphTraversalSourceName);
}
+ @Override
+ public Void visitTraversalN(GremlinParser.TraversalNContext ctx) {
+ final String[] split = ctx.getText().split("\\.");
+ sb.append(processGremlinSymbol(split[0])).append(".");
+ sb.append(processGremlinSymbol(split[1]));
+ if (!split[1].startsWith("big")) sb.append("_");
+ return null;
+ }
+
@Override
public Void visitIntegerLiteral(final GremlinParser.IntegerLiteralContext ctx) {
final String integerLiteral = ctx.getText().toLowerCase();
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
index 81b6b25b84..18ae1bd05c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
@@ -21,7 +21,9 @@ package org.apache.tinkerpop.gremlin.language.translator;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.apache.tinkerpop.gremlin.language.grammar.GremlinParser;
+import org.apache.tinkerpop.gremlin.process.traversal.N;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
+import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
import org.apache.tinkerpop.gremlin.util.DatetimeHelper;
@@ -106,6 +108,15 @@ public class JavaTranslateVisitor extends AbstractTranslateVisitor {
return null;
}
+ @Override
+ public Void visitTraversalN(GremlinParser.TraversalNContext ctx) {
+ final String[] split = ctx.getText().split("\\.");
+ sb.append(processGremlinSymbol(split[0])).append(".");
+ sb.append(processGremlinSymbol(split[1]));
+ if (!split[1].startsWith("big")) sb.append("_");
+ return null;
+ }
+
@Override
public Void visitGenericMapLiteral(final GremlinParser.GenericMapLiteralContext ctx) {
sb.append("new LinkedHashMap<Object, Object>() {{ ");
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavascriptTranslateVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavascriptTranslateVisitor.java
index 23d2bf7d80..bd86a8ca43 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavascriptTranslateVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavascriptTranslateVisitor.java
@@ -87,6 +87,15 @@ public class JavascriptTranslateVisitor extends AbstractTranslateVisitor {
return null;
}
+ @Override
+ public Void visitTraversalN(GremlinParser.TraversalNContext ctx) {
+ final String[] split = ctx.getText().split("\\.");
+ sb.append(processGremlinSymbol(split[0])).append(".");
+ sb.append(processGremlinSymbol(split[1]));
+ if (!split[1].startsWith("big")) sb.append("_");
+ return null;
+ }
+
@Override
public Void visitGenericMapLiteral(final GremlinParser.GenericMapLiteralContext ctx) {
sb.append("new Map([");
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/N.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/N.java
index 4a8d56b48b..7ac673b4c1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/N.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/N.java
@@ -28,25 +28,21 @@ import java.math.BigInteger;
* Used with {@link AsNumberStep} step.
*/
public enum N {
- nbyte(Byte.class),
- nshort(Short.class),
- nint(Integer.class),
- nlong(Long.class),
- nfloat(Float.class),
- ndouble(Double.class),
- nbigInt(BigInteger.class),
- nbigDecimal(BigDecimal.class),;
+ byte_(Byte.class),
+ short_(Short.class),
+ int_(Integer.class),
+ long_(Long.class),
+ float_(Float.class),
+ double_(Double.class),
+ bigInt(BigInteger.class),
+ bigDecimal(BigDecimal.class),;
- private final Class<?> type;
+ private final Class<? extends Number> type;
- N(Class<?> type) {this.type = type;}
+ N(Class<? extends Number> type) {this.type = type;}
- public Class<?> getType() {
+ public Class<? extends Number> getType() {
return this.type;
}
- @Override
- public String toString() {
- return this.type.getSimpleName();
- }
}
\ No newline at end of file
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
index 4b48d8d211..62597d16d9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/TypeSerializerRegistry.java
@@ -49,52 +49,7 @@ import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.BigDecimalSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.BigIntegerSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.BindingSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.BulkSetSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ByteBufferSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ByteCodeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.CharSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ClassSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.CustomTypeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.DateSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.DurationSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.EdgeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.EnumSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.GraphSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.InetAddressSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.InstantSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.LambdaSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ListSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.LocalDateSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.LocalDateTimeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.LocalTimeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.MapEntrySerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.MapSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.MetricsSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.MonthDaySerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.OffsetDateTimeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.OffsetTimeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.PSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.PathSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.PeriodSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.PropertySerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.SetSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.SingleTypeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.StringSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.TransformSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.TraversalExplanationSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.TraversalMetricsSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.TraversalStrategySerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.TraverserSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.TreeSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.UUIDSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.VertexPropertySerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.VertexSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.YearMonthSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ZoneOffsetSerializer;
-import org.apache.tinkerpop.gremlin.structure.io.binary.types.ZonedDateTimeSerializer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.types.*;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
import org.javatuples.Pair;
@@ -167,7 +122,7 @@ public class TypeSerializerRegistry {
new RegistryEntry<>(Direction.class, EnumSerializer.DirectionSerializer),
new RegistryEntry<>(DT.class, EnumSerializer.DTSerializer),
new RegistryEntry<>(Merge.class, EnumSerializer.MergeSerializer),
- new RegistryEntry<>(N.class, EnumSerializer.NSerializer),
+ new RegistryEntry<>(N.class, new NSerializer()),
new RegistryEntry<>(Operator.class, EnumSerializer.OperatorSerializer),
new RegistryEntry<>(Order.class, EnumSerializer.OrderSerializer),
new RegistryEntry<>(Pick.class, EnumSerializer.PickSerializer),
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java
index 730ffab1c9..7ee0dd0406 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/EnumSerializer.java
@@ -52,7 +52,6 @@ public class EnumSerializer<E extends Enum> extends SimpleTypeSerializer<E> {
public static final EnumSerializer<Direction> DirectionSerializer = new EnumSerializer<>(DataType.DIRECTION, Direction::valueOf);
public static final EnumSerializer<DT> DTSerializer = new EnumSerializer<>(DataType.DT, DT::valueOf);
public static final EnumSerializer<Merge> MergeSerializer = new EnumSerializer<>(DataType.MERGE, Merge::valueOf);
- public static final EnumSerializer<N> NSerializer = new EnumSerializer<>(DataType.N, N::valueOf);
public static final EnumSerializer<Operator> OperatorSerializer = new EnumSerializer<>(DataType.OPERATOR, Operator::valueOf);
public static final EnumSerializer<Order> OrderSerializer = new EnumSerializer<>(DataType.ORDER, Order::valueOf);
public static final EnumSerializer<Pick> PickSerializer = new EnumSerializer<>(DataType.PICK, Pick::valueOf);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/NSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/NSerializer.java
new file mode 100644
index 0000000000..b70388ab6f
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/NSerializer.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.binary.types;
+
+import org.apache.tinkerpop.gremlin.process.traversal.N;
+import org.apache.tinkerpop.gremlin.structure.io.Buffer;
+import org.apache.tinkerpop.gremlin.structure.io.binary.DataType;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryReader;
+import org.apache.tinkerpop.gremlin.structure.io.binary.GraphBinaryWriter;
+
+import java.io.IOException;
+import java.time.MonthDay;
+
+public class NSerializer extends SimpleTypeSerializer<N> {
+ public NSerializer() {
+ super(DataType.N);
+ }
+
+ @Override
+ protected N readValue(final Buffer buffer, final GraphBinaryReader context) throws IOException {
+ String name = context.read(buffer);
+ return name.startsWith("big") ? N.valueOf(name) : N.valueOf(name + "_");
+ }
+
+ @Override
+ protected void writeValue(final N value, final Buffer buffer, final GraphBinaryWriter context) throws IOException {
+ String name = value.name().replace("_", "");
+ context.write(name, buffer);
+ }
+}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 1869f3d3b1..b40d029a98 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -279,7 +279,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Direction.class,
DT.class,
Merge.class,
- N.class,
Operator.class,
Order.class,
Pop.class,
@@ -287,6 +286,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Scope.class,
Pick.class,
T.class).forEach(e -> addSerializer(e, new TraversalSerializersV3.EnumJacksonSerializer()));
+ addSerializer(N.class, new TraversalSerializersV3.NJacksonSerializer());
addSerializer(P.class, new TraversalSerializersV3.PJacksonSerializer());
addSerializer(Lambda.class, new TraversalSerializersV3.LambdaJacksonSerializer());
addSerializer(Bytecode.Binding.class, new TraversalSerializersV3.BindingJacksonSerializer());
@@ -327,7 +327,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Direction.values(),
DT.values(),
Merge.values(),
- N.values(),
Operator.values(),
Order.values(),
Pop.values(),
@@ -335,6 +334,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Scope.values(),
Pick.values(),
T.values()).flatMap(Stream::of).forEach(e -> addDeserializer(e.getClass(), new TraversalSerializersV3.EnumJacksonDeserializer(e.getDeclaringClass())));
+ addDeserializer(N.class, new TraversalSerializersV3.NJacksonDeserializer());
addDeserializer(P.class, new TraversalSerializersV3.PJacksonDeserializer());
addDeserializer(TextP.class, new TraversalSerializersV3.TextPJacksonDeserializer());
addDeserializer(Lambda.class, new TraversalSerializersV3.LambdaJacksonDeserializer());
@@ -536,7 +536,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Direction.class,
DT.class,
Merge.class,
- N.class,
Operator.class,
Order.class,
Pop.class,
@@ -544,6 +543,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Scope.class,
Pick.class,
T.class).forEach(e -> addSerializer(e, new TraversalSerializersV2.EnumJacksonSerializer()));
+ addSerializer(N.class, new TraversalSerializersV2.NJacksonSerializer());
addSerializer(P.class, new TraversalSerializersV2.PJacksonSerializer());
addSerializer(Lambda.class, new TraversalSerializersV2.LambdaJacksonSerializer());
addSerializer(Bytecode.Binding.class, new TraversalSerializersV2.BindingJacksonSerializer());
@@ -576,7 +576,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Direction.values(),
DT.values(),
Merge.values(),
- N.values(),
Operator.values(),
Order.values(),
Pop.values(),
@@ -584,6 +583,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
Scope.values(),
Pick.values(),
T.values()).flatMap(Stream::of).forEach(e -> addDeserializer(e.getClass(), new TraversalSerializersV2.EnumJacksonDeserializer(e.getDeclaringClass())));
+ addDeserializer(N.class, new TraversalSerializersV2.NJacksonDeserializer());
addDeserializer(P.class, new TraversalSerializersV2.PJacksonDeserializer());
addDeserializer(TextP.class, new TraversalSerializersV2.TextPJacksonDeserializer());
addDeserializer(Lambda.class, new TraversalSerializersV2.LambdaJacksonDeserializer());
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java
index 2ef49eaa33..4a234098b6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2.java
@@ -22,12 +22,7 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
import org.apache.commons.configuration2.BaseConfiguration;
import org.apache.commons.configuration2.ConfigurationConverter;
import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.*;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
@@ -136,6 +131,21 @@ final class TraversalSerializersV2 {
}
+ static class NJacksonSerializer extends StdScalarSerializer<N> {
+
+ public NJacksonSerializer() {
+ super(N.class);
+ }
+
+ @Override
+ public void serialize(final N enumInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ String name = enumInstance.name();
+ jsonGenerator.writeString(name.replace("_", ""));
+ }
+
+ }
+
final static class PJacksonSerializer extends StdScalarSerializer<P> {
public PJacksonSerializer() {
@@ -316,6 +326,24 @@ final class TraversalSerializersV2 {
}
}
+ final static class NJacksonDeserializer extends StdDeserializer<N> {
+
+ public NJacksonDeserializer() {
+ super(N.class);
+ }
+
+ @Override
+ public N deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ final String enumName = jsonParser.getText();
+ return N.valueOf(enumName.startsWith("big") ? enumName : enumName + "_");
+ }
+
+ @Override
+ public boolean isCachable() {
+ return true;
+ }
+ }
+
final static class PJacksonDeserializer extends StdDeserializer<P> {
public PJacksonDeserializer() {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java
index 9bd1002ac7..3b234de375 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3.java
@@ -22,12 +22,7 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
import org.apache.commons.configuration2.BaseConfiguration;
import org.apache.commons.configuration2.ConfigurationConverter;
import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.TextP;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.*;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
@@ -143,6 +138,21 @@ final class TraversalSerializersV3 {
}
+ static class NJacksonSerializer extends StdScalarSerializer<N> {
+
+ public NJacksonSerializer() {
+ super(N.class);
+ }
+
+ @Override
+ public void serialize(final N enumInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ String name = enumInstance.name();
+ jsonGenerator.writeString(name.replace("_", ""));
+ }
+
+ }
+
final static class PJacksonSerializer extends StdScalarSerializer<P> {
public PJacksonSerializer() {
@@ -336,6 +346,24 @@ final class TraversalSerializersV3 {
}
}
+ final static class NJacksonDeserializer extends StdDeserializer<N> {
+
+ public NJacksonDeserializer() {
+ super(N.class);
+ }
+
+ @Override
+ public N deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ final String enumName = jsonParser.getText();
+ return N.valueOf(enumName.startsWith("big") ? enumName : enumName + "_");
+ }
+
+ @Override
+ public boolean isCachable() {
+ return true;
+ }
+ }
+
final static class PJacksonDeserializer extends AbstractReflectJacksonDeserializer<P> {
public PJacksonDeserializer() {
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 b9e6f8b7c5..41beeaa392 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
@@ -689,38 +689,12 @@ public final class NumberHelper {
* @throws IllegalArgumentException if the specified numeric type is unsupported
*/
public static Number coerceTo(final Number a, final Class<? extends Number> clazz) {
- if (a.getClass().equals(clazz)) {
+ try {
+ return performConversion(a, clazz);
+ } catch (ArithmeticException e) {
+ // return as-is since it didn't fit the type we wanted to coerce to
return a;
- } else if (clazz.equals(Integer.class)) {
- if (a.longValue() >= Integer.MIN_VALUE && a.longValue() <= Integer.MAX_VALUE) {
- return a.intValue();
- }
- } else if (clazz.equals(Long.class)) {
- return a.longValue();
- } else if (clazz.equals(Float.class)) {
- if (a.doubleValue() >= -Float.MAX_VALUE && a.doubleValue() <= Float.MAX_VALUE) {
- return a.floatValue();
- }
- } else if (clazz.equals(Double.class)) {
- return a.doubleValue();
- } else if (clazz.equals(Byte.class)) {
- if (a.longValue() >= Byte.MIN_VALUE && a.longValue() <= Byte.MAX_VALUE) {
- return a.byteValue();
- }
- } else if (clazz.equals(Short.class)) {
- if (a.longValue() >= Short.MIN_VALUE && a.longValue() <= Short.MAX_VALUE) {
- return a.shortValue();
- }
- } else if (clazz.equals(BigInteger.class)) {
- return NumberHelper.bigIntegerValue(a);
- } else if (clazz.equals(BigDecimal.class)) {
- return NumberHelper.bigDecimalValue(a);
- } else {
- throw new IllegalArgumentException("Unsupported numeric type: " + clazz);
}
-
- // return as-is since it didn't fit the type we wanted to coerce to
- return a;
}
/**
@@ -734,27 +708,36 @@ public final class NumberHelper {
* @throws ArithmeticException if the number overflows
*/
public static Number castTo(final Number a, final N numberToken) {
- Class<?> clazz = numberToken.getType();
+ Class<? extends Number> clazz = numberToken.getType();
+ return performConversion(a, clazz);
+ }
+
+ /**
+ * Core conversion logic.
+ * Throws ArithmeticException when conversion would overflow.
+ */
+ private static Number performConversion(final Number a, final Class<? extends Number> clazz) {
if (a.getClass().equals(clazz)) {
return a;
- } else if (clazz.equals(Integer.class)) {
- Long val = getLong(a, numberToken);
+ }
+ if (clazz.equals(Integer.class)) {
+ Long val = getLong(a, clazz);
if (val >= Integer.MIN_VALUE && val <= Integer.MAX_VALUE) {
return a.intValue();
}
} else if (clazz.equals(Long.class)) {
- return getLong(a, numberToken);
+ return getLong(a, clazz);
} else if (clazz.equals(Float.class)) {
- // BigDecimal to double will overflow into Infinity, we want to throw instead of passing through
+ // BigDecimal to double will overflow into Infinity, we want to handle this
if (!a.getClass().equals(BigDecimal.class) &&
- (Double.isInfinite(a.doubleValue()) || Double.isNaN(a.doubleValue()))) {
+ (Double.isInfinite(a.doubleValue()) || Double.isNaN(a.doubleValue()))) {
return a.floatValue();
}
if (a.doubleValue() >= -Float.MAX_VALUE && a.doubleValue() <= Float.MAX_VALUE) {
return a.floatValue();
}
} else if (clazz.equals(Double.class)) {
- // BigDecimal to double will overflow into Infinity, we want to throw instead of passing through
+ // BigDecimal to double will overflow into Infinity, we want to handle this
if (!a.getClass().equals(BigDecimal.class) &&
(Double.isInfinite(a.doubleValue()) || Double.isNaN(a.doubleValue()))) {
return a.doubleValue();
@@ -764,41 +747,45 @@ public final class NumberHelper {
return a.getClass().equals(Float.class) ? Double.parseDouble(a.toString()) : a.doubleValue();
}
} else if (clazz.equals(Byte.class)) {
- Long val = getLong(a, numberToken);
+ Long val = getLong(a, clazz);
if (val >= Byte.MIN_VALUE && val <= Byte.MAX_VALUE) {
return a.byteValue();
}
} else if (clazz.equals(Short.class)) {
- Long val = getLong(a, numberToken);
+ Long val = getLong(a, clazz);
if (val >= Short.MIN_VALUE && val <= Short.MAX_VALUE) {
return a.shortValue();
}
} else if (clazz.equals(BigInteger.class)) {
return NumberHelper.bigIntegerValue(a);
} else if (clazz.equals(BigDecimal.class)) {
- // float losses precision, use string intermediate
- return a.getClass().equals(Float.class) ? new BigDecimal(a.toString()) : NumberHelper.bigDecimalValue(a);
+ return NumberHelper.bigDecimalValue(a);
} else {
- throw new IllegalArgumentException("Unsupported number type token: " + numberToken);
+ throw new IllegalArgumentException("Unsupported numeric type: " + clazz);
}
throw new ArithmeticException(String.format("Can't convert number of type %s to %s due to overflow.",
- a.getClass().getSimpleName(), numberToken));
+ a.getClass().getSimpleName(), clazz.getSimpleName()));
}
- private static Long getLong(final Number num, final N numberToken) {
+ private static Long getLong(final Number num, final Class<? extends Number> clazz) {
// Explicitly throw when converting floating point infinity and NaN to whole numbers
if (Double.isNaN(num.doubleValue())) {
- throw new ArithmeticException(String.format("Can't convert NaN to %s.", numberToken));
+ throw new ArithmeticException(String.format("Can't convert NaN to %s.", clazz.getSimpleName()));
}
if (Double.isInfinite(num.doubleValue())) {
- throw new ArithmeticException(String.format("Can't convert floating point infinity to %s.", numberToken));
+ throw new ArithmeticException(String.format("Can't convert floating point infinity to %s.", clazz.getSimpleName()));
+ }
+ String msg = String.format("Can't convert number of type %s to %s due to overflow.",
+ num.getClass().getSimpleName(), clazz.getSimpleName());
+ if ((num.getClass().equals(Double.class) || num.getClass().equals(Float.class)) && (num.doubleValue()) > Long.MAX_VALUE) {
+ throw new ArithmeticException(msg);
}
try {
+ if (num.getClass().equals(BigDecimal.class)) return ((BigDecimal) num).longValueExact();
return num.getClass().equals(BigInteger.class) ? ((BigInteger) num).longValueExact() : num.longValue();
} catch (ArithmeticException ae) {
- throw new ArithmeticException(String.format("Can't convert number of type %s to %s due to overflow.",
- num.getClass().getSimpleName(), numberToken));
+ throw new ArithmeticException(msg);
}
}
@@ -834,6 +821,8 @@ public final class NumberHelper {
private static BigInteger bigIntegerValue(final Number number) {
if (number == null) return null;
if (number instanceof BigInteger) return (BigInteger) number;
+ if (number instanceof BigDecimal) return ((BigDecimal) number).toBigInteger();
+ if (number instanceof Double) return BigDecimal.valueOf(number.doubleValue()).toBigInteger();
return BigInteger.valueOf(number.longValue());
}
@@ -841,7 +830,8 @@ public final class NumberHelper {
if (number == null) return null;
if (number instanceof BigDecimal) return (BigDecimal) number;
if (number instanceof BigInteger) return new BigDecimal((BigInteger) number);
- return (number instanceof Double || number instanceof Float)
+ if (number instanceof Float) return new BigDecimal(number.toString()); // float losses precision, use string intermediate
+ return (number instanceof Double)
? BigDecimal.valueOf(number.doubleValue())
: BigDecimal.valueOf(number.longValue());
}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java
index 2409663e47..03165106a9 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.language.grammar;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
+import org.apache.tinkerpop.gremlin.process.traversal.N;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -31,15 +32,12 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.lang.reflect.Constructor;
-import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -459,6 +457,40 @@ public class GeneralLiteralVisitorTest {
}
}
+ @RunWith(Parameterized.class)
+ public static class ValidEnumNLiteralTest {
+
+ @Parameterized.Parameter(value = 0)
+ public String script;
+
+ @Parameterized.Parameter(value = 1)
+ public N expected;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static Iterable<Object[]> generateTestParameters() {
+ return Arrays.asList(new Object[][]{
+ {"byte", N.byte_},
+ {"short", N.short_},
+ {"int", N.int_},
+ {"long", N.long_},
+ {"float", N.float_},
+ {"double", N.double_},
+ {"bigInt", N.bigInt},
+ {"bigDecimal", N.bigDecimal},
+ });
+ }
+
+ @Test
+ public void shouldParse() {
+ final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(script));
+ final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
+ final GremlinParser.TraversalNContext ctx = parser.traversalN();
+
+ final N n = (N) new GenericLiteralVisitor(new GremlinAntlrToJava()).visitTraversalN(ctx);
+ assertEquals(expected, n);
+ }
+ }
+
@RunWith(Parameterized.class)
public static class ValidDatetimeLiteralTest {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
index 746a0cd711..0b47507c46 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
@@ -740,6 +740,24 @@ public class GremlinTranslatorTest {
null,
null,
"g.inject(long(1694017707000)).as_date()"},
+ {"g.inject(\"123.4\").asNumber(N.int)",
+ null,
+ "g.inject(string0).asNumber(N.int)",
+ "g.Inject<object>(\"123.4\").AsNumber(N.Int)",
+ "g.Inject(\"123.4\").AsNumber(gremlingo.N.Int)",
+ "g.inject(\"123.4\").asNumber(N.int_)",
+ "g.inject(\"123.4\").asNumber(N.int_)",
+ "g.inject(\"123.4\").asNumber(N.int_)",
+ "g.inject('123.4').as_number(N.int)"},
+ {"g.inject(\"123.4\").asNumber(N.bigInt)",
+ null,
+ "g.inject(string0).asNumber(N.bigInt)",
+ "g.Inject<object>(\"123.4\").AsNumber(N.BigInt)",
+ "g.Inject(\"123.4\").AsNumber(gremlingo.N.BigInt)",
+ "g.inject(\"123.4\").asNumber(N.bigInt)",
+ "g.inject(\"123.4\").asNumber(N.bigInt)",
+ "g.inject(\"123.4\").asNumber(N.bigInt)",
+ "g.inject('123.4').as_number(N.big_int)"},
{"g.V().hasLabel(null)",
null,
"g.V().hasLabel(string0)",
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsNumberStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsNumberStepTest.java
index 1eef3b829b..ec98bd0285 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsNumberStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsNumberStepTest.java
@@ -43,18 +43,18 @@ public class AsNumberStepTest extends StepTest {
@Test
public void testReturnTypes() {
assertEquals(1, __.__(1).asNumber().next());
- assertEquals((byte) 1, __.__(1).asNumber(N.nbyte).next());
- assertEquals(1, __.__(1.8).asNumber(N.nint).next());
- assertEquals(1, __.__(1L).asNumber(N.nint).next());
+ assertEquals((byte) 1, __.__(1).asNumber(N.byte_).next());
+ assertEquals(1, __.__(1.8).asNumber(N.int_).next());
+ assertEquals(1, __.__(1L).asNumber(N.int_).next());
assertEquals(1L, __.__(1L).asNumber().next());
- assertEquals(3.14f, __.__(3.14).asNumber(N.nfloat).next());
- assertEquals(3.14, __.__(3.14f).asNumber(N.ndouble).next());
- assertEquals(1, __.__("1").asNumber(N.nint).next());
+ assertEquals(3.14f, __.__(3.14).asNumber(N.float_).next());
+ assertEquals(3.14, __.__(3.14f).asNumber(N.double_).next());
+ assertEquals(1, __.__("1").asNumber(N.int_).next());
assertEquals(1, __.__("1").asNumber().next());
- assertEquals((byte) 1, __.__("1").asNumber(N.nbyte).next());
- assertEquals((short) 1, __.__("1").asNumber(N.nshort).next());
- assertEquals(1L, __.__("1").asNumber(N.nlong).next());
- assertEquals(3.14, __.__("3.14").asNumber(N.ndouble).next()); //float to double
+ assertEquals((byte) 1, __.__("1").asNumber(N.byte_).next());
+ assertEquals((short) 1, __.__("1").asNumber(N.short_).next());
+ assertEquals(1L, __.__("1").asNumber(N.long_).next());
+ assertEquals(3.14, __.__("3.14").asNumber(N.double_).next()); //float to double
// NumberUtils allows additional string processing
assertEquals(123.0f, __.__("123.").asNumber().next());
assertEquals(291, __.__("0x123").asNumber().next());
@@ -83,215 +83,231 @@ public class AsNumberStepTest extends StepTest {
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenParsedNumberOverflows() {
- __.__("128").asNumber(N.nbyte).next();
+ __.__("128").asNumber(N.byte_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenCastNumberOverflows() {
- __.__(128).asNumber(N.nbyte).next();
+ __.__(128).asNumber(N.byte_).next();
}
@Test
public void testStringToByte() {
- assertEquals((byte) 0, __.__("0").asNumber(N.nbyte).next());
- assertEquals((byte) 127, __.__("127").asNumber(N.nbyte).next());
- assertEquals((byte) -128, __.__("-128").asNumber(N.nbyte).next());
- assertEquals((byte) 42, __.__("42").asNumber(N.nbyte).next());
- assertEquals((byte) -42, __.__("-42").asNumber(N.nbyte).next());
- assertEquals((byte) 1, __.__("1").asNumber(N.nbyte).next());
+ assertEquals((byte) 0, __.__("0").asNumber(N.byte_).next());
+ assertEquals((byte) 127, __.__("127").asNumber(N.byte_).next());
+ assertEquals((byte) -128, __.__("-128").asNumber(N.byte_).next());
+ assertEquals((byte) 42, __.__("42").asNumber(N.byte_).next());
+ assertEquals((byte) -42, __.__("-42").asNumber(N.byte_).next());
+ assertEquals((byte) 1, __.__("1").asNumber(N.byte_).next());
}
@Test
public void testStringToShort() {
- assertEquals((short) 0, __.__("0").asNumber(N.nshort).next());
- assertEquals((short) 32767, __.__("32767").asNumber(N.nshort).next());
- assertEquals((short) -32768, __.__("-32768").asNumber(N.nshort).next());
- assertEquals((short) 1000, __.__("1000").asNumber(N.nshort).next());
- assertEquals((short) -1000, __.__("-1000").asNumber(N.nshort).next());
- assertEquals((short) 255, __.__("255").asNumber(N.nshort).next());
+ assertEquals((short) 0, __.__("0").asNumber(N.short_).next());
+ assertEquals((short) 32767, __.__("32767").asNumber(N.short_).next());
+ assertEquals((short) -32768, __.__("-32768").asNumber(N.short_).next());
+ assertEquals((short) 1000, __.__("1000").asNumber(N.short_).next());
+ assertEquals((short) -1000, __.__("-1000").asNumber(N.short_).next());
+ assertEquals((short) 255, __.__("255").asNumber(N.short_).next());
}
@Test
public void testStringToInt() {
- assertEquals(0, __.__("0").asNumber(N.nint).next());
- assertEquals(2147483647, __.__("2147483647").asNumber(N.nint).next());
- assertEquals(-2147483648, __.__("-2147483648").asNumber(N.nint).next());
- assertEquals(123456, __.__("123456").asNumber(N.nint).next());
- assertEquals(-123456, __.__("-123456").asNumber(N.nint).next());
- assertEquals(65536, __.__("65536").asNumber(N.nint).next());
+ assertEquals(0, __.__("0").asNumber(N.int_).next());
+ assertEquals(2147483647, __.__("2147483647").asNumber(N.int_).next());
+ assertEquals(-2147483648, __.__("-2147483648").asNumber(N.int_).next());
+ assertEquals(123456, __.__("123456").asNumber(N.int_).next());
+ assertEquals(-123456, __.__("-123456").asNumber(N.int_).next());
+ assertEquals(65536, __.__("65536").asNumber(N.int_).next());
}
@Test
public void testStringToLong() {
- assertEquals(0L, __.__("0").asNumber(N.nlong).next());
- assertEquals(9223372036854775807L, __.__("9223372036854775807").asNumber(N.nlong).next());
- assertEquals(-9223372036854775808L, __.__("-9223372036854775808").asNumber(N.nlong).next());
- assertEquals(123456789L, __.__("123456789").asNumber(N.nlong).next());
- assertEquals(-123456789L, __.__("-123456789").asNumber(N.nlong).next());
- assertEquals(4294967296L, __.__("4294967296").asNumber(N.nlong).next());
+ assertEquals(0L, __.__("0").asNumber(N.long_).next());
+ assertEquals(9223372036854775807L, __.__("9223372036854775807").asNumber(N.long_).next());
+ assertEquals(-9223372036854775808L, __.__("-9223372036854775808").asNumber(N.long_).next());
+ assertEquals(123456789L, __.__("123456789").asNumber(N.long_).next());
+ assertEquals(-123456789L, __.__("-123456789").asNumber(N.long_).next());
+ assertEquals(4294967296L, __.__("4294967296").asNumber(N.long_).next());
}
@Test
public void testStringToFloat() {
- assertEquals(0.0f, __.__("0.0").asNumber(N.nfloat).next());
- assertEquals(3.14f, __.__("3.14").asNumber(N.nfloat).next());
- assertEquals(-3.14f, __.__("-3.14").asNumber(N.nfloat).next());
- assertEquals(1.23e10f, __.__("1.23e10").asNumber(N.nfloat).next());
- assertEquals(-1.23e-10f, __.__("-1.23e-10").asNumber(N.nfloat).next());
- assertEquals(Float.MAX_VALUE, __.__("3.4028235E38").asNumber(N.nfloat).next());
- assertEquals(Float.MIN_VALUE, __.__("1.4E-45").asNumber(N.nfloat).next());
+ assertEquals(0.0f, __.__("0.0").asNumber(N.float_).next());
+ assertEquals(3.14f, __.__("3.14").asNumber(N.float_).next());
+ assertEquals(-3.14f, __.__("-3.14").asNumber(N.float_).next());
+ assertEquals(1.23e10f, __.__("1.23e10").asNumber(N.float_).next());
+ assertEquals(-1.23e-10f, __.__("-1.23e-10").asNumber(N.float_).next());
+ assertEquals(Float.MAX_VALUE, __.__("3.4028235E38").asNumber(N.float_).next());
+ assertEquals(Float.MIN_VALUE, __.__("1.4E-45").asNumber(N.float_).next());
}
@Test
public void testStringToDouble() {
- assertEquals(0.0, __.__("0.0").asNumber(N.ndouble).next());
- assertEquals(3.141592653589793, __.__("3.141592653589793").asNumber(N.ndouble).next());
- assertEquals(-3.141592653589793, __.__("-3.141592653589793").asNumber(N.ndouble).next());
- assertEquals(1.23e100, __.__("1.23e100").asNumber(N.ndouble).next());
- assertEquals(-1.23e-100, __.__("-1.23e-100").asNumber(N.ndouble).next());
- assertEquals(Double.MAX_VALUE, __.__("1.7976931348623157E308").asNumber(N.ndouble).next());
- assertEquals(Double.MIN_VALUE, __.__("4.9E-324").asNumber(N.ndouble).next());
+ assertEquals(0.0, __.__("0.0").asNumber(N.double_).next());
+ assertEquals(3.141592653589793, __.__("3.141592653589793").asNumber(N.double_).next());
+ assertEquals(-3.141592653589793, __.__("-3.141592653589793").asNumber(N.double_).next());
+ assertEquals(1.23e100, __.__("1.23e100").asNumber(N.double_).next());
+ assertEquals(-1.23e-100, __.__("-1.23e-100").asNumber(N.double_).next());
+ assertEquals(Double.MAX_VALUE, __.__("1.7976931348623157E308").asNumber(N.double_).next());
+ assertEquals(Double.MIN_VALUE, __.__("4.9E-324").asNumber(N.double_).next());
}
@Test
public void testStringToBigInteger() {
- assertEquals(new BigInteger("0"), __.__("0").asNumber(N.nbigInt).next());
+ assertEquals(new BigInteger("0"), __.__("0").asNumber(N.bigInt).next());
assertEquals(new BigInteger("123456789012345678901234567890"),
- __.__("123456789012345678901234567890").asNumber(N.nbigInt).next());
+ __.__("123456789012345678901234567890").asNumber(N.bigInt).next());
assertEquals(new BigInteger("-123456789012345678901234567890"),
- __.__("-123456789012345678901234567890").asNumber(N.nbigInt).next());
+ __.__("-123456789012345678901234567890").asNumber(N.bigInt).next());
assertEquals(new BigInteger("999999999999999999999999999999999999999999999999999"),
- __.__("999999999999999999999999999999999999999999999999999").asNumber(N.nbigInt).next());
- assertEquals(new BigInteger("1"), __.__("1").asNumber(N.nbigInt).next());
+ __.__("999999999999999999999999999999999999999999999999999").asNumber(N.bigInt).next());
+ assertEquals(new BigInteger("1"), __.__("1").asNumber(N.bigInt).next());
+ assertEquals(new BigInteger("1000000000000000000000"), __.__(new Double("1000000000000000000000")).asNumber(N.bigInt).next());
}
@Test
public void testStringToBigDecimal() {
- assertEquals(new BigDecimal("0.0"), __.__("0.0").asNumber(N.nbigDecimal).next());
+ assertEquals(new BigDecimal("0.0"), __.__("0.0").asNumber(N.bigDecimal).next());
assertEquals(new BigDecimal("123456789012345678901234567890.123456789"),
- __.__("123456789012345678901234567890.123456789").asNumber(N.nbigDecimal).next());
+ __.__("123456789012345678901234567890.123456789").asNumber(N.bigDecimal).next());
assertEquals(new BigDecimal("-123456789012345678901234567890.123456789"),
- __.__("-123456789012345678901234567890.123456789").asNumber(N.nbigDecimal).next());
+ __.__("-123456789012345678901234567890.123456789").asNumber(N.bigDecimal).next());
// Note directly constructing BigDecimal returns 1E-39, but parsing then converting from double results in 1.0E-39
assertEquals(BigDecimal.valueOf(Double.parseDouble("0.000000000000000000000000000000000000001")),
- __.__("0.000000000000000000000000000000000000001").asNumber(N.nbigDecimal).next());
- assertEquals(new BigDecimal("1.0"), __.__("1.0").asNumber(N.nbigDecimal).next());
+ __.__("0.000000000000000000000000000000000000001").asNumber(N.bigDecimal).next());
+ assertEquals(new BigDecimal("1.0"), __.__("1.0").asNumber(N.bigDecimal).next());
}
// ===== EDGE CASE TESTS =====
@Test
public void testCastInfinityAndNaN() {
- assertEquals(Double.POSITIVE_INFINITY, __.__(Float.POSITIVE_INFINITY).asNumber(N.ndouble).next());
- assertEquals(Double.NEGATIVE_INFINITY, __.__(Float.NEGATIVE_INFINITY).asNumber(N.ndouble).next());
- assertEquals(Double.NaN, __.__(Float.NaN).asNumber(N.ndouble).next());
- assertEquals(Float.POSITIVE_INFINITY, __.__(Double.POSITIVE_INFINITY).asNumber(N.nfloat).next());
- assertEquals(Float.NEGATIVE_INFINITY, __.__(Double.NEGATIVE_INFINITY).asNumber(N.nfloat).next());
- assertEquals(Float.NaN, __.__(Double.NaN).asNumber(N.nfloat).next());
+ assertEquals(Double.POSITIVE_INFINITY, __.__(Float.POSITIVE_INFINITY).asNumber(N.double_).next());
+ assertEquals(Double.NEGATIVE_INFINITY, __.__(Float.NEGATIVE_INFINITY).asNumber(N.double_).next());
+ assertEquals(Double.NaN, __.__(Float.NaN).asNumber(N.double_).next());
+ assertEquals(Float.POSITIVE_INFINITY, __.__(Double.POSITIVE_INFINITY).asNumber(N.float_).next());
+ assertEquals(Float.NEGATIVE_INFINITY, __.__(Double.NEGATIVE_INFINITY).asNumber(N.float_).next());
+ assertEquals(Float.NaN, __.__(Double.NaN).asNumber(N.float_).next());
}
@Test
public void testStringWithWhitespace() {
- assertEquals(42, __.__(" 42 ").asNumber(N.nint).next());
- assertEquals(42, __.__("\t42\n").asNumber(N.nint).next());
- assertEquals(3.14, __.__(" 3.14 ").asNumber(N.ndouble).next());
- assertEquals((byte) 127, __.__(" 127 ").asNumber(N.nbyte).next());
+ assertEquals(42, __.__(" 42 ").asNumber(N.int_).next());
+ assertEquals(42, __.__("\t42\n").asNumber(N.int_).next());
+ assertEquals(3.14, __.__(" 3.14 ").asNumber(N.double_).next());
+ assertEquals((byte) 127, __.__(" 127 ").asNumber(N.byte_).next());
}
@Test
public void testStringWithPlusSign() {
- assertEquals(42, __.__("+42").asNumber(N.nint).next());
- assertEquals(3.14, __.__("+3.14").asNumber(N.ndouble).next());
- assertEquals((byte) 42, __.__("+42").asNumber(N.nbyte).next());
- assertEquals(new BigInteger("42"), __.__("+42").asNumber(N.nbigInt).next());
+ assertEquals(42, __.__("+42").asNumber(N.int_).next());
+ assertEquals(3.14, __.__("+3.14").asNumber(N.double_).next());
+ assertEquals((byte) 42, __.__("+42").asNumber(N.byte_).next());
+ assertEquals(new BigInteger("42"), __.__("+42").asNumber(N.bigInt).next());
}
@Test
public void testZeroValues() {
- assertEquals((byte) 0, __.__("0").asNumber(N.nbyte).next());
- assertEquals((short) 0, __.__("0").asNumber(N.nshort).next());
- assertEquals(0, __.__("0").asNumber(N.nint).next());
- assertEquals(0L, __.__("0").asNumber(N.nlong).next());
- assertEquals(0.0f, __.__("0.0").asNumber(N.nfloat).next());
- assertEquals(0.0, __.__("0.0").asNumber(N.ndouble).next());
- assertEquals(new BigInteger("0"), __.__("0").asNumber(N.nbigInt).next());
- assertEquals(new BigDecimal("0.0"), __.__("0.0").asNumber(N.nbigDecimal).next());
+ assertEquals((byte) 0, __.__("0").asNumber(N.byte_).next());
+ assertEquals((short) 0, __.__("0").asNumber(N.short_).next());
+ assertEquals(0, __.__("0").asNumber(N.int_).next());
+ assertEquals(0L, __.__("0").asNumber(N.long_).next());
+ assertEquals(0.0f, __.__("0.0").asNumber(N.float_).next());
+ assertEquals(0.0, __.__("0.0").asNumber(N.double_).next());
+ assertEquals(new BigInteger("0"), __.__("0").asNumber(N.bigInt).next());
+ assertEquals(new BigDecimal("0.0"), __.__("0.0").asNumber(N.bigDecimal).next());
}
@Test
public void testScientificNotation() {
- assertEquals(1.23e10f, __.__("1.23e10").asNumber(N.nfloat).next());
- assertEquals(1.23e10, __.__("1.23e10").asNumber(N.ndouble).next());
- assertEquals(1.23e-10f, __.__("1.23e-10").asNumber(N.nfloat).next());
- assertEquals(1.23e-10, __.__("1.23e-10").asNumber(N.ndouble).next());
- assertEquals(new BigDecimal("1.23E10"), __.__("1.23e10").asNumber(N.nbigDecimal).next());
+ assertEquals(1.23e10f, __.__("1.23e10").asNumber(N.float_).next());
+ assertEquals(1.23e10, __.__("1.23e10").asNumber(N.double_).next());
+ assertEquals(1.23e-10f, __.__("1.23e-10").asNumber(N.float_).next());
+ assertEquals(1.23e-10, __.__("1.23e-10").asNumber(N.double_).next());
+ assertEquals(new BigDecimal("1.23E10"), __.__("1.23e10").asNumber(N.bigDecimal).next());
}
// ===== OVERFLOW EXCEPTION TESTS =====
@Test(expected = ArithmeticException.class)
public void shouldThrowCastExceptionConvertingInfinityToWholeNumber() {
- __.__(Double.POSITIVE_INFINITY).asNumber(N.nlong).next();
+ __.__(Double.POSITIVE_INFINITY).asNumber(N.long_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowCastExceptionConvertingNaNToWholeNumber() {
- __.__(Double.NaN).asNumber(N.nint).next();
+ __.__(Double.NaN).asNumber(N.int_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringByteOverflowsPositive() {
- __.__("128").asNumber(N.nbyte).next();
+ __.__("128").asNumber(N.byte_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringByteOverflowsNegative() {
- __.__("-129").asNumber(N.nbyte).next();
+ __.__("-129").asNumber(N.byte_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringShortOverflowsPositive() {
- __.__("32768").asNumber(N.nshort).next();
+ __.__("32768").asNumber(N.short_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringShortOverflowsNegative() {
- __.__("-32769").asNumber(N.nshort).next();
+ __.__("-32769").asNumber(N.short_).next();
+ }
+
+ @Test(expected = ArithmeticException.class)
+ public void shouldThrowOverflowExceptionWhenBigDecimalToShortOverflows() {
+ __.__(new BigDecimal(Long.MAX_VALUE+"1")).asNumber(N.short_).next();
+ }
+
+ @Test(expected = ArithmeticException.class)
+ public void shouldThrowOverflowExceptionWhenFloatToLongOverflows() {
+ __.__(new Float(Long.MAX_VALUE+"1")).asNumber(N.long_).next();
+ }
+
+ @Test(expected = ArithmeticException.class)
+ public void shouldThrowOverflowExceptionWhenDoubleToLongOverflows() {
+ __.__(new Double(Long.MAX_VALUE+"1")).asNumber(N.long_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringIntOverflowsPositive() {
- __.__("2147483648").asNumber(N.nint).next();
+ __.__("2147483648").asNumber(N.int_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringIntOverflowsNegative() {
- __.__("-2147483649").asNumber(N.nint).next();
+ __.__("-2147483649").asNumber(N.int_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringLongOverflowsPositive() {
- __.__("9223372036854775809").asNumber(N.nlong).next();
+ __.__("9223372036854775809").asNumber(N.long_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenStringLongOverflowsNegative() {
- __.__("-9223372036854775809").asNumber(N.nlong).next();
+ __.__("-9223372036854775809").asNumber(N.long_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenDoubleStringToFloatOverflows() {
- __.__("3.5E38").asNumber(N.nfloat).next();
+ __.__("3.5E38").asNumber(N.float_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenBigDecimalStringToDoubleOverflows() {
- __.__("1.8E308").asNumber(N.ndouble).next();
+ __.__("1.8E308").asNumber(N.double_).next();
}
@Test(expected = ArithmeticException.class)
public void shouldThrowOverflowExceptionWhenBigDecimalStringToFloatOverflows() {
- __.__("1.8E308").asNumber(N.nfloat).next();
+ __.__("1.8E308").asNumber(N.float_).next();
}
// ===== INVALID FORMAT EXCEPTION TESTS =====
@@ -355,26 +371,26 @@ public class AsNumberStepTest extends StepTest {
@Test
public void testBoundaryValues() {
- assertEquals(Byte.MAX_VALUE, __.__("127").asNumber(N.nbyte).next());
- assertEquals(Byte.MIN_VALUE, __.__("-128").asNumber(N.nbyte).next());
- assertEquals(Short.MAX_VALUE, __.__("32767").asNumber(N.nshort).next());
- assertEquals(Short.MIN_VALUE, __.__("-32768").asNumber(N.nshort).next());
- assertEquals(Integer.MAX_VALUE, __.__("2147483647").asNumber(N.nint).next());
- assertEquals(Integer.MIN_VALUE, __.__("-2147483648").asNumber(N.nint).next());
- assertEquals(Long.MAX_VALUE, __.__("9223372036854775807").asNumber(N.nlong).next());
- assertEquals(Long.MIN_VALUE, __.__("-9223372036854775808").asNumber(N.nlong).next());
+ assertEquals(Byte.MAX_VALUE, __.__("127").asNumber(N.byte_).next());
+ assertEquals(Byte.MIN_VALUE, __.__("-128").asNumber(N.byte_).next());
+ assertEquals(Short.MAX_VALUE, __.__("32767").asNumber(N.short_).next());
+ assertEquals(Short.MIN_VALUE, __.__("-32768").asNumber(N.short_).next());
+ assertEquals(Integer.MAX_VALUE, __.__("2147483647").asNumber(N.int_).next());
+ assertEquals(Integer.MIN_VALUE, __.__("-2147483648").asNumber(N.int_).next());
+ assertEquals(Long.MAX_VALUE, __.__("9223372036854775807").asNumber(N.long_).next());
+ assertEquals(Long.MIN_VALUE, __.__("-9223372036854775808").asNumber(N.long_).next());
}
@Test
public void testHighPrecisionDecimals() {
assertEquals(new BigDecimal("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067"),
- __.__("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067").asNumber(N.nbigDecimal).next());
+ __.__("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067").asNumber(N.bigDecimal).next());
}
@Test
public void testVeryLargeNumbers() {
String largeNumber = "12345678901234567890123456789012345678901234567890123456789012345678901234567890";
- assertEquals(new BigInteger(largeNumber), __.__(largeNumber).asNumber(N.nbigInt).next());
+ assertEquals(new BigInteger(largeNumber), __.__(largeNumber).asNumber(N.bigInt).next());
}
}
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 20772da0c9..ac848f6025 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
@@ -715,73 +715,79 @@ public class NumberHelperTest {
@Test
public void shouldCastToReturnSameInstanceForSameClass() {
final Integer value = 42;
- assertEquals(value, NumberHelper.castTo(value, N.nint));
+ assertEquals(value, NumberHelper.castTo(value, N.int_));
}
@Test
public void shouldCastToConvertToByte() {
final Integer value = 42;
- assertEquals(Byte.valueOf((byte) 42), NumberHelper.castTo(value, N.nbyte));
+ assertEquals(Byte.valueOf((byte) 42), NumberHelper.castTo(value, N.byte_));
}
@Test
public void shouldCastToConvertToShort() {
final Integer value = 42;
- assertEquals(Short.valueOf((short) 42), NumberHelper.castTo(value, N.nshort));
+ assertEquals(Short.valueOf((short) 42), NumberHelper.castTo(value, N.short_));
}
@Test
public void shouldCastToConvertToLong() {
final Integer value = 42;
- assertEquals(Long.valueOf(42L), NumberHelper.castTo(value, N.nlong));
+ assertEquals(Long.valueOf(42L), NumberHelper.castTo(value, N.long_));
}
@Test
public void shouldCastToConvertToFloat() {
final Integer value = 42;
- assertEquals(Float.valueOf(42.0f), NumberHelper.castTo(value, N.nfloat));
+ assertEquals(Float.valueOf(42.0f), NumberHelper.castTo(value, N.float_));
}
@Test
public void shouldCastToConvertToDouble() {
final Integer value = 42;
- assertEquals(Double.valueOf(42.0), NumberHelper.castTo(value, N.ndouble));
+ assertEquals(Double.valueOf(42.0), NumberHelper.castTo(value, N.double_));
}
@Test
public void shouldCastToConvertToBigInteger() {
final Integer value = 42;
- assertEquals(BigInteger.valueOf(42), NumberHelper.castTo(value, N.nbigInt));
+ assertEquals(BigInteger.valueOf(42), NumberHelper.castTo(value, N.bigInt));
+ }
+
+ @Test
+ public void shouldCastToConvertDoubleToBigInteger() {
+ final Double value = new Double("1000000000000000000000");
+ assertEquals(new BigInteger("1000000000000000000000"), NumberHelper.castTo(value, N.bigInt));
}
@Test
public void shouldCastToConvertToBigDecimal() {
final Integer value = 42;
- assertEquals(BigDecimal.valueOf(42), NumberHelper.castTo(value, N.nbigDecimal));
+ assertEquals(BigDecimal.valueOf(42), NumberHelper.castTo(value, N.bigDecimal));
}
@Test(expected = ArithmeticException.class)
public void shouldOverflowIfCannotFitInByte() {
final Integer value = 128;
- NumberHelper.castTo(value, N.nbyte);
+ NumberHelper.castTo(value, N.byte_);
}
@Test(expected = ArithmeticException.class)
public void shouldOverflowIfCannotFitInShort() {
final Integer value = 32768;
- NumberHelper.castTo(value, N.nshort);
+ NumberHelper.castTo(value, N.short_);
}
@Test(expected = ArithmeticException.class)
public void shouldOverflowIfCannotFitInInteger() {
final Long value = 2147483648L;
- NumberHelper.castTo(value, N.nint);
+ NumberHelper.castTo(value, N.int_);
}
@Test(expected = ArithmeticException.class)
public void shouldOverflowIfCannotFitInFloat() {
final Double value = Double.MAX_VALUE;
- NumberHelper.castTo(value, N.nfloat);
+ NumberHelper.castTo(value, N.float_);
}
}
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/N.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/N.cs
index 8996957b30..b0081ba3d0 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/N.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/N.cs
@@ -35,25 +35,25 @@ namespace Gremlin.Net.Process.Traversal
{
}
- public static N NByte => new N("nbyte");
- public static N NShort => new N("nshort");
- public static N NInt => new N("nint");
- public static N NLong => new N("nlong");
- public static N NFloat => new N("nfloat");
- public static N NDouble => new N("ndouble");
- public static N NBigInt => new N("nbigInt");
- public static N NBigDecimal => new N("nbigDecimal");
+ public static N Byte => new N("byte");
+ public static N Short => new N("short");
+ public static N Int => new N("int");
+ public static N Long => new N("long");
+ public static N Float => new N("float");
+ public static N Double => new N("double");
+ public static N BigInt => new N("bigInt");
+ public static N BigDecimal => new N("bigDecimal");
private static readonly Dictionary<string, N> Properties = new()
{
- { "nbyte", NByte },
- { "nshort", NShort },
- { "nint", NInt },
- { "nlong", NLong },
- { "nfloat", NFloat },
- { "ndouble", NDouble },
- { "nbigInt", NBigInt },
- { "nbigDecimal", NBigDecimal },
+ { "byte", Byte },
+ { "short", Short },
+ { "int", Int },
+ { "long", Long },
+ { "float", Float },
+ { "double", Double },
+ { "bigInt", BigInt },
+ { "bigDecimal", BigDecimal },
};
/// <summary>
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 466499259a..776bf8d651 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -629,23 +629,23 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{"g_injectX5nX_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new BigInteger(5)).AsNumber()}},
{"g_injectX5_0X_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5.0).AsNumber()}},
{"g_injectX5_75fX_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5.75f).AsNumber()}},
- {"g_injectX5_43X_asNumberXN_nintX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5.43).AsNumber(N.Nint)}},
- {"g_injectX5_67X_asNumberXN_nintX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5.67).AsNumber(N.Nint)}},
- {"g_injectX5X_asNumberXN_nlongX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5).AsNumber(N.Nlong)}},
- {"g_injectX12X_asNumberXN_nbyteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(12).AsNumber(N.Nbyte)}},
- {"g_injectX32768X_asNumberXN_nshortX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(32768).AsNumber(N.Nshort)}},
- {"g_injectX300X_asNumberXN_nbyteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(300).AsNumber(N.Nbyte)}},
+ {"g_injectX5_43X_asNumberXN_intX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5.43).AsNumber(N.Int)}},
+ {"g_injectX5_67X_asNumberXN_intX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5.67).AsNumber(N.Int)}},
+ {"g_injectX5X_asNumberXN_longX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(5).AsNumber(N.Long)}},
+ {"g_injectX12X_asNumberXN_byteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(12).AsNumber(N.Byte)}},
+ {"g_injectX32768X_asNumberXN_shortX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(32768).AsNumber(N.Short)}},
+ {"g_injectX300X_asNumberXN_byteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(300).AsNumber(N.Byte)}},
{"g_injectX5X_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("5").AsNumber()}},
- {"g_injectX5X_asNumberXN_byteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("5").AsNumber(N.Nbyte)}},
- {"g_injectX1_000X_asNumberXN_nintX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("1,000").AsNumber(N.Nint)}},
+ {"g_injectX5X_asNumberXN_byteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("5").AsNumber(N.Byte)}},
+ {"g_injectX1_000X_asNumberXN_bigIntX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("1,000").AsNumber(N.BigInt)}},
{"g_injectXtestX_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("test").AsNumber()}},
{"g_injectX_1_2_3_4X_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4 }).AsNumber()}},
{"g_injectX1_2_3_4X_unfold_asNumber", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 2, 3, 4 }).Unfold<object>().AsNumber()}},
{"g_injectX_1__2__3__4_X_asNumberXX_foldXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("1", 2, "3", 4).AsNumber().Fold()}},
- {"g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXnbyteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(p["xx1"], p["xx2"], p["xx3"], "4", "0x5").AsNumber().Sum<object>().AsNumber(N.Nbyte)}},
- {"g_VX1X_asNumberXN_nintX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(null).AsNumber(N.Nint)}},
- {"g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXnintX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().As("a").Out("knows").As("b").Math("a + b").By("age").AsNumber(N.Nint)}},
- {"g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXnlongX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithSideEffect("x", p["xx1"]).V().Values<object>("age").Math("_ + x").AsNumber(N.Nlong)}},
+ {"g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXbyteX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(p["xx1"], p["xx2"], p["xx3"], "4", "0x5").AsNumber().Sum<object>().AsNumber(N.Byte)}},
+ {"g_VX1X_asNumberXN_intX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(null).AsNumber(N.Int)}},
+ {"g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXintX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().As("a").Out("knows").As("b").Math("a + b").By("age").AsNumber(N.Int)}},
+ {"g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXlongX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.WithSideEffect("x", p["xx1"]).V().Values<object>("age").Math("_ + x").AsNumber(N.Long)}},
{"g_injectX1_2X_asString", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(p["xx1"], p["xx2"]).AsString()}},
{"g_injectX1_2X_asStringXlocalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(p["xx1"], p["xx2"]).AsString<object>(Scope.Local)}},
{"g_injectXlist_1_2X_asStringXlocalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(p["xx1"]).AsString<object>(Scope.Local)}},
diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go
index 9beb85fe5f..21ca5e9065 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -599,23 +599,23 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[
"g_injectX5nX_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5).AsNumber()}},
"g_injectX5_0X_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5.0).AsNumber()}},
"g_injectX5_75fX_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5.75).AsNumber()}},
- "g_injectX5_43X_asNumberXN_nintX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5.43).AsNumber(gremlingo.N.Nint)}},
- "g_injectX5_67X_asNumberXN_nintX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5.67).AsNumber(gremlingo.N.Nint)}},
- "g_injectX5X_asNumberXN_nlongX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5).AsNumber(gremlingo.N.Nlong)}},
- "g_injectX12X_asNumberXN_nbyteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(12).AsNumber(gremlingo.N.Nbyte)}},
- "g_injectX32768X_asNumberXN_nshortX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(32768).AsNumber(gremlingo.N.Nshort)}},
- "g_injectX300X_asNumberXN_nbyteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(300).AsNumber(gremlingo.N.Nbyte)}},
+ "g_injectX5_43X_asNumberXN_intX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5.43).AsNumber(gremlingo.N.Int)}},
+ "g_injectX5_67X_asNumberXN_intX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5.67).AsNumber(gremlingo.N.Int)}},
+ "g_injectX5X_asNumberXN_longX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(5).AsNumber(gremlingo.N.Long)}},
+ "g_injectX12X_asNumberXN_byteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(12).AsNumber(gremlingo.N.Byte)}},
+ "g_injectX32768X_asNumberXN_shortX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(32768).AsNumber(gremlingo.N.Short)}},
+ "g_injectX300X_asNumberXN_byteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(300).AsNumber(gremlingo.N.Byte)}},
"g_injectX5X_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("5").AsNumber()}},
- "g_injectX5X_asNumberXN_byteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("5").AsNumber(gremlingo.N.Nbyte)}},
- "g_injectX1_000X_asNumberXN_nintX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("1,000").AsNumber(gremlingo.N.Nint)}},
+ "g_injectX5X_asNumberXN_byteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("5").AsNumber(gremlingo.N.Byte)}},
+ "g_injectX1_000X_asNumberXN_bigIntX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("1,000").AsNumber(gremlingo.N.BigInt)}},
"g_injectXtestX_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("test").AsNumber()}},
"g_injectX_1_2_3_4X_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4}).AsNumber()}},
"g_injectX1_2_3_4X_unfold_asNumber": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 2, 3, 4}).Unfold().AsNumber()}},
"g_injectX_1__2__3__4_X_asNumberXX_foldXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("1", 2, "3", 4).AsNumber().Fold()}},
- "g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXnbyteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(p["xx1"], p["xx2"], p["xx3"], "4", "0x5").AsNumber().Sum().AsNumber(gremlingo.N.Nbyte)}},
- "g_VX1X_asNumberXN_nintX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(nil).AsNumber(gremlingo.N.Nint)}},
- "g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXnintX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().As("a").Out("knows").As("b").Math("a + b").By("age").AsNumber(gremlingo.N.Nint)}},
- "g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXnlongX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.WithSideEffect("x", p["xx1"]).V().Values("age").Math("_ + x").AsNumber(gremlingo.N.Nlong)}},
+ "g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXbyteX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(p["xx1"], p["xx2"], p["xx3"], "4", "0x5").AsNumber().Sum().AsNumber(gremlingo.N.Byte)}},
+ "g_VX1X_asNumberXN_intX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(nil).AsNumber(gremlingo.N.Int)}},
+ "g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXintX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().As("a").Out("knows").As("b").Math("a + b").By("age").AsNumber(gremlingo.N.Int)}},
+ "g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXlongX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.WithSideEffect("x", p["xx1"]).V().Values("age").Math("_ + x").AsNumber(gremlingo.N.Long)}},
"g_injectX1_2X_asString": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(p["xx1"], p["xx2"]).AsString()}},
"g_injectX1_2X_asStringXlocalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(p["xx1"], p["xx2"]).AsString(gremlingo.Scope.Local)}},
"g_injectXlist_1_2X_asStringXlocalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(p["xx1"]).AsString(gremlingo.Scope.Local)}},
diff --git a/gremlin-go/driver/serializer.go b/gremlin-go/driver/serializer.go
index 8a2dec9d56..314d2767f9 100644
--- a/gremlin-go/driver/serializer.go
+++ b/gremlin-go/driver/serializer.go
@@ -328,7 +328,7 @@ func initDeserializers() {
tType: enumReader,
directionType: enumReader,
dtType: enumReader,
- nType: enumReader,
+ nType: enumReader,
bindingType: bindingReader,
// Metrics
diff --git a/gremlin-go/driver/traversal.go b/gremlin-go/driver/traversal.go
index bd21fb6a06..811ff971e1 100644
--- a/gremlin-go/driver/traversal.go
+++ b/gremlin-go/driver/traversal.go
@@ -364,33 +364,33 @@ type n string
type ns struct {
// number type byte
- Nbyte n
+ Byte n
// number type short
- Nshort n
+ Short n
// number type int
- Nint n
+ Int n
// number type long
- Nlong n
+ Long n
// number type float
- Nfloat n
+ Float n
// number type double
- Ndouble n
+ Double n
// number type bigInt
- NbigInt n
+ BigInt n
// number type bigDecimal
- NbigDecimal n
+ BigDecimal n
}
// N is a set of operations for denoting number types during conversion.
var N = ns{
- Nbyte: "nbyte",
- Nshort: "nshort",
- Nint: "nint",
- Nlong: "nlong",
- Nfloat: "nfloat",
- Ndouble: "ndouble",
- NbigInt: "nbigInt",
- NbigDecimal: "nbigDecimal",
+ Byte: "byte",
+ Short: "short",
+ Int: "int",
+ Long: "long",
+ Float: "float",
+ Double: "double",
+ BigInt: "bigInt",
+ BigDecimal: "bigDecimal",
}
type operator string
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js
index 84c8482f8f..2bc9705fe9 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js
@@ -487,6 +487,14 @@ function toDirectionEnum(typeName, keys) {
return result;
}
+function toNEnum(typeName, keys) {
+ const result = {};
+ keys.split(' ').forEach((k) => {
+ result[k] = new EnumValue(typeName, k.replace('_', ''));
+ });
+ return result;
+}
+
class EnumValue {
constructor(typeName, elementName) {
this.typeName = typeName;
@@ -512,7 +520,7 @@ module.exports = {
column: toEnum('Column', 'keys values'),
direction: toDirectionEnum('Direction', 'BOTH IN OUT from_ to'),
dt: toEnum('DT', 'second minute hour day'),
- n: toEnum('N', 'nbyte nshort nint nlong nfloat ndouble nbigint nbigdecimal'),
+ n: toNEnum('N', 'byte_ short_ int_ long_ float_ double_ bigInt bigDecimal'),
graphSONVersion: toEnum('GraphSONVersion', 'V1_0 V2_0 V3_0'),
gryoVersion: toEnum('GryoVersion', 'V1_0 V3_0'),
merge: toEnum('Merge', 'onCreate onMatch outV inV'),
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 9ad1b33b8e..aab5f6a21e 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
@@ -630,23 +630,23 @@ const gremlins = {
g_injectX5nX_asNumber: [function({g}) { return g.inject(5).asNumber() }],
g_injectX5_0X_asNumber: [function({g}) { return g.inject(5.0).asNumber() }],
g_injectX5_75fX_asNumber: [function({g}) { return g.inject(5.75).asNumber() }],
- g_injectX5_43X_asNumberXN_nintX: [function({g}) { return g.inject(5.43).asNumber(N.nint) }],
- g_injectX5_67X_asNumberXN_nintX: [function({g}) { return g.inject(5.67).asNumber(N.nint) }],
- g_injectX5X_asNumberXN_nlongX: [function({g}) { return g.inject(5).asNumber(N.nlong) }],
- g_injectX12X_asNumberXN_nbyteX: [function({g}) { return g.inject(12).asNumber(N.nbyte) }],
- g_injectX32768X_asNumberXN_nshortX: [function({g}) { return g.inject(32768).asNumber(N.nshort) }],
- g_injectX300X_asNumberXN_nbyteX: [function({g}) { return g.inject(300).asNumber(N.nbyte) }],
+ g_injectX5_43X_asNumberXN_intX: [function({g}) { return g.inject(5.43).asNumber(N.int_) }],
+ g_injectX5_67X_asNumberXN_intX: [function({g}) { return g.inject(5.67).asNumber(N.int_) }],
+ g_injectX5X_asNumberXN_longX: [function({g}) { return g.inject(5).asNumber(N.long_) }],
+ g_injectX12X_asNumberXN_byteX: [function({g}) { return g.inject(12).asNumber(N.byte_) }],
+ g_injectX32768X_asNumberXN_shortX: [function({g}) { return g.inject(32768).asNumber(N.short_) }],
+ g_injectX300X_asNumberXN_byteX: [function({g}) { return g.inject(300).asNumber(N.byte_) }],
g_injectX5X_asNumber: [function({g}) { return g.inject("5").asNumber() }],
- g_injectX5X_asNumberXN_byteX: [function({g}) { return g.inject("5").asNumber(N.nbyte) }],
- g_injectX1_000X_asNumberXN_nintX: [function({g}) { return g.inject("1,000").asNumber(N.nint) }],
+ g_injectX5X_asNumberXN_byteX: [function({g}) { return g.inject("5").asNumber(N.byte_) }],
+ g_injectX1_000X_asNumberXN_bigIntX: [function({g}) { return g.inject("1,000").asNumber(N.bigInt) }],
g_injectXtestX_asNumber: [function({g}) { return g.inject("test").asNumber() }],
g_injectX_1_2_3_4X_asNumber: [function({g}) { return g.inject([1, 2, 3, 4]).asNumber() }],
g_injectX1_2_3_4X_unfold_asNumber: [function({g}) { return g.inject([1, 2, 3, 4]).unfold().asNumber() }],
g_injectX_1__2__3__4_X_asNumberXX_foldXX: [function({g}) { return g.inject("1", 2, "3", 4).asNumber().fold() }],
- g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXnbyteX: [function({g, xx1, xx3, xx2}) { return g.inject(xx1, xx2, xx3, "4", "0x5").asNumber().sum().asNumber(N.nbyte) }],
- g_VX1X_asNumberXN_nintX: [function({g}) { return g.inject(null).asNumber(N.nint) }],
- g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXnintX: [function({g}) { return g.V().as("a").out("knows").as("b").math("a + b").by("age").asNumber(N.nint) }],
- g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXnlongX: [function({g, xx1}) { return g.withSideEffect("x", xx1).V().values("age").math("_ + x").asNumber(N.nlong) }],
+ g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXbyteX: [function({g, xx1, xx3, xx2}) { return g.inject(xx1, xx2, xx3, "4", "0x5").asNumber().sum().asNumber(N.byte_) }],
+ g_VX1X_asNumberXN_intX: [function({g}) { return g.inject(null).asNumber(N.int_) }],
+ g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXintX: [function({g}) { return g.V().as("a").out("knows").as("b").math("a + b").by("age").asNumber(N.int_) }],
+ g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXlongX: [function({g, xx1}) { return g.withSideEffect("x", xx1).V().values("age").math("_ + x").asNumber(N.long_) }],
g_injectX1_2X_asString: [function({g, xx1, xx2}) { return g.inject(xx1, xx2).asString() }],
g_injectX1_2X_asStringXlocalX: [function({g, xx1, xx2}) { return g.inject(xx1, xx2).asString(Scope.local) }],
g_injectXlist_1_2X_asStringXlocalX: [function({g, xx1}) { return g.inject(xx1).asString(Scope.local) }],
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
index b9399a6fff..d723c85cd9 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
@@ -176,8 +176,8 @@ describe('GraphBinary.AnySerializer', () => {
{ v: new t.EnumValue('Merge', 'onMatch'),
b: [ DataType.MERGE,0x00, DataType.STRING,0x00, 0x00,0x00,0x00,0x07, ...from('onMatch') ]
},
- { v: new t.EnumValue('N', 'nbyte'),
- b: [ DataType.N,0x00, DataType.STRING,0x00, 0x00,0x00,0x00,0x05, ...from('nbyte') ]
+ { v: new t.EnumValue('N', 'byte'),
+ b: [ DataType.N,0x00, DataType.STRING,0x00, 0x00,0x00,0x00,0x04, ...from('byte') ]
},
{ v: new t.EnumValue('Operator', 'addAll'),
b: [ DataType.OPERATOR,0x00, DataType.STRING,0x00, 0x00,0x00,0x00,0x06, ...from('addAll') ]
@@ -522,7 +522,7 @@ describe('GraphBinary.AnySerializer', () => {
// N
{ v:null, b:[0x30,0x01] },
- { v:new t.EnumValue('N','nbyte'), b:[0x30,0x00, 0x03,0x00, 0x00,0x00,0x00,0x05, ...from('nbyte')] },
+ { v:new t.EnumValue('N','byte'), b:[0x30,0x00, 0x03,0x00, 0x00,0x00,0x00,0x04, ...from('byte')] },
// OPERATOR
{ v:null, b:[0x19,0x01] },
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
index a5765995da..4dc0abd616 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
@@ -36,6 +36,7 @@ describe('GraphBinary.EnumSerializer', () => {
{ name: 'Cardinality', code: from([0x16]), enum: t.cardinality },
{ name: 'Column', code: from([0x17]), enum: t.column },
{ name: 'Direction', code: from([0x18]), enum: t.direction },
+ { name: 'N', code: from([0x30]), enum: t.n },
{ name: 'Operator', code: from([0x19]), enum: t.operator },
{ name: 'Order', code: from([0x1A]), enum: t.order },
{ name: 'Pick', code: from([0x1B]), enum: t.pick },
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4 b/gremlin-language/src/main/antlr4/Gremlin.g4
index d7037a4fff..00031355f6 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -1963,15 +1963,15 @@ K_BARRIER: 'barrier';
K_BARRIERU: 'Barrier';
K_BEGIN: 'begin';
K_BETWEEN: 'between';
-K_BIGDECIMAL: 'nbigDecimal';
-K_BIGINT: 'nbigInt';
+K_BIGDECIMAL: 'bigDecimal';
+K_BIGINT: 'bigInt';
K_BOTH: 'both';
K_BOTHU: 'BOTH';
K_BOTHE: 'bothE';
K_BOTHV: 'bothV';
K_BRANCH: 'branch';
K_BY: 'by';
-K_BYTE: 'nbyte';
+K_BYTE: 'byte';
K_CALL: 'call';
K_CAP: 'cap';
K_CARDINALITY: 'Cardinality';
@@ -2003,7 +2003,7 @@ K_DIRECTION: 'Direction';
K_DISJUNCT: 'disjunct';
K_DISTANCE: 'distance';
K_DIV: 'div';
-K_DOUBLE: 'ndouble';
+K_DOUBLE: 'double';
K_DROP: 'drop';
K_DT: 'DT';
K_E: 'E';
@@ -2019,7 +2019,7 @@ K_FALSE: 'false';
K_FILTER: 'filter';
K_FIRST: 'first';
K_FLATMAP: 'flatMap';
-K_FLOAT: 'nfloat';
+K_FLOAT: 'float';
K_FOLD: 'fold';
K_FORMAT: 'format';
K_FROM: 'from';
@@ -2052,7 +2052,7 @@ K_INDEX: 'index';
K_INFINITY: 'Infinity';
K_INJECT: 'inject';
K_INSIDE: 'inside';
-K_INT: 'nint';
+K_INT: 'int';
K_INTERSECT: 'intersect';
K_INV: 'inV';
K_IOU: 'IO';
@@ -2068,7 +2068,7 @@ K_LENGTH: 'length';
K_LIMIT: 'limit';
K_LIST: 'list';
K_LOCAL: 'local';
-K_LONG: 'nlong';
+K_LONG: 'long';
K_LOOPS: 'loops';
K_LT: 'lt';
K_LTE: 'lte';
@@ -2149,7 +2149,7 @@ K_SET: 'set';
K_SHORTESTPATHU: 'ShortestPath';
K_SHORTESTPATH: 'shortestPath';
K_SHUFFLE: 'shuffle';
-K_SHORT: 'nshort';
+K_SHORT: 'short';
K_SIDEEFFECT: 'sideEffect';
K_SIMPLEPATH: 'simplePath';
K_SINGLE: 'single';
diff --git a/gremlin-language/src/main/java/org/apache/tinkerpop/gremlin/language/corpus/DocumentationReader.java b/gremlin-language/src/main/java/org/apache/tinkerpop/gremlin/language/corpus/DocumentationReader.java
index d68af03fc7..d25f59d98e 100644
--- a/gremlin-language/src/main/java/org/apache/tinkerpop/gremlin/language/corpus/DocumentationReader.java
+++ b/gremlin-language/src/main/java/org/apache/tinkerpop/gremlin/language/corpus/DocumentationReader.java
@@ -122,6 +122,8 @@ public class DocumentationReader {
replace(".getClass()", "").
replace("result.toArray()", "4").
replace("vA.value('amount')", "0.0").
- replace("vA", "\"vA\"");
+ replace("vA", "\"vA\"").
+ replace("N.int_", "N.int").
+ replace("N.byte_", "N.byte");
}
}
diff --git a/gremlin-python/src/main/python/gremlin_python/process/traversal.py b/gremlin-python/src/main/python/gremlin_python/process/traversal.py
index 4f93bf97ad..70b4902da8 100644
--- a/gremlin-python/src/main/python/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/python/gremlin_python/process/traversal.py
@@ -208,15 +208,16 @@ statics.add_static('on_match', Merge.on_match)
statics.add_static('in_v', Merge.in_v)
statics.add_static('out_v', Merge.out_v)
-N = Enum('N', ' nbyte nshort nint nlong nfloat ndouble nbigInt nbigDecimal')
-statics.add_static('nbyte', N.nbyte)
-statics.add_static('nshort', N.nshort)
-statics.add_static('nint', N.nint)
-statics.add_static('nlong', N.nlong)
-statics.add_static('nfloat', N.nfloat)
-statics.add_static('ndouble', N.ndouble)
-statics.add_static('nbigInt', N.nbigInt)
-statics.add_static('nbigDecimal', N.nbigDecimal)
+N = Enum('N', ' byte short int long float double big_int big_decimal')
+# no keyword collision so enum is defined as lang, but has collision with type aliases defined in statics
+statics.add_static('byte_', N.byte)
+statics.add_static('short_', N.short)
+statics.add_static('int_', N.int)
+statics.add_static('long_', N.long)
+statics.add_static('float_', N.float)
+statics.add_static('double_', N.double)
+statics.add_static('big_int', N.big_int)
+statics.add_static('big_decimal', N.big_decimal)
Order = Enum('Order', ' asc desc shuffle')
@@ -326,7 +327,7 @@ class P(object):
return P("within", list(args[0]))
else:
return P("within", list(args))
-
+
@staticmethod
def without(*args):
if len(args) == 1 and type(args[0]) == list:
diff --git a/gremlin-python/src/main/python/radish/gremlin.py b/gremlin-python/src/main/python/radish/gremlin.py
index f33c343d58..38a2fdaa4f 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -602,23 +602,23 @@ world.gremlins = {
'g_injectX5nX_asNumber': [(lambda g:g.inject(bigint(5)).as_number())],
'g_injectX5_0X_asNumber': [(lambda g:g.inject(5.0).as_number())],
'g_injectX5_75fX_asNumber': [(lambda g:g.inject(5.75).as_number())],
- 'g_injectX5_43X_asNumberXN_nintX': [(lambda g:g.inject(5.43).as_number(N.nint))],
- 'g_injectX5_67X_asNumberXN_nintX': [(lambda g:g.inject(5.67).as_number(N.nint))],
- 'g_injectX5X_asNumberXN_nlongX': [(lambda g:g.inject(5).as_number(N.nlong))],
- 'g_injectX12X_asNumberXN_nbyteX': [(lambda g:g.inject(12).as_number(N.nbyte))],
- 'g_injectX32768X_asNumberXN_nshortX': [(lambda g:g.inject(32768).as_number(N.nshort))],
- 'g_injectX300X_asNumberXN_nbyteX': [(lambda g:g.inject(300).as_number(N.nbyte))],
+ 'g_injectX5_43X_asNumberXN_intX': [(lambda g:g.inject(5.43).as_number(N.int))],
+ 'g_injectX5_67X_asNumberXN_intX': [(lambda g:g.inject(5.67).as_number(N.int))],
+ 'g_injectX5X_asNumberXN_longX': [(lambda g:g.inject(5).as_number(N.long))],
+ 'g_injectX12X_asNumberXN_byteX': [(lambda g:g.inject(12).as_number(N.byte))],
+ 'g_injectX32768X_asNumberXN_shortX': [(lambda g:g.inject(32768).as_number(N.short))],
+ 'g_injectX300X_asNumberXN_byteX': [(lambda g:g.inject(300).as_number(N.byte))],
'g_injectX5X_asNumber': [(lambda g:g.inject('5').as_number())],
- 'g_injectX5X_asNumberXN_byteX': [(lambda g:g.inject('5').as_number(N.nbyte))],
- 'g_injectX1_000X_asNumberXN_nintX': [(lambda g:g.inject('1,000').as_number(N.nint))],
+ 'g_injectX5X_asNumberXN_byteX': [(lambda g:g.inject('5').as_number(N.byte))],
+ 'g_injectX1_000X_asNumberXN_bigIntX': [(lambda g:g.inject('1,000').as_number(N.big_int))],
'g_injectXtestX_asNumber': [(lambda g:g.inject('test').as_number())],
'g_injectX_1_2_3_4X_asNumber': [(lambda g:g.inject([1, 2, 3, 4]).as_number())],
'g_injectX1_2_3_4X_unfold_asNumber': [(lambda g:g.inject([1, 2, 3, 4]).unfold().as_number())],
'g_injectX_1__2__3__4_X_asNumberXX_foldXX': [(lambda g:g.inject('1', 2, '3', 4).as_number().fold())],
- 'g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXnbyteX': [(lambda g, xx1=None,xx3=None,xx2=None:g.inject(xx1, xx2, xx3, '4', '0x5').as_number().sum_().as_number(N.nbyte))],
- 'g_VX1X_asNumberXN_nintX': [(lambda g:g.inject(None).as_number(N.nint))],
- 'g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXnintX': [(lambda g:g.V().as_('a').out('knows').as_('b').math('a + b').by('age').as_number(N.nint))],
- 'g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXnlongX': [(lambda g, xx1=None:g.with_side_effect('x', xx1).V().values('age').math('_ + x').as_number(N.nlong))],
+ 'g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXbyteX': [(lambda g, xx1=None,xx3=None,xx2=None:g.inject(xx1, xx2, xx3, '4', '0x5').as_number().sum_().as_number(N.byte))],
+ 'g_VX1X_asNumberXN_intX': [(lambda g:g.inject(None).as_number(N.int))],
+ 'g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXintX': [(lambda g:g.V().as_('a').out('knows').as_('b').math('a + b').by('age').as_number(N.int))],
+ 'g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXlongX': [(lambda g, xx1=None:g.with_side_effect('x', xx1).V().values('age').math('_ + x').as_number(N.long))],
'g_injectX1_2X_asString': [(lambda g, xx1=None,xx2=None:g.inject(xx1, xx2).as_string())],
'g_injectX1_2X_asStringXlocalX': [(lambda g, xx1=None,xx2=None:g.inject(xx1, xx2).as_string(Scope.local))],
'g_injectXlist_1_2X_asStringXlocalX': [(lambda g, xx1=None:g.inject(xx1).as_string(Scope.local))],
diff --git a/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
index fe402a1091..eb6beee5c6 100644
--- a/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
@@ -25,7 +25,7 @@ from gremlin_python.statics import long
from gremlin_python.process.traversal import Traverser
from gremlin_python.process.traversal import TraversalStrategy
from gremlin_python.process.traversal import Bindings
-from gremlin_python.process.traversal import P, Order, T, N
+from gremlin_python.process.traversal import P, Order, T
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.structure.graph import Vertex
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AsNumber.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AsNumber.feature
index cb36ba87b6..1777cfb785 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AsNumber.feature
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AsNumber.feature
@@ -103,11 +103,11 @@ Feature: Step - asNumber()
| d[5.75].f |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX5_43X_asNumberXN_nintX
+ Scenario: g_injectX5_43X_asNumberXN_intX
Given the empty graph
And the traversal of
"""
- g.inject(5.43).asNumber(N.nint)
+ g.inject(5.43).asNumber(N.int)
"""
When iterated to list
Then the result should be unordered
@@ -115,11 +115,11 @@ Feature: Step - asNumber()
| d[5].i |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX5_67X_asNumberXN_nintX
+ Scenario: g_injectX5_67X_asNumberXN_intX
Given the empty graph
And the traversal of
"""
- g.inject(5.67).asNumber(N.nint)
+ g.inject(5.67).asNumber(N.int)
"""
When iterated to list
Then the result should be unordered
@@ -127,11 +127,11 @@ Feature: Step - asNumber()
| d[5].i |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX5X_asNumberXN_nlongX
+ Scenario: g_injectX5X_asNumberXN_longX
Given the empty graph
And the traversal of
"""
- g.inject(5).asNumber(N.nlong)
+ g.inject(5).asNumber(N.long)
"""
When iterated to list
Then the result should be unordered
@@ -139,11 +139,11 @@ Feature: Step - asNumber()
| d[5].l |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX12X_asNumberXN_nbyteX
+ Scenario: g_injectX12X_asNumberXN_byteX
Given the empty graph
And the traversal of
"""
- g.inject(12).asNumber(N.nbyte)
+ g.inject(12).asNumber(N.byte)
"""
When iterated to list
Then the result should be unordered
@@ -151,21 +151,21 @@ Feature: Step - asNumber()
| d[12].b |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX32768X_asNumberXN_nshortX
+ Scenario: g_injectX32768X_asNumberXN_shortX
Given the empty graph
And the traversal of
"""
- g.inject(32768).asNumber(N.nshort)
+ g.inject(32768).asNumber(N.short)
"""
When iterated to list
Then the traversal will raise an error with message containing text of "Can't convert number of type Integer to Short due to overflow."
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX300X_asNumberXN_nbyteX
+ Scenario: g_injectX300X_asNumberXN_byteX
Given the empty graph
And the traversal of
"""
- g.inject(300).asNumber(N.nbyte)
+ g.inject(300).asNumber(N.byte)
"""
When iterated to list
Then the traversal will raise an error with message containing text of "Can't convert number of type Integer to Byte due to overflow."
@@ -187,7 +187,7 @@ Feature: Step - asNumber()
Given the empty graph
And the traversal of
"""
- g.inject("5").asNumber(N.nbyte)
+ g.inject("5").asNumber(N.byte)
"""
When iterated to list
Then the result should be unordered
@@ -195,11 +195,11 @@ Feature: Step - asNumber()
| d[5].b |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX1_000X_asNumberXN_nintX
+ Scenario: g_injectX1_000X_asNumberXN_bigIntX
Given the empty graph
And the traversal of
"""
- g.inject("1,000").asNumber(N.nint)
+ g.inject("1,000").asNumber(N.bigInt)
"""
When iterated to list
Then the traversal will raise an error with message containing text of "Can't parse string '1,000' as number."
@@ -252,14 +252,14 @@ Feature: Step - asNumber()
| l[d[1].i,d[2].i,d[3].i,d[4].i] |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXnbyteX
+ Scenario: g_injectX1_2_3_4_0x5X_asNumber_sum_asNumberXbyteX
Given the empty graph
And using the parameter xx1 defined as "d[1.0].d"
And using the parameter xx2 defined as "d[2].i"
And using the parameter xx3 defined as "d[3].l"
And the traversal of
"""
- g.inject(xx1, xx2, xx3, "4", "0x5").asNumber().sum().asNumber(N.nbyte)
+ g.inject(xx1, xx2, xx3, "4", "0x5").asNumber().sum().asNumber(N.byte)
"""
When iterated to list
Then the result should be unordered
@@ -267,21 +267,21 @@ Feature: Step - asNumber()
| d[15].b |
@GraphComputerVerificationInjectionNotSupported
- Scenario: g_VX1X_asNumberXN_nintX
+ Scenario: g_VX1X_asNumberXN_intX
Given the empty graph
And the traversal of
"""
- g.inject(null).asNumber(N.nint)
+ g.inject(null).asNumber(N.int)
"""
When iterated to list
Then the traversal will raise an error with message containing text of "Can't parse type null as number."
@GraphComputerVerificationReferenceOnly
- Scenario: g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXnintX
+ Scenario: g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX_asNumberXintX
Given the modern graph
And the traversal of
"""
- g.V().as("a").out("knows").as("b").math("a + b").by("age").asNumber(N.nint)
+ g.V().as("a").out("knows").as("b").math("a + b").by("age").asNumber(N.int)
"""
When iterated to list
Then the result should be unordered
@@ -289,12 +289,12 @@ Feature: Step - asNumber()
| d[56].i |
| d[61].i |
- Scenario: g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXnlongX
+ Scenario: g_withSideEffectXx_100X_V_age_mathX__plus_xX_asNumberXlongX
Given the modern graph
And using the parameter xx1 defined as "d[100].i"
And the traversal of
"""
- g.withSideEffect("x", xx1).V().values("age").math("_ + x").asNumber(N.nlong)
+ g.withSideEffect("x", xx1).V().values("age").math("_ + x").asNumber(N.long)
"""
When iterated to list
Then the result should be unordered