Project Number Date
cypher-for-gremlin 0.9.12 13 Sep 2018, 16:07

Feature Report

Steps Scenarios Features
Feature Passed Failed Skipped Pending Undefined Total Passed Failed Total Duration Status
ValueHashJoinAcceptance 8 1 0 0 0 9 1 1 2 0.564 Failed
Feature ValueHashJoinAcceptance
0.025
Given an empty graph 0.000

16:07:18.210 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}

And having executed: 0.004
CREATE (:A {id: 1}),
       (:A {id: 2}),
       (:B {id: 2}),
       (:B {id: 3})

16:07:18.211 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE (:A {id: 1}), (:A {id: 2}), (:B {id: 2}), (:B {id: 3})}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.212 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE (:A {id: 1}), (:A {id: 2}), (:B {id: 2}), (:B {id: 3}) 16:07:18.214 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.addV('A').property(single, 'id', 1).addV('A').property(single, 'id', 2).addV('B').property(single, 'id', 2).addV('B').property(single, 'id', 3).barrier().limit(0)

When executing query: 0.004
MATCH (a:A), (b:B)
WHERE a.id = b.id
RETURN a, b

16:07:18.231 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (a:A), (b:B) WHERE a.id = b.id RETURN a, b}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.231 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (a:A), (b:B) WHERE a.id = b.id RETURN a, b 16:07:18.235 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().as('a').hasLabel('A').V().as('b').hasLabel('B').where(__.select('b').values('id').as(' GENERATED1').select('a').values('id').where(eq(' GENERATED1'))).select('a', 'b').project('a', 'b').by(__.select('a').valueMap(true)).by(__.select('b').valueMap(true))

Then the result should be: 0.000
a b
(:A {id: 2}) (:B {id: 2})
And no side effects 0.015

16:07:18.236 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.236 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 16:07:18.238 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 16:07:18.238 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.239 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 16:07:18.241 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 16:07:18.244 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.244 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 16:07:18.247 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 16:07:18.247 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().as('V').properties().project('nodeId', 'key', 'value').by(__.select('V').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.248 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().outE().as('E').properties().project('relId', 'key', 'value').by(__.select('E').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0

0.538
Scenario Should only join when matching
Steps
Given an empty graph 0.000

16:07:18.252 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}

And having executed: 0.391
UNWIND range(0, 1000) AS i
CREATE (:A {id: i})
MERGE (:B {id: i % 10})

16:07:18.253 [Test worker] DEBUG o.a.t.g.driver.Client - UNWIND range(0, 1000) AS i CREATE (:A {id: i}) MERGE (:B {id: i % 10})}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.253 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: UNWIND range(0, 1000) AS i CREATE (:A {id: i}) MERGE (:B {id: i % 10}) 16:07:18.257 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').repeat(__.loops().aggregate(' GENERATED1')).times(1001).cap(' GENERATED1').unfold().skip(0).limit(1001).as('i').addV('A').property(single, 'id', __.select('i')).choose(__.V().as(' UNNAMED54').hasLabel('B').where(__.constant(10).as('__GENERATED4').select('i').choose(__.or(__.is(eq(' cypher.null')), __.select('__GENERATED4').is(eq(' cypher.null'))), __.constant(' cypher.null'), __.math('_ % __GENERATED4')).is(neq(' cypher.null')).as(' GENERATED3').select(' UNNAMED54').values('id').where(eq(' GENERATED3'))), __.V().as(' UNNAMED54').hasLabel('B').where(__.constant(10).as('__GENERATED4').select('i').choose(__.or(__.is(eq(' cypher.null')), __.select('__GENERATED4').is(eq(' cypher.null'))), __.constant(' cypher.null'), __.math('_ % __GENERATED4')).is(neq(' cypher.null')).as(' GENERATED3').select(' UNNAMED54').values('id').where(eq(' GENERATED3'))), __.identity().addV('B').as(' UNNAMED54').property(single, 'id', __.constant(10).as('__GENERATED2').select('i').choose(__.or(__.is(eq(' cypher.null')), __.select('__GENERATED2').is(eq(' cypher.null'))), __.constant(' cypher.null'), __.math('_ % __GENERATED2')))).barrier().limit(0)

When executing query: 0.145
MATCH (a:A), (b:B)
WHERE a.id = b.id
RETURN a, b

