Cole-Greer commented on code in PR #2616: URL: https://github.com/apache/tinkerpop/pull/2616#discussion_r1733252401
########## gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java: ########## @@ -113,6 +133,11 @@ public Object apply(final Object a, final Object b) { public Object apply(final Object a, final Object b) { return b; } + + @Override + public boolean isCommutative() { Review Comment: I believe assignment should be non-commutative. ########## gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Aggregate.feature: ########## @@ -144,145 +144,435 @@ 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") - """ + """ + 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 | + + @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 Review Comment: Are these scenarios intended to be excluded for GraphComputer? If so, perhaps a different tag should be used as these scenarios do not use `inject` step. https://tinkerpop.apache.org/docs/current/dev/developer/#gherkin-tags -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@tinkerpop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org