[ https://issues.apache.org/jira/browse/TINKERPOP-2904?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Miracy Cavendish updated TINKERPOP-2904: ---------------------------------------- Description: By the design of Gremlin, an exception should be thrown when compared with NaN. However, I found that when using ```is(predicate)``` to compare, the exception is always swallowed, and this issue occurs on all GDBs support Gremlin, such as "g.inject(Double.NaN).is(gt(3))" {code:java} public static final GremlinValueComparator COMPARABILITY = new GremlinValueComparator() { /** * Compare two Gremlin value objects per the Comparability semantics. Throws type errors for NaN comparison * and for cross-type comparison (including nulltype). * * Use this method for P.lt/lte/gt/gte. */ @Override public int compare(final Object f, final Object s) { // For Compare, NaN always produces ERROR if (eitherAreNaN(f, s)) throwTypeError(); // For Compare we do not cross type boundaries, including null if (!comparable(f, s)) throwTypeError(); // comparable(f, s) assures that type(f) == type(s) final Type type = Type.type(f); return comparator(type).compare(f, s); } ... {code} was: By the design of Gremlin, an exception should be thrown when comparison with NaN. However, I found that when using ```is(predicate)``` to compare, the exception is always swallowed, and this issue occurs on all GDBs support Gremlin. ``` g.inject(Double.NaN).is(gt(3)) ``` {code:java} public static final GremlinValueComparator COMPARABILITY = new GremlinValueComparator() { /** * Compare two Gremlin value objects per the Comparability semantics. Throws type errors for NaN comparison * and for cross-type comparison (including nulltype). * * Use this method for P.lt/lte/gt/gte. */ @Override public int compare(final Object f, final Object s) { // For Compare, NaN always produces ERROR if (eitherAreNaN(f, s)) throwTypeError(); // For Compare we do not cross type boundaries, including null if (!comparable(f, s)) throwTypeError(); // comparable(f, s) assures that type(f) == type(s) final Type type = Type.type(f); return comparator(type).compare(f, s); } ... {code} > Forget to throw GremlinTypeErrorException when using is(predicate) to compare > NaN > ---------------------------------------------------------------------------------- > > Key: TINKERPOP-2904 > URL: https://issues.apache.org/jira/browse/TINKERPOP-2904 > Project: TinkerPop > Issue Type: Bug > Affects Versions: 3.5.5 > Reporter: Miracy Cavendish > Priority: Major > > By the design of Gremlin, an exception should be thrown when compared with > NaN. > However, I found that when using ```is(predicate)``` to compare, the > exception is always swallowed, and this issue occurs on all GDBs support > Gremlin, such as "g.inject(Double.NaN).is(gt(3))" > {code:java} > public static final GremlinValueComparator COMPARABILITY = new > GremlinValueComparator() { > /** > * Compare two Gremlin value objects per the Comparability semantics. > Throws type errors for NaN comparison > * and for cross-type comparison (including nulltype). > * > * Use this method for P.lt/lte/gt/gte. > */ > @Override > public int compare(final Object f, final Object s) { > // For Compare, NaN always produces ERROR > if (eitherAreNaN(f, s)) > throwTypeError(); > // For Compare we do not cross type boundaries, including null > if (!comparable(f, s)) > throwTypeError(); > // comparable(f, s) assures that type(f) == type(s) > final Type type = Type.type(f); > return comparator(type).compare(f, s); > } > ... {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)