TINKERPOP-1784 Added dedup() feature tests Reworked test language for asserting counts so that it works better as a standalone assertion.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a5d99774 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a5d99774 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a5d99774 Branch: refs/heads/tp32 Commit: a5d99774e2f6b8dbe312062e99380b5a80873816 Parents: a9af53f Author: Stephen Mallette <[email protected]> Authored: Tue Oct 24 11:37:18 2017 -0400 Committer: Stephen Mallette <[email protected]> Committed: Tue Nov 21 15:52:52 2017 -0500 ---------------------------------------------------------------------- .../src/main/jython/radish/feature_steps.py | 2 +- gremlin-test/features/branch/Local.feature | 12 +- gremlin-test/features/branch/Repeat.feature | 2 +- gremlin-test/features/filter/Dedup.feature | 222 +++++++++++++++++++ 4 files changed, 230 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a5d99774/gremlin-python/src/main/jython/radish/feature_steps.py ---------------------------------------------------------------------- diff --git a/gremlin-python/src/main/jython/radish/feature_steps.py b/gremlin-python/src/main/jython/radish/feature_steps.py index 2d2ae8d..14a0153 100644 --- a/gremlin-python/src/main/jython/radish/feature_steps.py +++ b/gremlin-python/src/main/jython/radish/feature_steps.py @@ -112,7 +112,7 @@ def assert_side_effects(step, count, traversal_string): assert_that(count, equal_to(t.count().next())) -@then("only have a result count of {count:d}") +@then("should have a result count of {count:d}") def assert_count(step, count): assert_that(count, equal_to(len(step.context.result))) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a5d99774/gremlin-test/features/branch/Local.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/branch/Local.feature b/gremlin-test/features/branch/Local.feature index 53ae3ab..fa12d8c 100644 --- a/gremlin-test/features/branch/Local.feature +++ b/gremlin-test/features/branch/Local.feature @@ -73,7 +73,7 @@ Feature: Step - local() Then the result should be of | vadas | | josh | - And only have a result count of 1 + And should have a result count of 1 Scenario: g_V_localXbothEXcreatedX_limitX1XX_otherV_name Given the modern graph @@ -88,7 +88,7 @@ Feature: Step - local() | ripple | | josh | | peter | - And only have a result count of 5 + And should have a result count of 5 Scenario: g_VX4X_localXbothEX1_createdX_limitX1XX Given the modern graph @@ -101,7 +101,7 @@ Feature: Step - local() Then the result should be of | e[josh-created->lop] | | e[josh-created->ripple] | - And only have a result count of 1 + And should have a result count of 1 Scenario: g_VX4X_localXbothEXknows_createdX_limitX1XX Given the modern graph @@ -115,7 +115,7 @@ Feature: Step - local() | e[marko-knows->josh] | | e[josh-created->lop] | | e[josh-created->ripple] | - And only have a result count of 1 + And should have a result count of 1 Scenario: g_VX4X_localXbothE_limitX1XX_otherV_name Given the modern graph @@ -129,7 +129,7 @@ Feature: Step - local() | marko | | ripple | | lop | - And only have a result count of 1 + And should have a result count of 1 Scenario: g_VX4X_localXbothE_limitX2XX_otherV_name Given the modern graph @@ -143,7 +143,7 @@ Feature: Step - local() | marko | | ripple | | lop | - And only have a result count of 2 + And should have a result count of 2 Scenario: g_V_localXinEXknowsX_limitX2XX_outV_name Given the modern graph http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a5d99774/gremlin-test/features/branch/Repeat.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/branch/Repeat.feature b/gremlin-test/features/branch/Repeat.feature index e6049b5..6d97fc0 100644 --- a/gremlin-test/features/branch/Repeat.feature +++ b/gremlin-test/features/branch/Repeat.feature @@ -68,7 +68,7 @@ Feature: Step - repeat() | v[lop] | | v[josh] | | v[vadas] | - And only have a result count of 8 + And should have a result count of 8 Scenario: g_VX1X_timesX2X_repeatXoutX_name Given the modern graph http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a5d99774/gremlin-test/features/filter/Dedup.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/filter/Dedup.feature b/gremlin-test/features/filter/Dedup.feature new file mode 100644 index 0000000..7433da2 --- /dev/null +++ b/gremlin-test/features/filter/Dedup.feature @@ -0,0 +1,222 @@ +# 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 - dedup() + + Scenario: g_V_out_in_valuesXnameX_fold_dedupXlocalX_unfold + Given the modern graph + And the traversal of + """ + g.V().out().in().values("name").fold().dedup(Scope.local).unfold() + """ + When iterated to list + Then the result should be unordered + | marko | + | josh | + | peter | + + Scenario: g_V_out_asXxX_in_asXyX_selectXx_yX_byXnameX_fold_dedupXlocal_x_yX_unfold + Given the modern graph + And the traversal of + """ + g.V().out().as("x").in().as("y").select("x", "y").by("name").fold().dedup(Scope.local, "x", "y").unfold() + """ + When iterated to list + Then the result should be unordered + | m[{"x":"lop","y":"marko"}] | + | m[{"x":"lop","y":"josh"}] | + | m[{"x":"lop","y":"peter"}] | + | m[{"x":"vadas","y":"marko"}] | + | m[{"x":"josh","y":"marko"}] | + | m[{"x":"ripple","y":"josh"}] | + + Scenario: g_V_both_dedup_name + Given the modern graph + And the traversal of + """ + g.V().both().dedup().values("name") + """ + When iterated to list + Then the result should be unordered + | lop | + | vadas | + | josh | + | peter | + | marko | + | ripple | + + Scenario: g_V_both_hasXlabel_softwareX_dedup_byXlangX_name + Given the modern graph + And the traversal of + """ + g.V().both().has(T.label, "software").dedup().by("lang").values("name") + """ + When iterated to list + Then the result should be unordered + | lop | + + Scenario: g_V_both_name_order_byXa_bX_dedup_value + Given the modern graph + And using the parameter l defined as "c[a,b -> a.value().compareTo(b.value())]" + And the traversal of + """ + g.V().both().properties("name").order().by(l).dedup().value() + """ + When iterated to list + Then the result should be unordered + | josh | + | lop | + | marko | + | peter | + | ripple | + | vadas | + + Scenario: g_V_both_both_name_dedup + Given the modern graph + And the traversal of + """ + g.V().both().both().values("name").dedup() + """ + When iterated to list + Then the result should be unordered + | josh | + | lop | + | marko | + | peter | + | ripple | + | vadas | + + Scenario: g_V_both_both_dedup + Given the modern graph + And the traversal of + """ + g.V().both().both().dedup() + """ + When iterated to list + Then the result should be unordered + | v[josh] | + | v[lop] | + | v[marko] | + | v[peter] | + | v[ripple] | + | v[vadas] | + + Scenario: g_V_both_both_dedup_byXlabelX + Given the modern graph + And the traversal of + """ + g.V().both().both().dedup().by(T.label) + """ + When iterated to list + Then should have a result count of 2 + + Scenario: g_V_group_byXlabelX_byXbothE_weight_dedup_foldX + Given the modern graph + And the traversal of + """ + g.V().group().by(T.label).by(__.bothE().values("weight").dedup().fold()) + """ + When iterated to list + Then the result should be unordered + | m[{"software":[1.0,0.4,0.2],"person":[0.5,1.0,0.4,0.2]}] | + + Scenario: g_V_asXaX_both_asXbX_dedupXa_bX_byXlabelX_selectXa_bX + Given the modern graph + And the traversal of + """ + g.V().as("a").both().as("b").dedup("a", "b").by(T.label).select("a", "b") + """ + When iterated to list + Then the result should be unordered + | m[{"a":"v[marko]","b":"v[lop]"}] | + | m[{"a":"v[marko]","b":"v[vadas]"}] | + | m[{"a":"v[lop]","b":"v[marko]"}] | + + Scenario: g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_dedupXa_bX_path + Given the modern graph + And the traversal of + """ + g.V().as("a").out("created").as("b").in("created").as("c").dedup("a", "b").path() + """ + When iterated to list + Then the result should be unordered + | p[v[marko],v[lop],v[marko]] | + | p[v[josh],v[ripple],v[josh]] | + | p[v[josh],v[lop],v[marko]] | + | p[v[peter],v[lop],v[marko]] | + + Scenario: g_V_outE_asXeX_inV_asXvX_selectXeX_order_byXweight_incrX_selectXvX_valuesXnameX_dedup + Given the modern graph + And the traversal of + """ + g.V().outE().as("e").inV().as("v").select("e").order().by("weight", Order.incr).select("v").values("name").dedup() + """ + When iterated to list + Then the result should be unordered + | lop | + | vadas | + | josh | + | ripple | + + Scenario: g_V_both_both_dedup_byXoutE_countX_name + Given the modern graph + And the traversal of + """ + g.V().both().both().dedup().by(__.outE().count()).values("name") + """ + When iterated to list + Then the result should be unordered + | marko | + | josh | + | peter | + | ripple | + + Scenario: g_V_groupCount_selectXvaluesX_unfold_dedup + Given the modern graph + And the traversal of + """ + g.V().groupCount().select(Column.values).unfold().dedup() + """ + When iterated to list + Then the result should be unordered + | d[1] | + + Scenario: g_V_asXaX_repeatXbothX_timesX3X_emit_name_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_foldX_selectXvaluesX_unfold_dedup + Given the modern graph + And the traversal of + """ + g.V().as("a").repeat(__.both()).times(3).emit().values("name").as("b").group().by(__.select("a")).by(__.select("b").dedup().order().fold()).select(Column.values).unfold().dedup() + """ + When iterated next + Then the result should be unordered + | josh | + | lop | + | marko | + | peter | + | ripple | + | vadas | + + Scenario: g_V_repeatXdedupX_timesX2X_count + Given the modern graph + And the traversal of + """ + g.V().repeat(__.dedup()).times(2).count() + """ + When iterated to list + Then the result should be unordered + | d[0] | +
