[
https://issues.apache.org/jira/browse/TINKERPOP-3080?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17876604#comment-17876604
]
ASF GitHub Bot commented on TINKERPOP-3080:
-------------------------------------------
rdtr commented on code in PR #2616:
URL: https://github.com/apache/tinkerpop/pull/2616#discussion_r1730781154
##########
gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Aggregate.feature:
##########
@@ -144,145 +144,490 @@ Feature: Step - aggregate()
Scenario: g_V_aggregateXlocal_a_nameX_out_capXaX
Given the modern graph
And the traversal of
- """
- g.V().aggregate(Scope.local,"a").by("name").out().cap("a")
- """
+ """
+ g.V().aggregate(Scope.local,"a").by("name").out().cap("a")
+ """
When iterated next
Then the result should be unordered
- | result |
- | marko |
- | vadas |
- | lop |
- | josh |
- | ripple |
- | peter |
+ | result |
+ | marko |
+ | vadas |
+ | lop |
+ | josh |
+ | ripple |
+ | peter |
Scenario:
g_VX1X_aggregateXlocal_aX_byXnameX_out_aggregateXlocal_aX_byXnameX_name_capXaX
Given the modern graph
And using the parameter vid1 defined as "v[marko].id"
And the traversal of
- """
-
g.V(vid1).aggregate(Scope.local,"a").by("name").out().aggregate(Scope.local,"a").by("name").values("name").cap("a")
- """
+ """
+
g.V(vid1).aggregate(Scope.local,"a").by("name").out().aggregate(Scope.local,"a").by("name").values("name").cap("a")
+ """
When iterated next
Then the result should be unordered
- | result |
- | marko |
- | vadas |
- | lop |
- | josh |
+ | result |
+ | marko |
+ | vadas |
+ | lop |
+ | josh |
Scenario: g_withSideEffectXa_setX_V_both_name_aggregateXlocal_aX_capXaX
Given the modern graph
And using the parameter xx1 defined as "s[]"
And the traversal of
- """
- g.withSideEffect("a",
xx1).V().both().values("name").aggregate(Scope.local,"a").cap("a")
- """
+ """
+ g.withSideEffect("a",
xx1).V().both().values("name").aggregate(Scope.local,"a").cap("a")
+ """
When iterated next
Then the result should be unordered
- | result |
- | marko |
- | vadas |
- | lop |
- | josh |
- | ripple |
- | peter |
+ | result |
+ | marko |
+ | vadas |
+ | lop |
+ | josh |
+ | ripple |
+ | peter |
Scenario:
g_V_aggregateXlocal_aX_byXoutEXcreatedX_countX_out_out_aggregateXlocal_aX_byXinEXcreatedX_weight_sumX
Given the modern graph
And the traversal of
- """
- g.V().aggregate(Scope.local,"a").
- by(__.outE("created").count()).
- out().out().aggregate(Scope.local,"a").
- by(__.inE("created").values("weight").sum()).
- cap("a")
- """
+ """
+ g.V().aggregate(Scope.local,"a").
+ by(__.outE("created").count()).
+ out().out().aggregate(Scope.local,"a").
+ by(__.inE("created").values("weight").sum()).
+ cap("a")
+ """
When iterated next
Then the result should be unordered
- | result |
- | d[1].l |
- | d[1].l |
- | d[0].l |
- | d[0].l |
- | d[0].l |
- | d[2].l |
- | d[1.0].d |
- | d[1.0].d |
+ | result |
+ | d[1].l |
+ | d[1].l |
+ | d[0].l |
+ | d[0].l |
+ | d[0].l |
+ | d[2].l |
+ | d[1.0].d |
+ | d[1.0].d |
Scenario: g_V_aggregateXxX_byXvaluesXageX_isXgtX29XXX_capXxX
Given the modern graph
And the traversal of
- """
- g.V().aggregate("x").by(__.values("age").is(P.gt(29))).cap("x")
- """
+ """
+ g.V().aggregate("x").by(__.values("age").is(P.gt(29))).cap("x")
+ """
When iterated next
Then the result should be unordered
- | result |
- | d[32].i |
- | d[35].i |
+ | result |
+ | d[32].i |
+ | d[35].i |
@WithProductiveByStrategy
Scenario:
g_withStrategiesXProductiveByStrategyX_V_aggregateXxX_byXvaluesXageX_isXgtX29XXX_capXxX
Given the modern graph
And the traversal of
- """
-
g.withStrategies(ProductiveByStrategy).V().aggregate("x").by(__.values("age").is(P.gt(29))).cap("x")
- """
+ """
+
g.withStrategies(ProductiveByStrategy).V().aggregate("x").by(__.values("age").is(P.gt(29))).cap("x")
+ """
When iterated next
Then the result should be unordered
- | result |
- | d[32].i |
- | d[35].i |
- | null |
- | null |
- | null |
- | null |
+ | result |
+ | d[32].i |
+ | d[35].i |
+ | null |
+ | null |
+ | null |
+ | null |
@GraphComputerVerificationStarGraphExceeded
Scenario: g_V_aggregateXxX_byXout_order_byXnameXX_capXxX
Given the modern graph
And the traversal of
- """
- g.V().aggregate("x").by(__.out().order().by("name")).cap("x")
- """
+ """
+ g.V().aggregate("x").by(__.out().order().by("name")).cap("x")
+ """
When iterated next
Then the result should be unordered
- | result |
- | v[josh] |
- | v[lop] |
- | v[lop] |
+ | result |
+ | v[josh] |
+ | v[lop] |
+ | v[lop] |
@GraphComputerVerificationReferenceOnly @WithProductiveByStrategy
Scenario:
g_withStrategiesXProductiveByStrategyX_V_aggregateXxX_byXout_order_byXnameXX_capXxX
Given the modern graph
And the traversal of
- """
-
g.withStrategies(ProductiveByStrategy).V().aggregate("x").by(__.out().order().by("name")).cap("x")
- """
+ """
+
g.withStrategies(ProductiveByStrategy).V().aggregate("x").by(__.out().order().by("name")).cap("x")
+ """
When iterated next
Then the result should be unordered
- | result |
- | v[josh] |
- | v[lop] |
- | v[lop] |
- | null |
- | null |
- | null |
+ | result |
+ | v[josh] |
+ | v[lop] |
+ | v[lop] |
+ | null |
+ | null |
+ | null |
Scenario:
g_V_aggregateXaX_hasXperson_age_gteX30XXX_capXaX_unfold_valuesXnameX
Given the modern graph
And the traversal of
+ """
+ g.V().aggregate("a").has("person","age",
P.gte(30)).cap("a").unfold().values("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | marko |
+ | josh |
+ | peter |
+ | lop |
+ | vadas |
+ | ripple |
+
+ Scenario: g_withSideEffectXa_1_sumX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 1,
Operator.sum).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[124].i |
+
+ Scenario: g_withSideEffectXa_1_sumX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 1, Operator.sum).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[124].i |
+
+
+ Scenario: g_withSideEffectXa_1_sumLongX_V_aggregateXaX_byXageX_capXaX
+ Given the empty graph
+ And the graph initializer of
+ # This graph is the same as ModernGraph, but ages are stored as Long.
+ """
+ g.addV("person").property("name", "marko").property("age",
29L).as("marko").
+ addV("person").property("name", "vadas").property("age",
27L).as("vadas").
+ addV("software").property("name", "lop").property("lang",
"java").as("lop").
+ addV("person").property("name","josh").property("age", 32L).as("josh").
+ addV("software").property("name", "ripple").property("lang",
"java").as("ripple").
+ addV("person").property("name", "peter").property("age",
35L).as('peter').
+ addE("knows").from("marko").to("vadas").property("weight", 0.5d).
+ addE("knows").from("marko").to("josh").property("weight", 1.0d).
+ addE("created").from("marko").to("lop").property("weight", 0.4d).
+ addE("created").from("josh").to("ripple").property("weight", 1.0d).
+ addE("created").from("josh").to("lop").property("weight", 0.4d).
+ addE("created").from("peter").to("lop").property("weight", 0.2d)
"""
- g.V().aggregate("a").has("person","age",
P.gte(30)).cap("a").unfold().values("name")
+ And the traversal of
+ """
+ g.withSideEffect("a", 1L,
Operator.sumLong).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[124].l |
+
+ Scenario: g_withSideEffectXa_1_sumLongX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the empty graph
+ And the graph initializer of
+ # This graph is the same as ModernGraph, but ages are stored as Long.
+ """
+ g.addV("person").property("name", "marko").property("age",
29L).as("marko").
+ addV("person").property("name", "vadas").property("age",
27L).as("vadas").
+ addV("software").property("name", "lop").property("lang",
"java").as("lop").
+ addV("person").property("name","josh").property("age", 32L).as("josh").
+ addV("software").property("name", "ripple").property("lang",
"java").as("ripple").
+ addV("person").property("name", "peter").property("age",
35L).as('peter').
+ addE("knows").from("marko").to("vadas").property("weight", 0.5d).
+ addE("knows").from("marko").to("josh").property("weight", 1.0d).
+ addE("created").from("marko").to("lop").property("weight", 0.4d).
+ addE("created").from("josh").to("ripple").property("weight", 1.0d).
+ addE("created").from("josh").to("lop").property("weight", 0.4d).
+ addE("created").from("peter").to("lop").property("weight", 0.2d)
"""
+ And the traversal of
+ """
+ g.withSideEffect("a", 1L, Operator.sumLong).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[124].l |
+
+ @GraphComputerVerificationInjectionNotSupported
+ Scenario: g_withSideEffectXa_123_minusX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 123,
Operator.minus).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[0].i |
+
+ @GraphComputerVerificationInjectionNotSupported
+ Scenario: g_withSideEffectXa_123_minusX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 123, Operator.minus).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
When iterated to list
Then the result should be unordered
| result |
- | marko |
- | josh |
- | peter |
- | lop |
- | vadas |
- | ripple |
\ No newline at end of file
+ | d[0].i |
+
+ Scenario: g_withSideEffectXa_2_multX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 2,
Operator.mult).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[1753920].i |
+
+ Scenario: g_withSideEffectXa_2_multX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 2, Operator.mult).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[1753920].i |
+
+ @GraphComputerVerificationInjectionNotSupported
+ Scenario: g_withSideEffectXa_876960_divX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 876960,
Operator.div).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[1].i |
+
+ @GraphComputerVerificationInjectionNotSupported
+ Scenario: g_withSideEffectXa_876960_divX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 876960, Operator.div).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[1].i |
+
+ Scenario: g_withSideEffectXa_1_minX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 1,
Operator.min).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[1].i |
+
+ Scenario: g_withSideEffectXa_1_minX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 1, Operator.min).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[1].i |
+
+ Scenario: g_withSideEffectXa_100_minX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 100,
Operator.min).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[27].i |
+
+ Scenario: g_withSideEffectXa_100_minX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 100, Operator.min).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[27].i |
+
+ Scenario: g_withSideEffectXa_1_maxX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 1,
Operator.max).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[35].i |
+
+ Scenario: g_withSideEffectXa_1_maxX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 1, Operator.max).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[35].i |
+
+ Scenario: g_withSideEffectXa_100_maxX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 100,
Operator.max).V().aggregate("a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[100].i |
+
+ Scenario: g_withSideEffectXa_100_maxX_V_aggregateXlocal_aX_byXageX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", 100, Operator.max).V().aggregate(Scope.local,
"a").by("age").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[100].i |
+
+ Scenario: g_withSideEffectXa_true_andX_V_constantXfalseX_aggregateXaX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", true,
Operator.and).V().constant(false).aggregate("a").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | false |
+
+ Scenario:
g_withSideEffectXa_true_andX_V_constantXfalseX_aggregateXlocal_aX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", true,
Operator.and).V().constant(false).aggregate(Scope.local, "a").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | false |
+
+ Scenario: g_withSideEffectXa_true_orX_V_constantXfalseX_aggregateXaX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", true,
Operator.or).V().constant(false).aggregate("a").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | true |
+
+ Scenario:
g_withSideEffectXa_true_orX_V_constantXfalseX_aggregateXlocal_aX_capXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.withSideEffect("a", true,
Operator.or).V().constant(false).aggregate(Scope.local, "a").cap("a")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | true |
+
+ Scenario: g_withSideEffectXa_l1_addAllX_V_aggregateXaX_byXageX_capXaX
+ Given the modern graph
+ And using the parameter l1 defined as "l[d[1].i,d[2].i,d[3].i]"
Review Comment:
Changed all `l1` to `xx1`. Please check
> AggregateStep can support all Operators predefined in TinkerPop
> ---------------------------------------------------------------
>
> Key: TINKERPOP-3080
> URL: https://issues.apache.org/jira/browse/TINKERPOP-3080
> Project: TinkerPop
> Issue Type: Improvement
> Components: language, process
> Reporter: Norio Akagi
> Priority: Major
> Fix For: 3.7.3
>
>
> Currently, {{AggreteGlobalStep}} and {{AggreteLocalStep}} only support addAll
> and assign as Operator. This is because they use BulkSet to apply to
> Operator. Only addAll and assign can work with BulkSet, so for other
> operators it results in a type casting failure.
> They can be more flexible to work with any operators depending on what is set
> by {{{}withSideEffect(){}}}.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)