Skip to content

Cypher : added 418 tests for Cypher Neo4J functions#3428

Open
ExtReMLapin wants to merge 39 commits intoArcadeData:mainfrom
ExtReMLapin:more_tests
Open

Cypher : added 418 tests for Cypher Neo4J functions#3428
ExtReMLapin wants to merge 39 commits intoArcadeData:mainfrom
ExtReMLapin:more_tests

Conversation

@ExtReMLapin
Copy link
Copy Markdown
Contributor

@ExtReMLapin ExtReMLapin commented Feb 15, 2026

What does this PR do?

Based on neo4j documentation https://neo4j.com/docs/cypher-manual/current/functions/

Motivation

1:1 feature set compatibility

Additional Notes

Claude wrote all of this , I did not review all functions individually

mvn test -pl engine -Dtest="com.arcadedb.query.opencypher.functions.*Comprehensive*"

Tests run: 594, Failures: 16, Errors: 55, Skipped: 0 after 58da446

As of right now :

  • Something I did wrong with the way i try to detect exceptions
  • Point in arcadedb is compatible with multiple representation :
    • carthesian (2d or 3d)
    • WGS84 (2d or 3d)
  • more ....

Checklist

  • I have run the build using mvn clean package command
  • My unit tests cover both failure and success scenarios

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @ExtReMLapin, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly expands the test coverage for OpenCypher functions within ArcadeDB. It introduces a total of 418 new comprehensive tests, meticulously designed to align with Neo4j's Cypher documentation, ensuring a high degree of feature set compatibility. The added tests span a broad spectrum of function types, from data aggregation and list manipulation to complex mathematical, spatial, and temporal operations, enhancing the robustness and reliability of the OpenCypher implementation.

Highlights

  • Extensive Test Coverage: Introduced 418 new comprehensive tests for a wide range of OpenCypher functions, significantly expanding the existing test suite.
  • Neo4j Compatibility: Ensured 1:1 feature set compatibility with Neo4j's Cypher documentation across all tested function categories.
  • Function Categories Covered: Added tests for aggregating, list, mathematical (logarithmic, numeric, trigonometric), predicate, scalar, spatial, string, and temporal functions.
  • AI-Assisted Development Note: Included a note from the author indicating that the tests were AI-generated and not individually reviewed, which might warrant additional human review.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherAggregatingFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher aggregating functions including avg(), collect(), count(), max(), min(), percentileCont(), percentileDisc(), stDev(), stDevP(), and sum().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherListFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher list functions, covering coll.* functions, keys(), labels(), nodes(), range(), reduce(), relationships(), reverse(), tail(), and to*List() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherMathLogarithmicFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher mathematical logarithmic functions, including e(), exp(), log(), log10(), and sqrt().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherMathNumericFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher mathematical numeric functions, covering abs(), ceil(), floor(), isNaN(), rand(), round(), and sign().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherMathTrigonometricFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher mathematical trigonometric functions, including acos(), asin(), atan(), atan2(), cos(), cosh(), cot(), coth(), degrees(), haversin(), pi(), radians(), sin(), sinh(), tan(), and tanh().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherPredicateFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher predicate functions, covering all(), allReduce(), any(), exists(), isEmpty(), none(), and single().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherScalarFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher scalar functions, including char_length(), character_length(), coalesce(), elementId(), endNode(), head(), id(), last(), length(), nullIf(), properties(), randomUUID(), size(), startNode(), timestamp(), toBoolean(), toBooleanOrNull(), toFloat(), toFloatOrNull(), toInteger(), toIntegerOrNull(), type(), and valueType().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherSpatialFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher spatial functions, covering point(), point.distance(), and point.withinBBox().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherStringFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher string functions, including btrim(), left(), lower(), ltrim(), normalize(), replace(), reverse(), right(), rtrim(), split(), substring(), toString(), toStringOrNull(), toUpper(), and trim().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherTemporalFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher temporal functions, covering duration(), date(), datetime(), localdatetime(), localtime(), time(), and format() functions, along with their sub-functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherVectorFunctionsComprehensiveTest.java
    • Added comprehensive tests for OpenCypher vector functions, including vector(), vector.similarity.cosine(), vector.similarity.euclidean(), vector_dimension_count(), vector_distance(), and vector_norm().
Activity
  • No human activity (comments, reviews) has been recorded on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This PR adds a comprehensive suite of tests for Cypher functions, which is a great addition for ensuring compatibility and correctness. However, since the code was AI-generated and not fully reviewed, I've found several areas that need attention. My main concerns are:

  1. The assertion style is often verbose and can be simplified (e.g., assertThat(result.hasNext()).isTrue() instead of assertThat(result.hasNext() != false).isTrue()).
  2. There appear to be inconsistencies in the expected behavior of functions that compare different data types (like min(), max(), coll.sort()), which may not align with Neo4j's documented behavior. This needs clarification.
  3. Many tests have weak assertions (e.g., just checking for non-null) and could be made more specific to better validate the function's output.
  4. I've identified a few tests that are either flaky or incomplete.

I've left specific comments with suggestions for improvement. Addressing these points will significantly improve the quality and reliability of this new test suite.