16:07:18.677 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (a:A), (b:B) WHERE a.id = b.id RETURN a, b}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:18.677 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (a:A), (b:B) WHERE a.id = b.id RETURN a, b 16:07:18.681 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().as('a').hasLabel('A').V().as('b').hasLabel('B').where(__.select('b').values('id').as(' GENERATED1').select('a').values('id').where(eq(' GENERATED1'))).select('a', 'b').project('a', 'b').by(__.select('a').valueMap(true)).by(__.select('b').valueMap(true))

Then the result should be: 0.000
org.opencypher.tools.tck.api.Scenario$ScenarioFailedException: Feature "ValueHashJoinAcceptance": Scenario "Should only join when matching" failed with message: 
Expected (in any order of rows):
| a | b |
| (:A {id: 0}) | (:B {id: 0}) |
| (:A {id: 1}) | (:B {id: 1}) |
| (:A {id: 2}) | (:B {id: 2}) |
| (:A {id: 3}) | (:B {id: 3}) |
| (:A {id: 4}) | (:B {id: 4}) |
| (:A {id: 5}) | (:B {id: 5}) |
| (:A {id: 6}) | (:B {id: 6}) |
| (:A {id: 7}) | (:B {id: 7}) |
| (:A {id: 8}) | (:B {id: 8}) |
| (:A {id: 9}) | (:B {id: 9}) |
Actual:
| a | b |
| (:A {id: 0}) | (:B {id: 0.0}) |
| (:A {id: 1}) | (:B {id: 1.0}) |
| (:A {id: 2}) | (:B {id: 2.0}) |
| (:A {id: 3}) | (:B {id: 3.0}) |
| (:A {id: 4}) | (:B {id: 4.0}) |
| (:A {id: 5}) | (:B {id: 5.0}) |
| (:A {id: 6}) | (:B {id: 6.0}) |
| (:A {id: 7}) | (:B {id: 7.0}) |
| (:A {id: 8}) | (:B {id: 8.0}) |
| (:A {id: 9}) | (:B {id: 9.0}) |
	at org.opencypher.tools.tck.api.Scenario$$anonfun$executeOnGraph$1.apply(Scenario.scala:90)
	at org.opencypher.tools.tck.api.Scenario$$anonfun$executeOnGraph$1.apply(Scenario.scala:60)
	at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:124)
	at scala.collection.immutable.List.foldLeft(List.scala:84)
	at org.opencypher.tools.tck.api.Scenario.executeOnGraph(Scenario.scala:60)
	at org.opencypher.tools.tck.api.Scenario$$anon$1.execute(Scenario.scala:54)
	at org.junit.jupiter.engine.descriptor.JupiterTestDescriptor.executeAndMaskThrowable(JupiterTestDescriptor.java:145)
	at org.junit.jupiter.engine.descriptor.DynamicTestTestDescriptor.execute(DynamicTestTestDescriptor.java:46)
	at org.junit.jupiter.engine.descriptor.DynamicTestTestDescriptor.execute(DynamicTestTestDescriptor.java:24)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$0(HierarchicalTestExecutor.java:85)
	at org.junit.jupiter.engine.descriptor.TestFactoryTestDescriptor.lambda$invokeTestMethod$1(TestFactoryTestDescriptor.java:80)
	at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
	at org.junit.jupiter.engine.descriptor.TestFactoryTestDescriptor.invokeTestMethod(TestFactoryTestDescriptor.java:68)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.Iterator.forEachRemaining(Iterator.java:116)
	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.Iterator.forEachRemaining(Iterator.java:116)
	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:92)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$100(JUnitPlatformTestClassProcessor.java:77)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:73)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
	at com.sun.proxy.$Proxy1.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:123)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
	at java.lang.Thread.run(Thread.java:748)
a b
(:A {id: 0}) (:B {id: 0})
(:A {id: 1}) (:B {id: 1})
(:A {id: 2}) (:B {id: 2})
(:A {id: 3}) (:B {id: 3})
(:A {id: 4}) (:B {id: 4})
(:A {id: 5}) (:B {id: 5})
(:A {id: 6}) (:B {id: 6})
(:A {id: 7}) (:B {id: 7})
(:A {id: 8}) (:B {id: 8})
(:A {id: 9}) (:B {id: 9})