added shortestPath() Gherkin tests
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/91af0a2b Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/91af0a2b Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/91af0a2b Branch: refs/heads/TINKERPOP-1990 Commit: 91af0a2bfab6226a19c2da23bc5754de2d759a6f Parents: 7389f01 Author: Daniel Kuppitz <[email protected]> Authored: Thu Aug 9 10:27:10 2018 -0700 Committer: Daniel Kuppitz <[email protected]> Committed: Thu Aug 9 10:27:10 2018 -0700 ---------------------------------------------------------------------- gremlin-test/features/map/Path.feature | 2 +- gremlin-test/features/map/ShortestPath.feature | 353 +++++++++++++++++++ .../traversal/step/map/ShortestPathTest.java | 2 +- 3 files changed, 355 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/91af0a2b/gremlin-test/features/map/Path.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/map/Path.feature b/gremlin-test/features/map/Path.feature index b0cb9dd..0bb7573 100644 --- a/gremlin-test/features/map/Path.feature +++ b/gremlin-test/features/map/Path.feature @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -Feature: Step - count() +Feature: Step - path() Scenario: g_VX1X_name_path Given the modern graph http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/91af0a2b/gremlin-test/features/map/ShortestPath.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/map/ShortestPath.feature b/gremlin-test/features/map/ShortestPath.feature new file mode 100644 index 0000000..0029f9d --- /dev/null +++ b/gremlin-test/features/map/ShortestPath.feature @@ -0,0 +1,353 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +Feature: Step - shortestPath() + + Scenario: g_V_shortestPath + Given the modern graph + And the traversal of + """ + g.V().shortestPath() + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], v[lop], v[peter]] | + | p[v[josh], v[lop]] | + | p[v[josh], v[marko], v[vadas]] | + | p[v[josh], v[marko]] | + | p[v[josh], v[ripple]] | + | p[v[josh]] | + | p[v[lop], v[josh], v[ripple]] | + | p[v[lop], v[josh]] | + | p[v[lop], v[marko], v[vadas]] | + | p[v[lop], v[marko]] | + | p[v[lop], v[peter]] | + | p[v[lop]] | + | p[v[marko], v[josh], v[ripple]] | + | p[v[marko], v[josh]] | + | p[v[marko], v[lop], v[peter]] | + | p[v[marko], v[lop]] | + | p[v[marko], v[vadas]] | + | p[v[marko]] | + | p[v[peter], v[lop], v[josh], v[ripple]] | + | p[v[peter], v[lop], v[josh]] | + | p[v[peter], v[lop], v[marko], v[vadas]] | + | p[v[peter], v[lop], v[marko]] | + | p[v[peter], v[lop]] | + | p[v[peter]] | + | p[v[ripple], v[josh], v[lop], v[peter]] | + | p[v[ripple], v[josh], v[lop]] | + | p[v[ripple], v[josh], v[marko], v[vadas]] | + | p[v[ripple], v[josh], v[marko]] | + | p[v[ripple], v[josh]] | + | p[v[ripple]] | + | p[v[vadas], v[marko], v[josh], v[ripple]] | + | p[v[vadas], v[marko], v[josh]] | + | p[v[vadas], v[marko], v[lop], v[peter]] | + | p[v[vadas], v[marko], v[lop]] | + | p[v[vadas], v[marko]] | + | p[v[vadas]] | + + Scenario: g_V_both_dedup_shortestPath + Given the modern graph + And the traversal of + """ + g.V().both().dedup().shortestPath() + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], v[lop], v[peter]] | + | p[v[josh], v[lop]] | + | p[v[josh], v[marko], v[vadas]] | + | p[v[josh], v[marko]] | + | p[v[josh], v[ripple]] | + | p[v[josh]] | + | p[v[lop], v[josh], v[ripple]] | + | p[v[lop], v[josh]] | + | p[v[lop], v[marko], v[vadas]] | + | p[v[lop], v[marko]] | + | p[v[lop], v[peter]] | + | p[v[lop]] | + | p[v[marko], v[josh], v[ripple]] | + | p[v[marko], v[josh]] | + | p[v[marko], v[lop], v[peter]] | + | p[v[marko], v[lop]] | + | p[v[marko], v[vadas]] | + | p[v[marko]] | + | p[v[peter], v[lop], v[josh], v[ripple]] | + | p[v[peter], v[lop], v[josh]] | + | p[v[peter], v[lop], v[marko], v[vadas]] | + | p[v[peter], v[lop], v[marko]] | + | p[v[peter], v[lop]] | + | p[v[peter]] | + | p[v[ripple], v[josh], v[lop], v[peter]] | + | p[v[ripple], v[josh], v[lop]] | + | p[v[ripple], v[josh], v[marko], v[vadas]] | + | p[v[ripple], v[josh], v[marko]] | + | p[v[ripple], v[josh]] | + | p[v[ripple]] | + | p[v[vadas], v[marko], v[josh], v[ripple]] | + | p[v[vadas], v[marko], v[josh]] | + | p[v[vadas], v[marko], v[lop], v[peter]] | + | p[v[vadas], v[marko], v[lop]] | + | p[v[vadas], v[marko]] | + | p[v[vadas]] | + + Scenario: g_V_shortestPath_edgesIncluded + Given the modern graph + And the traversal of + """ + g.V().shortestPath().with(includeEdges, true) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], e[josh-created->lop], v[lop], e[peter-created->lop], v[peter]] | + | p[v[josh], e[josh-created->lop], v[lop]] | + | p[v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[josh], e[marko-knows->josh], v[marko], e[marko-knows->vadas], v[vadas]] | + | p[v[josh], e[marko-knows->josh], v[marko]] | + | p[v[josh]] | + | p[v[lop], e[josh-created->lop], v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[lop], e[josh-created->lop], v[josh]] | + | p[v[lop], e[marko-created->lop], v[marko], e[marko-knows->vadas], v[vadas]] | + | p[v[lop], e[marko-created->lop], v[marko]] | + | p[v[lop], e[peter-created->lop], v[peter]] | + | p[v[lop]] | + | p[v[marko], e[marko-created->lop], v[lop], e[peter-created->lop], v[peter]] | + | p[v[marko], e[marko-created->lop], v[lop]] | + | p[v[marko], e[marko-knows->josh], v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[marko], e[marko-knows->josh], v[josh]] | + | p[v[marko], e[marko-knows->vadas], v[vadas]] | + | p[v[marko]] | + | p[v[peter], e[peter-created->lop], v[lop], e[josh-created->lop], v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[peter], e[peter-created->lop], v[lop], e[josh-created->lop], v[josh]] | + | p[v[peter], e[peter-created->lop], v[lop], e[marko-created->lop], v[marko], e[marko-knows->vadas], v[vadas]] | + | p[v[peter], e[peter-created->lop], v[lop], e[marko-created->lop], v[marko]] | + | p[v[peter], e[peter-created->lop], v[lop]] | + | p[v[peter]] | + | p[v[ripple], e[josh-created->ripple], v[josh], e[josh-created->lop], v[lop], e[peter-created->lop], v[peter]] | + | p[v[ripple], e[josh-created->ripple], v[josh], e[josh-created->lop], v[lop]] | + | p[v[ripple], e[josh-created->ripple], v[josh], e[marko-knows->josh], v[marko], e[marko-knows->vadas], v[vadas]] | + | p[v[ripple], e[josh-created->ripple], v[josh], e[marko-knows->josh], v[marko]] | + | p[v[ripple], e[josh-created->ripple], v[josh]] | + | p[v[ripple]] | + | p[v[vadas], e[marko-knows->vadas], v[marko], e[marko-created->lop], v[lop], e[peter-created->lop], v[peter]] | + | p[v[vadas], e[marko-knows->vadas], v[marko], e[marko-created->lop], v[lop]] | + | p[v[vadas], e[marko-knows->vadas], v[marko], e[marko-knows->josh], v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[vadas], e[marko-knows->vadas], v[marko], e[marko-knows->josh], v[josh]] | + | p[v[vadas], e[marko-knows->vadas], v[marko]] | + | p[v[vadas]] | + + Scenario: g_V_shortestPath_directionXINX + Given the modern graph + And the traversal of + """ + g.V().shortestPath().with(edges, Direction.IN) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], v[marko]] | + | p[v[josh]] | + | p[v[lop], v[josh]] | + | p[v[lop], v[marko]] | + | p[v[lop], v[peter]] | + | p[v[lop]] | + | p[v[marko]] | + | p[v[peter]] | + | p[v[ripple], v[josh], v[marko]] | + | p[v[ripple], v[josh]] | + | p[v[ripple]] | + | p[v[vadas], v[marko]] | + | p[v[vadas]] | + + Scenario: g_V_shortestPath_edgesXoutEX + Given the modern graph + And the traversal of + """ + g.V().shortestPath().with(edges, __.outE()) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], v[lop]] | + | p[v[josh], v[ripple]] | + | p[v[josh]] | + | p[v[lop]] | + | p[v[marko], v[josh], v[ripple]] | + | p[v[marko], v[josh]] | + | p[v[marko], v[lop]] | + | p[v[marko], v[vadas]] | + | p[v[marko]] | + | p[v[peter], v[lop]] | + | p[v[peter]] | + | p[v[ripple]] | + | p[v[vadas]] | + + Scenario: g_V_shortestPath_edgesIncluded_edgesXoutEX + Given the modern graph + And the traversal of + """ + g.V().shortestPath().with(includeEdges, true).with(edges, __.outE()) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], e[josh-created->lop], v[lop]] | + | p[v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[josh]] | + | p[v[lop]] | + | p[v[marko], e[marko-created->lop], v[lop]] | + | p[v[marko], e[marko-knows->josh], v[josh], e[josh-created->ripple], v[ripple]] | + | p[v[marko], e[marko-knows->josh], v[josh]] | + | p[v[marko], e[marko-knows->vadas], v[vadas]] | + | p[v[marko]] | + | p[v[peter], e[peter-created->lop], v[lop]] | + | p[v[peter]] | + | p[v[ripple]] | + | p[v[vadas]] | + + Scenario: g_V_hasXname_markoX_shortestPath + Given the modern graph + And the traversal of + """ + g.V().has("name", "marko").shortestPath() + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[marko], v[josh], v[ripple]] | + | p[v[marko], v[josh]] | + | p[v[marko], v[lop], v[peter]] | + | p[v[marko], v[lop]] | + | p[v[marko], v[vadas]] | + | p[v[marko]] | + + Scenario: g_V_shortestPath_targetXhasXname_markoXX + Given the modern graph + And the traversal of + """ + g.V().shortestPath().with(target, __.has("name", "marko")) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], v[marko]] | + | p[v[lop], v[marko]] | + | p[v[marko]] | + | p[v[peter], v[lop], v[marko]] | + | p[v[ripple], v[josh], v[marko]] | + | p[v[vadas], v[marko]] | + + Scenario: g_V_shortestPath_targetXvaluesXnameX_isXmarkoXX + Given the modern graph + And the traversal of + """ + g.V().shortestPath().with(target, __.values("name").is("marko")) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[josh], v[marko]] | + | p[v[lop], v[marko]] | + | p[v[marko]] | + | p[v[peter], v[lop], v[marko]] | + | p[v[ripple], v[josh], v[marko]] | + | p[v[vadas], v[marko]] | + + Scenario: g_V_hasXname_markoX_shortestPath_targetXhasLabelXsoftwareXX + Given the modern graph + And the traversal of + """ + g.V().has("name", "marko").shortestPath().with(target, __.hasLabel("software")) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[marko], v[josh], v[ripple]] | + | p[v[marko], v[lop]] | + + Scenario: g_V_hasXname_markoX_shortestPath_targetXhasXname_joshXX_distanceXweightX + Given the modern graph + And the traversal of + """ + g.V().has("name", "marko").shortestPath().with(target, __.has("name","josh")).with(distance, "weight") + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[marko], v[lop], v[josh]] | + + Scenario: g_V_hasXname_danielX_shortestPath_targetXhasXname_stephenXX_edgesXbothEXusesXX + Given the crew graph + And the traversal of + """ + g.V().has("name", "daniel").shortestPath().with(target, __.has("name","stephen")).with(edges, __.bothE("uses")) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[daniel], v[gremlin], v[stephen]] | + | p[v[daniel], v[tinkergraph], v[stephen]] | + + Scenario: g_V_hasXsong_name_MIGHT_AS_WELLX_shortestPath_targetXhasXsong_name_MAYBE_YOU_KNOW_HOW_I_FEELXX_edgesXoutEXfollowedByXX_distanceXweightX + Given the grateful dead graph + And the traversal of + """ + g.V().has("song", "name", "MIGHT AS WELL"). + shortestPath(). + with(target, __.has("song", "name", "MAYBE YOU KNOW HOW I FEEL")). + with(edges, __.outE("followedBy")). + with(distance, "weight") + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[MIGHT AS WELL], v[DRUMS], v[MAYBE YOU KNOW HOW I FEEL]] | + | p[v[MIGHT AS WELL], v[SHIP OF FOOLS], v[MAYBE YOU KNOW HOW I FEEL]] | + + Scenario: g_V_hasXname_markoX_shortestPath_maxDistanceX1X + Given the modern graph + And the traversal of + """ + g.V().has("name", "marko").shortestPath().with(maxDistance, 1) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[marko], v[josh]] | + | p[v[marko], v[lop]] | + | p[v[marko], v[vadas]] | + | p[v[marko]] | + + Scenario: g_V_hasXname_vadasX_shortestPath_distanceXweightX_maxDistanceX1_3X + Given the modern graph + And the traversal of + """ + g.V().has("name", "vadas").shortestPath().with(distance, "weight").with(maxDistance, 1.3) + """ + When iterated to list + Then the result should be unordered + | result | + | p[v[vadas], v[marko], v[lop], v[josh]] | + | p[v[vadas], v[marko], v[lop], v[peter]] | + | p[v[vadas], v[marko], v[lop]] | + | p[v[vadas], v[marko]] | + | p[v[vadas]] | http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/91af0a2b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ShortestPathTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ShortestPathTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ShortestPathTest.java index bf4a5b7..a55215b 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ShortestPathTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ShortestPathTest.java @@ -266,7 +266,7 @@ public abstract class ShortestPathTest extends AbstractGremlinProcessTest { @Override public Traversal<Vertex, Path> get_g_V_shortestPath() { - return g.V().shortestPath().dedup(); + return g.V().shortestPath(); } @Override