Comment on lines +384 to +393
void collSortBasic() {
final ResultSet result = database.command("opencypher",
"RETURN coll.sort([true, 'a', 1, 2]) AS result");
Assertions.assertThat(result.hasNext() != false).isTrue();
@SuppressWarnings("unchecked")
final List<Object> sorted = (List<Object>) result.next().getProperty("result");
assertThat(sorted).hasSize(4);
// Cypher ordering: strings < booleans < numbers
assertThat(sorted.get(0)).isEqualTo("a");
assertThat(sorted.get(1)).isEqualTo(true);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The comment // Cypher ordering: strings < booleans < numbers and the subsequent assertions appear to contradict the standard Neo4j Cypher type ordering, which is numbers < strings < booleans. This inconsistency could be confusing and may indicate an issue with either the test's assumption or the underlying implementation's sorting logic. Please clarify the expected sorting behavior to ensure it aligns with the goal of Neo4j compatibility.

Comment on lines +445 to +449
void sizeString() {
final ResultSet result = database.command("opencypher",
"MATCH (a) WHERE size(a.name) > 6 RETURN size(a.name) AS result");
Assertions.assertThat(result.hasNext() != false).isTrue();
assertThat(((Number) result.next().getProperty("result")).intValue()).isEqualTo(7);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This test is potentially flaky because it queries for names longer than 6 characters without an ORDER BY clause and then asserts a specific size (7, which corresponds to 'Charlie'). The query could return any of the matching names first, and the test would fail if it's not 'Charlie'.

To make this test deterministic, you should either make the query more specific (e.g., MATCH (a:Administrator {name: 'Charlie'})) or assert a property that holds true for all results (e.g., isGreaterThan(6)).


@BeforeEach
void setUp() {
database = new DatabaseFactory("./target/databases/testOpenCypherTemporalFunctions").create();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The database path ./target/databases/... is inconsistent with other test files in this PR, which use ./databases/.... For consistency across the test suite, it's better to use the same base directory for test databases.

Suggested change
database = new DatabaseFactory("./target/databases/testOpenCypherTemporalFunctions").create();
database = new DatabaseFactory("./databases/testOpenCypherTemporalFunctions").create();

final ResultSet result = database.command("opencypher",
"RETURN duration({days: 14, hours: 16, minutes: 12}) AS result");
Assertions.assertThat(result.hasNext() != false).isTrue();
Assertions.assertThat(result.next().getProperty("result") != null).isTrue();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This test only asserts that the result is not null, which is a very weak validation. To make the test more meaningful, it should validate the actual content or properties of the created duration object. For example, you could check if the duration corresponds to 14 days, 16 hours, and 12 minutes. This applies to many other tests in this file that only check for non-null results.

Comment on lines +906 to +914
void durationArithmetic() {
final ResultSet result = database.command("opencypher",
"WITH duration({days: 10}) AS dur1, duration({hours: 24}) AS dur2 " +
"RETURN dur1 AS d1, dur2 AS d2");
Assertions.assertThat(result.hasNext() != false).isTrue();
final var row = result.next();
Assertions.assertThat(row.getProperty("d1") != null).isTrue();
Assertions.assertThat(row.getProperty("d2") != null).isTrue();
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The test name durationArithmetic is misleading as no arithmetic operation is performed. The test only creates two duration objects and returns them. To properly test duration arithmetic, you should perform an operation like addition or subtraction and assert the result (e.g., RETURN dur1 + dur2 AS result).


@BeforeEach
void setUp() {
database = new DatabaseFactory("./target/databases/testOpenCypherVectorFunctions").create();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The database path ./target/databases/... is inconsistent with other test files in this PR, which typically use ./databases/.... For consistency across the test suite, please use the same base directory for test databases.

Suggested change
database = new DatabaseFactory("./target/databases/testOpenCypherVectorFunctions").create();
database = new DatabaseFactory("./databases/testOpenCypherVectorFunctions").create();

final ResultSet result = database.command("opencypher",
"RETURN vector([1, 2, 3], 3, INTEGER) AS result");
Assertions.assertThat(result.hasNext() != false).isTrue();
Assertions.assertThat(result.next().getProperty("result") != null).isTrue();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This test only asserts that the created vector is not null. This is a weak assertion. It would be much more valuable to assert the properties of the vector, such as its dimensions and values, to ensure it was created correctly. This applies to several other tests in this file that only check for non-null results.

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Feb 15, 2026

🧪 CI Insights

Here's what we observed from your CI run for c454c1c.

🟢 All jobs passed!

But CI Insights is watching 👀

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

ExtReMLapin commented Feb 15, 2026

[ERROR] Failures: 
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.collectWithNulls:122 
Expecting actual:
  [1L, 2L, 3L, 4L]
to contain exactly (and in same order):
  [1, 2, 3, 4]
but some elements were not found:
  [1, 2, 3, 4]
and others were not expected:
  [1L, 2L, 3L, 4L]

[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertIndexTooLargeRaisesError:247 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertNegativeIndexRaisesError:241 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveIndexTooLargeRaisesError:366 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveNegativeIndexRaisesError:360 
Expecting code to raise a throwable.
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.cothZeroReturnsNaN:297 
expected: NaN
 but was: Infinity
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.isEmptyString:241 
expected: "Jessica Chastain"
 but was: "Keanu Reeves"
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.isEmptyStringFalse:249 
expected: 5
 but was: 0
[ERROR]   OpenCypherScalarFunctionsComprehensiveTest.propertiesMap:402 
Expecting map:
  {"a"=1L, "b"="test"}
to contain entries:
  ["a"=1]
but the following map entries had different values:
  ["a"=1L (expected: 1)]
[ERROR]   OpenCypherScalarFunctionsComprehensiveTest.toBooleanOrNullInvalid:576 
Expecting value to be true but was false
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.leftNegativeLengthRaisesError:147 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.leftNullLengthRaisesError:141 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rightNegativeLengthRaisesError:372 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rightNullLengthRaisesError:366 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.stringFunctionsChaining:674 
expected: "hello world"
 but was: "  hello world  "
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNegativeLengthRaisesError:502 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNegativeStartRaisesError:496 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNullStartRaisesError:490 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.trimWithBothSpecification:623 
expected: "hello"
 but was: null
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.trimWithLeadingSpecification:630 
expected: "helloxxx"
 but was: null
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.trimWithTrailingSpecification:637 
expected: "xxxhello"
 but was: null
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNullDimension:106 
Expecting value to be true but was false
[ERROR] Errors: 
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.stDevNull:346 NullPointer Cannot invoke "java.lang.Number.doubleValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.stDevPNull:366 NullPointer Cannot invoke "java.lang.Number.doubleValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collDistinctBasic:81 » CommandExecution Unknown function: coll.distinct
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collDistinctEmptyList:105 » CommandExecution Unknown function: coll.distinct
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collDistinctMixedTypes:91 » CommandExecution Unknown function: coll.distinct
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collDistinctNull:114 » CommandExecution Unknown function: coll.distinct
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenDefaultDepth:124 » CommandExecution Unknown function: coll.flatten
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenDepthZero:148 » CommandExecution Unknown function: coll.flatten
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenNull:159 » CommandExecution Unknown function: coll.flatten
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenWithDepth:138 » CommandExecution Unknown function: coll.flatten
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collIndexOfBasic:173 » CommandExecution Unknown function: coll.indexof
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collIndexOfFirstMatch:189 » CommandExecution Unknown function: coll.indexof
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collIndexOfNotFound:181 » CommandExecution Unknown function: coll.indexof
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collIndexOfNull:196 » CommandExecution Unknown function: coll.indexof
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertAtEnd:233 » CommandExecution Unknown function: coll.insert
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertAtStart:223 » CommandExecution Unknown function: coll.insert
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertBasic:210 » CommandExecution Unknown function: coll.insert
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertNull:254 » CommandExecution Unknown function: coll.insert
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMaxBasic:268 » CommandExecution Unknown function: coll.max
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMaxEmptyList:283 » CommandExecution Unknown function: coll.max
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMaxNull:290 » CommandExecution Unknown function: coll.max
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMaxNumbers:276 » CommandExecution Unknown function: coll.max
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMinBasic:300 » CommandExecution Unknown function: coll.min
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMinEmptyList:315 » CommandExecution Unknown function: coll.min
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMinNull:322 » CommandExecution Unknown function: coll.min
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMinNumbers:308 » CommandExecution Unknown function: coll.min
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveBasic:332 » CommandExecution Unknown function: coll.remove
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveFirst:342 » CommandExecution Unknown function: coll.remove
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveLast:352 » CommandExecution Unknown function: coll.remove
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveNull:373 » CommandExecution Unknown function: coll.remove
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collSortBasic:387 » CommandExecution Unknown function: coll.sort
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collSortNull:419 » CommandExecution Unknown function: coll.sort
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collSortNumbers:400 » CommandExecution Unknown function: coll.sort
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collSortStrings:410 » CommandExecution Unknown function: coll.sort
[ERROR]   OpenCypherListFunctionsComprehensiveTest.listFunctionsCombined:775 » CommandExecution Unknown function: coll.sort
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toBooleanListBasic:664 » CommandParsing Error parsing OpenCypher query: RETURN toBooleanList(['a string', true, 'false', null, ['A','B']]) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toBooleanListNull:679 » CommandParsing Error parsing OpenCypher query: RETURN toBooleanList(null) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toBooleanListNullsInList:687 » CommandParsing Error parsing OpenCypher query: RETURN toBooleanList([null, null]) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toFloatListBasic:699 » CommandParsing Error parsing OpenCypher query: RETURN toFloatList(['a string', 2.5, '3.14159', null, ['A','B']]) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toFloatListNull:714 » CommandParsing Error parsing OpenCypher query: RETURN toFloatList(null) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toIntegerListBasic:724 » CommandParsing Error parsing OpenCypher query: RETURN toIntegerList(['a string', 2, '5', null, ['A','B']]) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toIntegerListNull:739 » CommandParsing Error parsing OpenCypher query: RETURN toIntegerList(null) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toStringListBasic:749 » CommandParsing Error parsing OpenCypher query: RETURN toStringList(['already a string', 2, null, ['A','B']]) AS result
[ERROR]   OpenCypherListFunctionsComprehensiveTest.toStringListNull:763 » CommandParsing Error parsing OpenCypher query: RETURN toStringList(null) AS result
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.expZero:76 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.log10ConversionFromLog:299 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.log10Hundred:180 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.log10One:166 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.log10Ten:173 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.log10Thousand:187 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.logE:128 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.logExpIdentity:271 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.logOne:121 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.sqrtExp:311 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.sqrtFour:232 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.sqrtNine:239 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.sqrtOne:225 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.sqrtSquareIdentity:289 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathLogarithmicFunctionsComprehensiveTest.sqrtZero:218 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathNumericFunctionsComprehensiveTest.roundWithHalfEvenMode:281 » CommandExecution round() requires one or two arguments
[ERROR]   OpenCypherMathNumericFunctionsComprehensiveTest.roundWithPrecisionAndMode:261 » CommandExecution round() requires one or two arguments
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.acosBasic:59 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.asinZero:107 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.atanZero:148 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.cosBasic:210 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.cosPi:217 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.coshZero:240 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.degreesFrom2Pi:327 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.degreesFromPi:313 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.degreesFromZero:320 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.degreesRadiansRoundtrip:532 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.haversinPi:350 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.haversinZero:343 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.radiansFromZero:390 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.sinPiOver2:420 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.sinZero:413 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.sinhZero:443 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.tanZero:469 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.tanhZero:492 ClassCast class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.allReduceBasic:129 ClassCast class java.util.ArrayList cannot be cast to class java.lang.Boolean (java.util.ArrayList and java.lang.Boolean are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.allReduceEmptyList:145 ClassCast class java.util.ArrayList cannot be cast to class java.lang.Boolean (java.util.ArrayList and java.lang.Boolean are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.allReduceFalse:137 ClassCast class java.util.ArrayList cannot be cast to class java.lang.Boolean (java.util.ArrayList and java.lang.Boolean are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.allReduceWithMap:154 ClassCast class java.util.LinkedHashMap cannot be cast to class java.lang.Boolean (java.util.LinkedHashMap and java.lang.Boolean are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.allWithPath:106 » CommandParsing Error parsing OpenCypher query: MATCH p = (a:Person {name: 'Keanu Reeves'})-[]-{2}() WHERE all(x IN nodes(p) WHERE x.age < 60) RETURN count(p) AS pathCount
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.anyWithPath:187 » CommandParsing Error parsing OpenCypher query: MATCH p = (n:Person {name: 'Keanu Reeves'})-[:KNOWS]-{3}() WHERE any(rel IN relationships(p) WHERE rel.since < 2000) RETURN count(p) AS pathCount
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.existsNull:230 » CommandExecution Unknown function: exists
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.existsWithPattern:207 » CommandParsing Error parsing OpenCypher query: MATCH (p:Person) RETURN p.name AS name, exists((p)-[:ACTED_IN]->()) AS hasActedIn ORDER BY name
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.noneWithPath:310 » CommandParsing Error parsing OpenCypher query: MATCH p = (n:Person {name: 'Keanu Reeves'})-[]-{2}() WHERE none(x IN nodes(p) WHERE x.age > 60) RETURN count(p) AS pathCount
[ERROR]   OpenCypherScalarFunctionsComprehensiveTest.elementIdNode:166 » CommandExecution Unknown function: elementid
[ERROR]   OpenCypherScalarFunctionsComprehensiveTest.elementIdNull:185 » CommandExecution Unknown function: elementid
[ERROR]   OpenCypherScalarFunctionsComprehensiveTest.elementIdRelationship:176 » CommandExecution Unknown function: elementid
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_Basic:126 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_WithCRS:137 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_WithSRID:146 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_Basic:157 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_WithCRS:169 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_WithSRID:178 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceBetweenNodes:359 » CommandExecution Error executing Cypher command: CREATE (a:Location {name: 'A', pos: point({x: 0.0, y: 0.0})}), (b:Location {name: 'B', pos: point({x: 3.0, y: 4.0})})
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceCartesian2D:208 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceCartesian3D:218 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceNullHandling:250 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceSamePoint:241 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceWGS84:230 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointFunctionsCombined:337 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointNullHandling:189 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointStoredInNode:346 » CommandExecution Error executing Cypher command: CREATE (loc:Location {name: 'Copenhagen', position: point({longitude: 12.564590, latitude: 55.672874})})
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithLongitudeLatitude:62 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithSRID:83 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithXY:74 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithLongitudeLatitudeHeight:94 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithSRID:115 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithXYZ:106 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithNullCoordinate:197 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxInside:268 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxNullHandling:314 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxOnEdge:292 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxOutside:280 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxWGS84:305 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimBasicWhitespace:59 » CommandParsing Error parsing OpenCypher query: RETURN btrim('   hello    ') AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimEdgeCases:92 » CommandParsing Error parsing OpenCypher query: RETURN btrim('') AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimNullHandling:73 » CommandParsing Error parsing OpenCypher query: RETURN btrim(null) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimWithCustomCharacter:66 » CommandParsing Error parsing OpenCypher query: RETURN btrim('xxyyhelloxyxy', 'xy') AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.lowerBasic:155 » CommandParsing Error parsing OpenCypher query: RETURN lower('HELLO') AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.lowerMixedCase:176 » CommandParsing Error parsing OpenCypher query: RETURN lower('HeLLo WoRLd') AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.lowerNullHandling:169 » CommandParsing Error parsing OpenCypher query: RETURN lower(null) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.ltrimNullHandling:204 » CommandExecution lTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.ltrimWithCustomCharacter:193 » CommandExecution lTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeBasicNFC:222 » CommandExecution Unknown function: normalize
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeNullHandling:251 » CommandExecution Unknown function: normalize
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFD:236 » CommandParsing Error parsing OpenCypher query: RETURN normalize('é', NFD) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFKC:229 » CommandParsing Error parsing OpenCypher query: RETURN normalize('\uFE64', NFKC) = '\u003C' AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFKD:243 » CommandParsing Error parsing OpenCypher query: RETURN normalize('test', NFKD) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.replaceNullHandling:285 » NullPointer Cannot invoke "Object.toString()" because "args[1]" is null
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.replaceWithLimit:267 » CommandExecution replace() requires exactly 3 arguments: replace(original, search, replace)
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rtrimNullHandling:399 » CommandExecution rTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rtrimWithCustomCharacter:388 » CommandExecution rTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.splitNullHandling:447 » NullPointer Cannot invoke "Object.toString()" because "args[1]" is null
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.trimNullHandling:654 » CommandParsing Error parsing OpenCypher query: RETURN trim(BOTH null FROM null) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.upperBasic:591 » CommandParsing Error parsing OpenCypher query: RETURN upper('hello') AS result
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.dateRealtimeWithTimezone:285 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.datetimeRealtimeWithTimezone:432 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.localdatetimeRealtimeWithTimezone:543 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.localtimeRealtimeWithTimezone:654 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.timeRealtimeWithTimezone:765 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDimensionAndSizeConsistency:350 » CommandParsing Error parsing OpenCypher query: WITH vector([1, 2, 3, 4, 5], 5, INTEGER) AS v RETURN vector_dimension_count(v) AS dimCount, size(v) AS sizeResult
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDimensionCountBasic:203 » CommandParsing Error parsing OpenCypher query: RETURN vector_dimension_count(vector([1, 2, 3], 3, INTEGER8)) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDimensionCountLargeDimension:211 » CommandParsing Error parsing OpenCypher query: RETURN vector_dimension_count(vector([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10, FLOAT32)) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDimensionCountSingleDimension:219 » CommandParsing Error parsing OpenCypher query: RETURN vector_dimension_count(vector([42], 1, INTEGER)) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceDot:268 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceEuclidean:232 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceEuclideanSquared:238 » CommandParsing Error parsing OpenCypher query: RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([4, 5, 6], 3, INTEGER8), EUCLIDEAN_SQUARED) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceHamming:274 » CommandParsing Error parsing OpenCypher query: RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([1, 2, 4], 3, INTEGER8), HAMMING) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceIdenticalVectors:286 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceManhattan:250 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorFromString:65 » CommandExecution Vector argument must be a list of numbers
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorMultipleDistanceMetrics:415 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNormAndDistanceRelationship:368 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNormEuclidean:297 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNormManhattan:306 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNormUnitVector:324 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNormZeroVector:315 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorSimilarityAndDistanceComparison:342 ClassCast class java.lang.Float cannot be cast to class java.lang.Double (java.lang.Float and java.lang.Double are in module java.base of loader 'bootstrap')
[INFO]
[ERROR] Tests run: 594, Failures: 22, Errors: 162, Skipped: 0

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

Not sure what should be done @lvca

  • Merge the tests that are legitimate before the bugfixes
  • fix the bugs in this branch (I'll need some help)

@ExtReMLapin ExtReMLapin marked this pull request as ready for review February 15, 2026 08:49
@codecov
Copy link
Copy Markdown

codecov bot commented Feb 15, 2026

Codecov Report

❌ Patch coverage is 78.92857% with 59 lines in your changes missing coverage. Please review.
✅ Project coverage is 65.52%. Comparing base (c693a5b) to head (ef55e43).
⚠️ Report is 4 commits behind head on main.

Files with missing lines Patch % Lines
...com/arcadedb/function/geo/CypherPointFunction.java 74.60% 6 Missing and 10 partials ⚠️
...dedb/function/geo/CypherPointDistanceFunction.java 72.22% 4 Missing and 6 partials ⚠️
...java/com/arcadedb/function/math/RoundFunction.java 64.28% 2 Missing and 3 partials ⚠️
...n/java/com/arcadedb/function/sql/geo/GeoUtils.java 44.44% 4 Missing and 1 partial ⚠️
.../java/com/arcadedb/function/text/TrimFunction.java 68.75% 2 Missing and 3 partials ⚠️
...edb/function/temporal/DateConstructorFunction.java 71.42% 2 Missing ⚠️
...function/temporal/DateTimeConstructorFunction.java 71.42% 2 Missing ⚠️
...ion/temporal/LocalDateTimeConstructorFunction.java 71.42% 2 Missing ⚠️
...unction/temporal/LocalTimeConstructorFunction.java 71.42% 2 Missing ⚠️
...edb/function/temporal/TimeConstructorFunction.java 71.42% 2 Missing ⚠️
... and 4 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3428      +/-   ##
==========================================
+ Coverage   65.49%   65.52%   +0.03%     
==========================================
  Files        1561     1564       +3     
  Lines      112122   112597     +475     
  Branches    23630    23761     +131     
==========================================
+ Hits        73437    73784     +347     
- Misses      28742    28867     +125     
- Partials     9943     9946       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

With latest changes, from

Tests run: 594, Failures: 22, Errors: 162, Skipped: 0

to

Tests run: 594, Failures: 34, Errors: 103, Skipped: 0

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

Down to

Tests run: 594, Failures: 23, Errors: 59, Skipped: 0

[ERROR] Failures: 
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenDefaultDepth:131 
Expecting actual:
  "c"
to be an instance of:
  java.util.List
but was instance of:
  java.lang.String
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenDepthZero:153 
Expecting actual:
  "b"
to be an instance of:
  java.util.List
but was instance of:
  java.lang.String
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collFlattenNull:164 
Expecting value to be true but was false
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collIndexOfNull:201 
Expecting value to be true but was false
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertIndexTooLargeRaisesError:247 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertNegativeIndexRaisesError:241 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveIndexTooLargeRaisesError:366 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveNegativeIndexRaisesError:360 
Expecting code to raise a throwable.
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.cothZeroReturnsNaN:316 
expected: NaN
 but was: Infinity
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.existsNull:231 
Expecting value to be true but was false
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.isEmptyString:241 
expected: "Jessica Chastain"
 but was: "Keanu Reeves"
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.isEmptyStringFalse:249 
expected: 5
 but was: 0
[ERROR]   OpenCypherScalarFunctionsComprehensiveTest.toBooleanOrNullInvalid:576 
Expecting value to be true but was false
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.leftNegativeLengthRaisesError:147 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.leftNullLengthRaisesError:141 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rightNegativeLengthRaisesError:372 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rightNullLengthRaisesError:366 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.stringFunctionsChaining:674 
expected: "hello world"
 but was: "  hello world  "
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNegativeLengthRaisesError:502 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNegativeStartRaisesError:496 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNullStartRaisesError:490 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.trimNullHandling:652 
Expecting value to be true but was false
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNullDimension:106 
Expecting value to be true but was false
[ERROR] Errors: 
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.stDevNull:346 NullPointer Cannot invoke "java.lang.Number.doubleValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.stDevPNull:366 NullPointer Cannot invoke "java.lang.Number.doubleValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertNull:258 » NullPointer Cannot invoke "java.lang.Number.intValue()" because "args[1]" is null
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMinBasic:301 ClassCast class java.lang.String cannot be cast to class java.lang.Boolean (java.lang.String and java.lang.Boolean are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveNull:377 » NullPointer Cannot invoke "java.lang.Number.intValue()" because "args[1]" is null
[ERROR]   OpenCypherMathNumericFunctionsComprehensiveTest.roundWithHalfEvenMode:281 » CommandExecution round() requires one or two arguments
[ERROR]   OpenCypherMathNumericFunctionsComprehensiveTest.roundWithPrecisionAndMode:261 » CommandExecution round() requires one or two arguments
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.allWithPath:106 » CommandParsing Error parsing OpenCypher query: MATCH p = (a:Person {name: 'Keanu Reeves'})-[]-{2}() WHERE all(x IN nodes(p) WHERE x.age < 60) RETURN count(p) AS pathCount
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.anyWithPath:187 » CommandParsing Error parsing OpenCypher query: MATCH p = (n:Person {name: 'Keanu Reeves'})-[:KNOWS]-{3}() WHERE any(rel IN relationships(p) WHERE rel.since < 2000) RETURN count(p) AS pathCount
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.existsWithPattern:207 » CommandParsing Error parsing OpenCypher query: MATCH (p:Person) RETURN p.name AS name, exists((p)-[:ACTED_IN]->()) AS hasActedIn ORDER BY name
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.noneWithPath:310 » CommandParsing Error parsing OpenCypher query: MATCH p = (n:Person {name: 'Keanu Reeves'})-[]-{2}() WHERE none(x IN nodes(p) WHERE x.age > 60) RETURN count(p) AS pathCount
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_Basic:126 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_WithCRS:137 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_WithSRID:146 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_Basic:157 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_WithCRS:169 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_WithSRID:178 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceBetweenNodes:359 » CommandExecution Error executing Cypher command: CREATE (a:Location {name: 'A', pos: point({x: 0.0, y: 0.0})}), (b:Location {name: 'B', pos: point({x: 3.0, y: 4.0})})
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceCartesian2D:208 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceCartesian3D:218 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceNullHandling:250 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceSamePoint:241 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceWGS84:230 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointFunctionsCombined:337 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointNullHandling:189 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointStoredInNode:346 » CommandExecution Error executing Cypher command: CREATE (loc:Location {name: 'Copenhagen', position: point({longitude: 12.564590, latitude: 55.672874})})
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithLongitudeLatitude:62 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithSRID:83 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithXY:74 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithLongitudeLatitudeHeight:94 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithSRID:115 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithXYZ:106 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithNullCoordinate:197 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxInside:268 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxNullHandling:314 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxOnEdge:292 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxOutside:280 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxWGS84:305 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimNullHandling:78 » CommandExecution trim() requires 1 or 3 arguments
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimWithCustomCharacter:67 » CommandExecution trim() requires 1 or 3 arguments
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.ltrimNullHandling:204 » CommandExecution lTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.ltrimWithCustomCharacter:193 » CommandExecution lTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFD:236 » CommandParsing Error parsing OpenCypher query: RETURN normalize('é', NFD) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFKC:229 » CommandParsing Error parsing OpenCypher query: RETURN normalize('\uFE64', NFKC) = '\u003C' AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFKD:243 » CommandParsing Error parsing OpenCypher query: RETURN normalize('test', NFKD) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.replaceNullHandling:285 » NullPointer Cannot invoke "Object.toString()" because "args[1]" is null
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.replaceWithLimit:267 » CommandExecution replace() requires exactly 3 arguments: replace(original, search, replace)
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rtrimNullHandling:399 » CommandExecution rTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rtrimWithCustomCharacter:388 » CommandExecution rTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.splitNullHandling:447 » NullPointer Cannot invoke "Object.toString()" because "args[1]" is null
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.dateRealtimeWithTimezone:285 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.datetimeRealtimeWithTimezone:432 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.localdatetimeRealtimeWithTimezone:543 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.localtimeRealtimeWithTimezone:654 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.timeRealtimeWithTimezone:765 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDimensionAndSizeConsistency:356 NullPointer Cannot invoke "java.lang.Number.intValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null 
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceEuclideanSquared:238 » CommandParsing Error parsing OpenCypher query: RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([4, 5, 6], 3, INTEGER8), EUCLIDEAN_SQUARED) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceHamming:274 » CommandParsing Error parsing OpenCypher query: RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([1, 2, 4], 3, INTEGER8), HAMMING) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorFromString:65 » CommandExecution Vector argument must be a list of numbers
[INFO]
[ERROR] Tests run: 594, Failures: 23, Errors: 59, Skipped: 0
[INFO]

@ExtReMLapin ExtReMLapin marked this pull request as draft February 16, 2026 06:55
ExtReMLapin and others added 2 commits February 16, 2026 07:55
…penCypherAggregatingFunctionsComprehensiveTest.java

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…penCypherAggregatingFunctionsComprehensiveTest.java

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@lvca
Copy link
Copy Markdown
Member

lvca commented Feb 16, 2026

@ExtReMLapin I'd like to release 26.2.1 asap. What's the status of this PR? Could you also please rebase on the latest main (a big refactoring with packages pushed yesterday). Or we can merge this after 26.2.1 is out. WDYT?

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

ExtReMLapin commented Feb 16, 2026

@lvca honestly a release with current state should be good enough, much more than the first OpenCypher release

As stated in the first post, as of right now the main issues are :

  1. for :
  • OpenCypherListFunctionsComprehensiveTest.collInsertIndexTooLargeRaisesError
  • OpenCypherListFunctionsComprehensiveTest.collInsertNegativeIndexRaisesError
  • OpenCypherListFunctionsComprehensiveTest.collRemoveIndexTooLargeRaisesError
  • OpenCypherListFunctionsComprehensiveTest.collRemoveNegativeIndexRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.leftNegativeLengthRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.leftNullLengthRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.rightNegativeLengthRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.rightNullLengthRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.substringNegativeLengthRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.substringNegativeStartRaisesError
  • OpenCypherStringFunctionsComprehensiveTest.substringNullStartRaisesError
    I fail to correctly catch the expected error, I'm probably doing something wrong
  1. point() is only taking WGS 84 but should handle 2D , 3D (WSG) and Carthesian (2D and 3D)
  2. Others issues are honestly minor compared to what was found since 3 weeks

latest run :

[ERROR] Failures: 
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertIndexTooLargeRaisesError:247 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertNegativeIndexRaisesError:241 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveIndexTooLargeRaisesError:366 
Expecting code to raise a throwable.
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveNegativeIndexRaisesError:360 
Expecting code to raise a throwable.
[ERROR]   OpenCypherMathTrigonometricFunctionsComprehensiveTest.cothZeroReturnsNaN:316 
expected: NaN
 but was: Infinity
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.existsNull:231 
Expecting value to be true but was false
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.leftNegativeLengthRaisesError:147 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.leftNullLengthRaisesError:141 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rightNegativeLengthRaisesError:372 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rightNullLengthRaisesError:366 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.stringFunctionsChaining:674 
expected: "hello world"
 but was: "  hello world  "
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNegativeLengthRaisesError:502 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNegativeStartRaisesError:496 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.substringNullStartRaisesError:490 
Expecting code to raise a throwable.
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.trimNullHandling:652 
Expecting value to be true but was false
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorNullDimension:106 
Expecting value to be true but was false
[ERROR] Errors: 
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.stDevNull:346 NullPointer Cannot invoke "java.lang.Number.doubleValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null
[ERROR]   OpenCypherAggregatingFunctionsComprehensiveTest.stDevPNull:366 NullPointer Cannot invoke "java.lang.Number.doubleValue()" because the return value of "com.arcadedb.query.sql.executor.Result.getProperty(String)" is null
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collInsertNull:258 » NullPointer Cannot invoke "java.lang.Number.intValue()" because "args[1]" is null
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collMinBasic:301 ClassCast class java.lang.String cannot be cast to class java.lang.Boolean (java.lang.String and java.lang.Boolean are in module java.base of loader 'bootstrap')
[ERROR]   OpenCypherListFunctionsComprehensiveTest.collRemoveNull:377 » NullPointer Cannot invoke "java.lang.Number.intValue()" because "args[1]" is null
[ERROR]   OpenCypherMathNumericFunctionsComprehensiveTest.roundWithHalfEvenMode:281 » CommandExecution round() requires one or two arguments
[ERROR]   OpenCypherMathNumericFunctionsComprehensiveTest.roundWithPrecisionAndMode:261 » CommandExecution round() requires one or two arguments
[ERROR]   OpenCypherPredicateFunctionsComprehensiveTest.existsWithPattern:207 » CommandParsing Error parsing OpenCypher query: MATCH (p:Person) RETURN p.name AS name, exists((p)-[:ACTED_IN]->()) AS hasActedIn ORDER BY name
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_Basic:126 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_WithCRS:137 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian2D_WithSRID:146 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_Basic:157 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_WithCRS:169 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointCartesian3D_WithSRID:178 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceBetweenNodes:359 » CommandExecution Error executing Cypher command: CREATE (a:Location {name: 'A', pos: point({x: 0.0, y: 0.0})}), (b:Location {name: 'B', pos: point({x: 3.0, y: 4.0})})
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceCartesian2D:208 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceCartesian3D:218 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceNullHandling:250 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceSamePoint:241 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointDistanceWGS84:230 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointFunctionsCombined:337 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointNullHandling:189 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointStoredInNode:346 » CommandExecution Error executing Cypher command: CREATE (loc:Location {name: 'Copenhagen', position: point({longitude: 12.564590, latitude: 55.672874})})
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithLongitudeLatitude:62 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithSRID:83 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_2D_WithXY:74 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithLongitudeLatitudeHeight:94 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithSRID:115 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWGS84_3D_WithXYZ:106 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithNullCoordinate:197 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxInside:268 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxNullHandling:314 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxOnEdge:292 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxOutside:280 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherSpatialFunctionsComprehensiveTest.pointWithinBBoxWGS84:305 » IllegalArgument point() requires X and Y as parameters
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimNullHandling:78 » CommandExecution trim() requires 1 or 3 arguments
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.btrimWithCustomCharacter:67 » CommandExecution trim() requires 1 or 3 arguments
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.ltrimNullHandling:204 » CommandExecution lTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.ltrimWithCustomCharacter:193 » CommandExecution lTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFD:236 » CommandParsing Error parsing OpenCypher query: RETURN normalize('é', NFD) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFKC:229 » CommandParsing Error parsing OpenCypher query: RETURN normalize('\uFE64', NFKC) = '\u003C' AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.normalizeWithNFKD:243 » CommandParsing Error parsing OpenCypher query: RETURN normalize('test', NFKD) AS result
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.replaceNullHandling:285 » NullPointer Cannot invoke "Object.toString()" because "args[1]" is null
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.replaceWithLimit:267 » CommandExecution replace() requires exactly 3 arguments: replace(original, search, replace)
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rtrimNullHandling:399 » CommandExecution rTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.rtrimWithCustomCharacter:388 » CommandExecution rTrim() requires exactly one argument
[ERROR]   OpenCypherStringFunctionsComprehensiveTest.splitNullHandling:447 » NullPointer Cannot invoke "Object.toString()" because "args[1]" is null
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.dateRealtimeWithTimezone:285 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.datetimeRealtimeWithTimezone:432 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.localdatetimeRealtimeWithTimezone:543 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.localtimeRealtimeWithTimezone:654 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherTemporalFunctionsComprehensiveTest.timeRealtimeWithTimezone:765 » DateTimeParse Text 'America/Los_Angeles' could not be parsed at index 0
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceEuclideanSquared:238 » CommandParsing Error parsing OpenCypher query: RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([4, 5, 6], 3, INTEGER8), EUCLIDEAN_SQUARED) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorDistanceHamming:274 » CommandParsing Error parsing OpenCypher query: RETURN vector_distance(vector([1, 2, 3], 3, INTEGER8), vector([1, 2, 4], 3, INTEGER8), HAMMING) AS result
[ERROR]   OpenCypherVectorFunctionsComprehensiveTest.vectorFromString:65 » IllegalArgument Vector must be an array or list, found: String
[INFO] 
[ERROR] Tests run: 594, Failures: 16, Errors: 55, Skipped: 0

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

Maybe my message wasn’t clear enough, a release without THIS PR is okay, trivial fixes compared to prior 3 weeks fixes

@lvca lvca added this to the 26.3.1 milestone Feb 16, 2026
@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

[ERROR] Tests run: 594, Failures: 1, Errors: 16, Skipped: 0

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

/gemini summary

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

/gemini review

@ExtReMLapin ExtReMLapin marked this pull request as ready for review March 20, 2026 07:51
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

This pull request introduces a comprehensive suite of tests for OpenCypher functions in ArcadeDB, aiming to improve feature parity with Neo4j and enhance the reliability of the query engine. The changes include a large number of new tests across various function categories, generated with AI assistance.

Highlights

  • Extensive Test Coverage: This PR introduces 418 new tests for OpenCypher functions, enhancing the robustness of ArcadeDB's query engine.
  • Neo4j Compatibility: The tests aim for 1:1 feature set compatibility with Neo4j's Cypher documentation, ensuring consistent behavior.
  • Function Categories: Tests cover aggregating, list, mathematical, predicate, scalar, spatial, string, and temporal functions, providing broad coverage.
  • AI-Assisted Development: Note that the tests were AI-generated and not individually reviewed, which may warrant additional scrutiny.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • engine/src/main/java/com/arcadedb/function/coll/CollInsert.java
    • Added null check for args[1] and added checks to prevent negative or out-of-range index values.
  • engine/src/main/java/com/arcadedb/function/coll/CollRemove.java
    • Added null check for args[1] and added checks to prevent negative or out-of-range index values.
  • engine/src/main/java/com/arcadedb/function/geo/CypherPointDistanceFunction.java
    • Added a new function to compute the distance between two points using Haversine formula for WGS-84 and Euclidean distance for Cartesian points.
  • engine/src/main/java/com/arcadedb/function/geo/CypherPointFunction.java
    • Modified the point function to construct points from a map of coordinate properties, supporting WGS-84 and Cartesian coordinate systems.
  • engine/src/main/java/com/arcadedb/function/math/RoundFunction.java
    • Modified the round function to accept an optional rounding mode.
  • engine/src/main/java/com/arcadedb/function/sql/geo/GeoUtils.java
    • Modified parseGeometry to handle Cypher point() maps with x/y or longitude/latitude keys.
  • engine/src/main/java/com/arcadedb/function/sql/math/SQLFunctionStandardDeviation.java
    • Modified getResult to return 0.0 instead of null when variance is null.
  • engine/src/main/java/com/arcadedb/function/temporal/DateConstructorFunction.java
    • Modified the date function to parse timezone strings.
  • engine/src/main/java/com/arcadedb/function/temporal/DateTimeConstructorFunction.java
    • Modified the datetime function to parse timezone strings.
  • engine/src/main/java/com/arcadedb/function/temporal/LocalDateTimeConstructorFunction.java
    • Modified the localdatetime function to parse timezone strings.
  • engine/src/main/java/com/arcadedb/function/temporal/LocalTimeConstructorFunction.java
    • Modified the localtime function to parse timezone strings.
  • engine/src/main/java/com/arcadedb/function/temporal/TimeConstructorFunction.java
    • Modified the time function to parse timezone strings.
  • engine/src/main/java/com/arcadedb/function/text/LTrimFunction.java
    • Modified the lTrim function to accept an optional trim character.
  • engine/src/main/java/com/arcadedb/function/text/LeftFunction.java
    • Modified the left function to throw an exception for negative lengths and added null check for args[1].
  • engine/src/main/java/com/arcadedb/function/text/RTrimFunction.java
    • Modified the rTrim function to accept an optional trim character.
  • engine/src/main/java/com/arcadedb/function/text/ReplaceFunction.java
    • Modified the replace function to add null checks for args[1] and args[2].
  • engine/src/main/java/com/arcadedb/function/text/RightFunction.java
    • Modified the right function to throw an exception for negative lengths and added null check for args[1].
  • engine/src/main/java/com/arcadedb/function/text/SplitFunction.java
    • Modified the split function to add null check for args[1].
  • engine/src/main/java/com/arcadedb/function/text/SubstringFunction.java
    • Modified the substring function to throw an exception for negative start or length values.
  • engine/src/main/java/com/arcadedb/function/text/TrimFunction.java
    • Modified the trim function to accept an optional trim character and refactored the stripLeading and stripTrailing methods.
  • engine/src/main/java/com/arcadedb/function/vector/VectorCreateFunction.java
    • Modified the vector create function to propagate null if dimension is explicitly null.
  • engine/src/main/java/com/arcadedb/function/vector/VectorDistanceFunction.java
    • Modified the vector distance function to support EUCLIDEAN_SQUARED and HAMMING metrics.
  • engine/src/main/java/com/arcadedb/index/vector/VectorUtils.java
    • Modified toFloatArray to support parsing vectors from strings.
  • engine/src/main/java/com/arcadedb/query/opencypher/executor/CypherFunctionFactory.java
    • Modified to add CypherPointDistanceFunction and update function names and aliases.
  • engine/src/main/java/com/arcadedb/query/opencypher/parser/CypherExpressionBuilder.java
    • Modified to add trim and normalize function parsing and update vector distance function parsing.
  • engine/src/main/java/com/arcadedb/query/opencypher/parser/ExpressionTypeDetector.java
    • Modified to add trimFunction and normalizeFunction to expression1.
  • engine/src/main/java/com/arcadedb/query/opencypher/parser/FunctionValidator.java
    • Modified to update function argument descriptions and add new functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherAggregatingFunctionsComprehensiveTest.java
    • Added tests for avg(), collect(), count(), max(), min(), percentileCont(), percentileDisc(), stDev(), stDevP(), and sum().
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherListFunctionsComprehensiveTest.java
    • Added tests for coll., keys(), labels(), nodes(), range(), reduce(), relationships(), reverse(), tail(), and toList() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherMathLogarithmicFunctionsComprehensiveTest.java
    • Added tests for e(), exp(), log(), log10(), and sqrt() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherMathNumericFunctionsComprehensiveTest.java
    • Added tests for abs(), ceil(), floor(), isNaN(), rand(), round(), and sign() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherMathTrigonometricFunctionsComprehensiveTest.java
    • Added tests for acos(), asin(), atan(), atan2(), cos(), cosh(), cot(), coth(), degrees(), haversin(), pi(), radians(), sin(), sinh(), tan(), and tanh() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherPredicateFunctionsComprehensiveTest.java
    • Added tests for all(), allReduce(), any(), exists(), isEmpty(), none(), and single() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherScalarFunctionsComprehensiveTest.java
    • Added tests for char_length(), character_length(), coalesce(), elementId(), endNode(), head(), id(), last(), length(), nullIf(), properties(), randomUUID(), size(), startNode(), timestamp(), toBoolean(), toBooleanOrNull(), toFloat(), toFloatOrNull(), toInteger(), toIntegerOrNull(), type(), and valueType() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherSpatialFunctionsComprehensiveTest.java
    • Added tests for point(), point.distance(), and point.withinBBox() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherStringFunctionsComprehensiveTest.java
    • Added tests for btrim(), left(), lower(), ltrim(), normalize(), replace(), reverse(), right(), rtrim(), split(), substring(), toString(), toStringOrNull(), toUpper(), and trim() functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherTemporalFunctionsComprehensiveTest.java
    • Added tests for duration(), date(), datetime(), localdatetime(), localtime(), time(), and format() functions, along with their sub-functions.
  • engine/src/test/java/com/arcadedb/query/opencypher/functions/OpenCypherVectorFunctionsComprehensiveTest.java
    • Added tests for vector(), vector.similarity.cosine(), vector.similarity.euclidean(), vector_dimension_count(), vector_distance(), and vector_norm() functions.
Activity
  • Gemini Code Assist provided a summary of changes and identified potential issues.
  • Mergify bot reported that all CI jobs passed.
  • ExtReMLapin noted test failures and errors, and later reported progress in reducing these numbers.
  • lvca inquired about the PR status and suggested rebasing or merging after a release.
  • ExtReMLapin indicated the PR was not ready and described issues with exception handling and point() function.
  • Codecov bot reported patch coverage at 77.11443% with 46 lines missing coverage.
  • robfrank asked about the target state of the PR (all green or merge with failing tests).
  • ExtReMLapin indicated that AI was being used to update tests and code towards an 'all green' state.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant number of new Cypher functions and comprehensive tests for them, greatly enhancing the feature set compatibility with Neo4j. The changes include new geospatial functions, extended string manipulation capabilities, improved temporal constructors, and vector operations. The addition of extensive test cases for aggregating, list, math, predicate, scalar, spatial, string, and temporal functions is highly commendable and significantly improves the robustness and reliability of the codebase. However, there are a few minor issues related to error messages and a potential discrepancy in the behavior of stDev() for null inputs compared to Neo4j's specification that should be addressed.

Comment on lines +45 to 46
if (args.length < 1 || args.length > 3)
throw new CommandExecutionException("round() requires one or two arguments");
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The error message round() requires one or two arguments is now incorrect, as the function has been updated to support three arguments (value, precision, mode). Please update the message to reflect the new signature.

Suggested change
if (args.length < 1 || args.length > 3)
throw new CommandExecutionException("round() requires one or two arguments");
if (args.length < 1 || args.length > 3)
throw new CommandExecutionException("round() requires one, two, or three arguments");

ExtReMLapin and others added 2 commits March 20, 2026 09:25
…tion.java

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR]   TextStatelessFunctionsTest.splitFunctionNullDelimiterThrowsNpe:326
Expecting code to raise a throwable.
[ERROR]   TextStatelessFunctionsTest.trimExtendedNullTrimChar:138
expected: "hello  "
 but was: null
[ERROR]   TextStatelessFunctionsTest.trimWrongArgCount:145
Expecting code to raise a throwable.
[ERROR] Errors:
[ERROR]   TextStatelessFunctionsTest.substringOutOfRange:282 » CommandExecution substring(): negative start index is not supported: -1
[INFO]
[ERROR] Tests run: 6792, Failures: 3, Errors: 1, Skipped: 16
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for ArcadeDB 26.4.1-SNAPSHOT:
[INFO]
[INFO] ArcadeDB ........................................... SUCCESS [  0.596 s]
[INFO] ArcadeDB Engine .................................... FAILURE [56:41 min]
[INFO] ArcadeDB Network ................................... SKIPPED
[INFO] ArcadeDB Integration ............................... SKIPPED
[INFO] ArcadeDB Server .................................... SKIPPED
[INFO] ArcadeDB Test Utils ................................ SKIPPED
[INFO] ArcadeDB gRPC Stubs ................................ SKIPPED
[INFO] ArcadeDB Metrics ................................... SKIPPED
[INFO] ArcadeDB Console ................................... SKIPPED
[INFO] ArcadeDB Gremlin ................................... SKIPPED
[INFO] ArcadeDB GraphQL ................................... SKIPPED
[INFO] ArcadeDB MongoDB Wire Protocol ..................... SKIPPED
[INFO] ArcadeDB RedisW .................................... SKIPPED
[INFO] ArcadeDB PostgresW ................................. SKIPPED
[INFO] ArcadeDB BOLT Protocol ............................. SKIPPED
[INFO] ArcadeDB gRpcW ..................................... SKIPPED
[INFO] ArcadeDB gRPC Client ............................... SKIPPED
[INFO] ArcadeDB Coverage .................................. SKIPPED
[INFO] ArcadeDB Studio .................................... SKIPPED
[INFO] ArcadeDB Package ................................... SKIPPED
[INFO] ArcadeDB End-to-End Tests .......................... SKIPPED
[INFO] ArcadeDB load tests ................................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  56:42 min
[INFO] Finished at: 2026-03-20T11:00:50Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.5.5:test (default-test) on project arcadedb-engine: There are test failures.

@robfrank
Copy link
Copy Markdown
Collaborator

these tests are green on main.
Have you rebased with main?

@ExtReMLapin
Copy link
Copy Markdown
Contributor Author

Yeah i modified the function and how they works

@robfrank robfrank modified the milestones: 26.3.2, 26.4.1 Mar 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants