You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/03/19 19:26:24 UTC
[06/40] incubator-tinkerpop git commit: the traversal steps provided
by TinkerPop are the foundation for all dsl. GraphTraversal is just a dsl of
traversal. Refactored the process API to reflect this concept. Fixed #592.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
new file mode 100644
index 0000000..628902f
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
@@ -0,0 +1,125 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Compare;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class IsTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Integer> get_g_V_valuesXageX_isX32X();
+
+ public abstract Traversal<Vertex, Integer> get_g_V_valuesXageX_isXlte_30X();
+
+ public abstract Traversal<Vertex, Integer> get_g_V_valuesXageX_isXgte_29X_isXlt_34X();
+
+ public abstract Traversal<Vertex, String> get_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX();
+
+ public abstract Traversal<Vertex, String> get_g_V_hasXinXcreatedX_count_isXgte_2XX_valuesXnameX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_valuesXageX_isX32X() {
+ Traversal<Vertex, Integer> traversal = get_g_V_valuesXageX_isX32X();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ assertEquals(Integer.valueOf(32), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_valuesXageX_isXlte_30X() {
+ Traversal<Vertex, Integer> traversal = get_g_V_valuesXageX_isXlte_30X();
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList(27, 29), traversal);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_valuesXageX_isXgte_29X_isXlt_34X() {
+ Traversal<Vertex, Integer> traversal = get_g_V_valuesXageX_isXgte_29X_isXlt_34X();
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList(29, 32), traversal);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX() {
+ Traversal<Vertex, String> traversal = get_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ assertEquals("ripple", traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasXinXcreatedX_count_isXgte_2XX_valuesXnameX() {
+ Traversal<Vertex, String> traversal = get_g_V_hasXinXcreatedX_count_isXgte_2XX_valuesXnameX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ assertEquals("lop", traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends IsTest {
+ @Override
+ public Traversal<Vertex, Integer> get_g_V_valuesXageX_isX32X() {
+ return g.V().<Integer>values("age").is(32);
+ }
+
+ @Override
+ public Traversal<Vertex, Integer> get_g_V_valuesXageX_isXlte_30X() {
+ return g.V().<Integer>values("age").is(Compare.lte, 30);
+ }
+
+ @Override
+ public Traversal<Vertex, Integer> get_g_V_valuesXageX_isXgte_29X_isXlt_34X() {
+ return g.V().<Integer>values("age").is(Compare.gte, 29).is(Compare.lt, 34);
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX() {
+ return g.V().has(in("created").count().is(1l)).values("name");
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_hasXinXcreatedX_count_isXgte_2XX_valuesXnameX() {
+ return g.V().has(in("created").count().is(Compare.gte, 2l)).values("name");
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/OrTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/OrTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/OrTest.java
new file mode 100644
index 0000000..c1f73eb
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/OrTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.T;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Compare;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.has;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.apache.tinkerpop.gremlin.structure.Compare.gt;
+import static org.apache.tinkerpop.gremlin.structure.Compare.gte;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class OrTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, String> get_g_V_orXhasXage_gt_27X__outE_count_gte_2X_name();
+
+ public abstract Traversal<Vertex, String> get_g_V_orXoutEXknowsX__hasXlabel_softwareX_or_hasXage_gte_35XX_name();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_orXhasXage_gt_27X__outE_count_gte_2X_name() {
+ final Traversal<Vertex, String> traversal = get_g_V_orXhasXage_gt_27X__outE_count_gte_2X_name();
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("marko", "josh", "peter"), traversal);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_orXoutEXknowsX__hasXlabel_softwareX_or_hasXage_gte_35XX_name() {
+ final Traversal<Vertex, String> traversal = get_g_V_orXoutEXknowsX__hasXlabel_softwareX_or_hasXage_gte_35XX_name();
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("marko", "ripple", "lop", "peter"), traversal);
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends OrTest {
+ @Override
+ public Traversal<Vertex, String> get_g_V_orXhasXage_gt_27X__outE_count_gte_2X_name() {
+ return g.V().or(has("age", gt, 27), outE().count().is(gte, 2l)).values("name");
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_orXoutEXknowsX__hasXlabel_softwareX_or_hasXage_gte_35XX_name() {
+ return g.V().or(outE("knows"), has(T.label, "software").or().has("age", Compare.gte, 35)).values("name");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
new file mode 100644
index 0000000..31c8be3
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
@@ -0,0 +1,265 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class RangeTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_out_limitX2X(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_localXoutE_limitX1X_inVX_limitX3X();
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_rangeX5_11X();
+
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by();
+
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_VX1X_out_limitX2X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_out_limitX2X(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ traversal.next();
+ }
+ assertEquals(2, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_localXoutE_limitX1X_inVX_limitX3X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_V_localXoutE_limitX1X_inVX_limitX3X();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ traversal.next();
+ }
+ assertEquals(3, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ final String name = traversal.next().value("name");
+ assertTrue(name.equals("lop") || name.equals("ripple"));
+ }
+ assertEquals(1, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ final String name = traversal.next().value("name");
+ assertTrue(name.equals("lop") || name.equals("ripple"));
+ }
+ assertEquals(1, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ final String name = traversal.next().value("name");
+ assertTrue(name.equals("marko") || name.equals("josh") || name.equals("peter"));
+ }
+ assertEquals(2, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ final String name = traversal.next().value("name");
+ assertTrue(name.equals("marko") || name.equals("josh") || name.equals("peter"));
+ }
+ assertEquals(2, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_repeatXbothX_timesX3X_rangeX5_11X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_V_repeatXbothX_timesX3X_rangeX5_11X();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ traversal.next();
+ counter++;
+ }
+ assertEquals(6, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ //@IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ @Ignore("This should not work cause fold kills the path history")
+ public void g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by() {
+ final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ final Map<String, Object> map = traversal.next();
+ final List<Double> weights = (List<Double>) map.get("w");
+ if (map.get("s").equals("lop")) {
+ assertEquals(1, weights.size());
+ assertTrue(Arrays.asList(0.4, 0.2).contains(weights.get(0)));
+ } else if (map.get("s").equals("ripple")) {
+ assertEquals(1, weights.size());
+ assertEquals(1.0, weights.get(0), 0.0);
+ } else {
+ assertTrue(false);
+ }
+ counter++;
+ }
+ assertEquals(2, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ //@IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ @Ignore("This should not work cause fold kills the path history")
+ public void g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by() {
+ final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ final Map<String, Object> map = traversal.next();
+ final List<Double> weights = (List<Double>) map.get("w");
+ if (map.get("s").equals("lop")) {
+ assertEquals(2, weights.size());
+ assertTrue(Arrays.asList(0.2, 0.4).contains(weights.get(0)));
+ assertTrue(Arrays.asList(0.2, 0.4).contains(weights.get(1)));
+ assertNotEquals(weights.get(0), weights.get(1));
+ } else if (map.get("s").equals("ripple")) {
+ assertEquals(0, weights.size());
+ } else {
+ assertTrue(false);
+ }
+ counter++;
+ }
+ assertEquals(2, counter);
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends RangeTest {
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_out_limitX2X(final Object v1Id) {
+ return g.V(v1Id).out().limit(2);
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_localXoutE_limitX1X_inVX_limitX3X() {
+ return g.V().local(outE().limit(1)).inV().limit(3);
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV(final Object v1Id) {
+ return g.V(v1Id).out("knows").outE("created").range(0, 1).inV();
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X(final Object v1Id) {
+ return g.V(v1Id).out("knows").out("created").range(0, 1);
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X(final Object v1Id) {
+ return g.V(v1Id).out("created").in("created").range(1, 3);
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV(final Object v1Id) {
+ return g.V(v1Id).out("created").inE("created").range(1, 3).outV();
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_rangeX5_11X() {
+ return g.V().repeat(both()).times(3).range(5, 11);
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by() {
+ return g.V().hasLabel("software").as("s").local(inE("created").values("weight").fold().limit(Scope.local, 1)).as("w").select().by("name").by();
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by() {
+ return g.V().hasLabel("software").as("s").local(inE("created").values("weight").fold().range(Scope.local, 1, 3)).as("w").select().by("name").by();
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainTest.java
new file mode 100644
index 0000000..aecfb9d
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class RetainTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_out_retainXg_v2X(final Object v1Id, final Object v2Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_out_aggregateXxX_out_retainXxX(final Object v1Id);
+
+ public abstract Traversal<Vertex, String> get_g_VX1X_asXaX_outXcreatedX_inXcreatedX_retainXaX_name(final Object v1Id);
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_VX1X_out_retainXg_v2X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_out_retainXg_v2X(convertToVertexId("marko"), convertToVertexId("vadas"));
+ printTraversalForm(traversal);
+ assertEquals("vadas", traversal.next().<String>value("name"));
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_out_aggregateXxX_out_retainXxX() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_out_aggregateXxX_out_retainXxX(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ assertEquals("lop", traversal.next().<String>value("name"));
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_asXaX_outXcreatedX_inXcreatedX_retainXaX_name() {
+ final Traversal<Vertex, String> traversal = get_g_VX1X_asXaX_outXcreatedX_inXcreatedX_retainXaX_name(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ assertEquals("marko", traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends RetainTest {
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_out_retainXg_v2X(final Object v1Id, final Object v2Id) {
+ return g.V(v1Id).out().retain(g.V(v2Id).next());
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_out_aggregateXxX_out_retainXxX(final Object v1Id) {
+ return g.V(v1Id).out().aggregate("x").out().retain("x");
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_VX1X_asXaX_outXcreatedX_inXcreatedX_retainXaX_name(final Object v1Id) {
+ return g.V(v1Id).as("a").out("created").in("created").retain("a").values("name");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
new file mode 100644
index 0000000..de80f32
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.T;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class SampleTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Edge, Edge> get_g_E_sampleX1X();
+
+ public abstract Traversal<Edge, Edge> get_g_E_sampleX2X_byXweightX();
+
+ public abstract Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX();
+
+ public abstract Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX();
+
+ public abstract Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_E_sampleX1X() {
+ final Traversal<Edge, Edge> traversal = get_g_E_sampleX1X();
+ assertTrue(traversal.hasNext());
+ traversal.next();
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_E_sampleX2X_byXweightX() {
+ final Traversal<Edge, Edge> traversal = get_g_E_sampleX2X_byXweightX();
+ assertTrue(traversal.hasNext());
+ traversal.next();
+ assertTrue(traversal.hasNext());
+ traversal.next();
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_localXoutE_sampleX1X_byXweightXX() {
+ final Traversal<Vertex, Edge> traversal = get_g_V_localXoutE_sampleX1X_byXweightXX();
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ traversal.next();
+ }
+ assertEquals(3, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ final Traversal<Vertex, Map<String, Collection<Double>>> traversal =
+ get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ final Map<String, Collection<Double>> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(2, map.size());
+ assertEquals(2, map.get("software").size());
+ assertEquals(2, map.get("person").size());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ final Traversal<Vertex, Map<String, Collection<Double>>> traversal =
+ get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ final Map<String, Collection<Double>> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(2, map.size());
+ assertEquals(4, map.get("software").size());
+ assertEquals(5, map.get("person").size());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends SampleTest {
+ @Override
+ public Traversal<Edge, Edge> get_g_E_sampleX1X() {
+ return g.E().sample(1);
+ }
+
+ @Override
+ public Traversal<Edge, Edge> get_g_E_sampleX2X_byXweightX() {
+ return g.E().sample(2).by("weight");
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
+ return g.V().local(outE().sample(1).by("weight"));
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ return g.V().<String,Collection<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 2));
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ return g.V().<String,Collection<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 5));
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathTest.java
new file mode 100644
index 0000000..61a7734
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class SimplePathTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_simplePath(final Object v1Id);
+
+ public abstract Traversal<Vertex, Path> get_g_V_repeatXboth_simplePathX_timesX3X_path();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_outXcreatedX_inXcreatedX_simplePath() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_outXcreatedX_inXcreatedX_simplePath(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ Vertex vertex = traversal.next();
+ assertTrue(vertex.value("name").equals("josh") || vertex.value("name").equals("peter"));
+ }
+ assertEquals(2, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_repeatXboth_simplePathX_timesX3X_path() {
+ final Traversal<Vertex, Path> traversal = get_g_V_repeatXboth_simplePathX_timesX3X_path();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ assertTrue(traversal.next().isSimple());
+ }
+ assertEquals(18, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends SimplePathTest {
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_simplePath(final Object v1Id) {
+ return g.V(v1Id).out("created").in("created").simplePath();
+ }
+
+
+ @Override
+ public Traversal<Vertex, Path> get_g_V_repeatXboth_simplePathX_timesX3X_path() {
+ return g.V().repeat(both().simplePath()).times(3).path();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
new file mode 100644
index 0000000..da75411
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -0,0 +1,161 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Compare;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class WhereTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_eq_bX();
+
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_neq_bX();
+
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXb_hasXname_markoXX();
+
+ public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_outXknowsX_bX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_eq_bX() {
+ final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_eq_bX();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ Map<String, Object> map = traversal.next();
+ assertEquals(2, map.size());
+ assertTrue(map.containsKey("a"));
+ assertTrue(map.containsKey("b"));
+ assertEquals(map.get("a"), map.get("b"));
+ }
+ assertEquals(6, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_b_neqX() {
+ final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_neq_bX();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ Map<String, Object> map = traversal.next();
+ assertEquals(2, map.size());
+ assertTrue(map.containsKey("a"));
+ assertTrue(map.containsKey("b"));
+ assertNotEquals(map.get("a"), map.get("b"));
+ assertTrue(((Vertex) map.get("a")).id().equals(convertToVertexId("marko")) ||
+ ((Vertex) map.get("a")).id().equals(convertToVertexId("peter")) ||
+ ((Vertex) map.get("a")).id().equals(convertToVertexId("josh")));
+ assertTrue(((Vertex) map.get("b")).id().equals(convertToVertexId("marko")) ||
+ ((Vertex) map.get("b")).id().equals(convertToVertexId("peter")) ||
+ ((Vertex) map.get("b")).id().equals(convertToVertexId("josh")));
+ }
+ assertEquals(6, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXb_hasXname_markoXX() {
+ final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXb_hasXname_markoXX();
+ printTraversalForm(traversal);
+ int counter = 0;
+ int markoCounter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ Map<String, Object> map = traversal.next();
+ assertEquals(2, map.size());
+ assertTrue(map.containsKey("a"));
+ assertTrue(map.containsKey("b"));
+ assertEquals(convertToVertexId("marko"), ((Vertex) map.get("b")).id());
+ if (((Vertex) map.get("a")).id().equals(convertToVertexId("marko")))
+ markoCounter++;
+ else
+ assertTrue(((Vertex) map.get("a")).id().equals(convertToVertexId("josh")) || ((Vertex) map.get("a")).id().equals(convertToVertexId("peter")));
+ }
+ assertEquals(3, markoCounter);
+ assertEquals(5, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_outXknowsX_bX() {
+ final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_outXknowsX_bX();
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ Map<String, Object> map = traversal.next();
+ assertEquals(2, map.size());
+ assertTrue(map.containsKey("a"));
+ assertTrue(map.containsKey("b"));
+ assertEquals(convertToVertexId("marko"), ((Vertex) map.get("a")).id());
+ assertEquals(convertToVertexId("josh"), ((Vertex) map.get("b")).id());
+ }
+ assertEquals(1, counter);
+ assertFalse(traversal.hasNext());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends WhereTest {
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_eq_bX() {
+ return g.V().has("age").as("a").out().in().has("age").as("b").select().where("a", Compare.eq, "b");
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_neq_bX() {
+ return g.V().has("age").as("a").out().in().has("age").as("b").select().where("a", Compare.neq, "b");
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXb_hasXname_markoXX() {
+ return g.V().has("age").as("a").out().in().has("age").as("b").select().where(as("b").has("name", "marko"));
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Object>> get_g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_outXknowsX_bX() {
+ return g.V().has("age").as("a").out().in().has("age").as("b").select().where(as("a").out("knows").as("b"));
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
new file mode 100644
index 0000000..3f790b8
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+import org.apache.tinkerpop.gremlin.FeatureRequirement;
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class AddEdgeTest extends AbstractGremlinTest {
+
+ public abstract Traversal<Vertex, Edge> get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_aX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Edge> get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_a_weight_2X(final Object v1Id);
+
+ public abstract Traversal<Vertex, Edge> get_g_V_addOutEXexistsWith__g_V__time_nowX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+ public void g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_aX() {
+ final Traversal<Vertex, Edge> traversal = get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_aX(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int count = 0;
+ while (traversal.hasNext()) {
+ final Edge edge = traversal.next();
+ assertEquals("createdBy", edge.label());
+ assertEquals(0, IteratorUtils.count(edge.properties()));
+ count++;
+
+ }
+ assertEquals(1, count);
+ assertEquals(7, IteratorUtils.count(graph.edges()));
+ assertEquals(6, IteratorUtils.count(graph.vertices()));
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+ public void g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_a_weight_2X() {
+ final Traversal<Vertex, Edge> traversal = get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_a_weight_2X(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int count = 0;
+ while (traversal.hasNext()) {
+ final Edge edge = traversal.next();
+ assertEquals("createdBy", edge.label());
+ assertEquals(2, edge.<Integer>value("weight").intValue());
+ assertEquals(1, IteratorUtils.count(edge.properties()));
+ count++;
+
+
+ }
+ assertEquals(1, count);
+ assertEquals(7, IteratorUtils.count(graph.edges()));
+ assertEquals(6, IteratorUtils.count(graph.vertices()));
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+ public void g_V_addOutEXexistsWith__g_V__time_nowX() {
+ final Traversal<Vertex, Edge> traversal = get_g_V_addOutEXexistsWith__g_V__time_nowX();
+ printTraversalForm(traversal);
+ int count = 0;
+ while (traversal.hasNext()) {
+ final Edge edge = traversal.next();
+ assertEquals("existsWith", edge.label());
+ assertEquals("now", edge.value("time"));
+ assertEquals(1, IteratorUtils.count(edge.properties()));
+ count++;
+ }
+ assertEquals(36, count);
+ assertEquals(42, IteratorUtils.count(graph.edges()));
+ for (final Vertex vertex : IteratorUtils.list(graph.vertices())) {
+ assertEquals(6, IteratorUtils.count(vertex.edges(Direction.OUT, "existsWith")));
+ assertEquals(6, IteratorUtils.count(vertex.edges(Direction.IN, "existsWith")));
+ }
+ assertEquals(6, IteratorUtils.count(graph.vertices()));
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ public static class Traversals extends AddEdgeTest {
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_aX(final Object v1Id) {
+ return g.V(v1Id).as("a").out("created").addOutE("createdBy", "a");
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_VX1X_asXaX_outXcreatedX_addOutEXcreatedBy_a_weight_2X(final Object v1Id) {
+ return g.V(v1Id).as("a").out("created").addOutE("createdBy", "a", "weight", 2);
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_V_addOutEXexistsWith__g_V__time_nowX() {
+ return g.V().addOutE("existsWith", g.V(), "time", "now");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
new file mode 100644
index 0000000..284633b
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+import org.apache.tinkerpop.gremlin.FeatureRequirement;
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.traversal.T;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class AddVertexTest extends AbstractGremlinTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X();
+
+ public abstract Traversal<Vertex, Vertex> get_g_addVXlabel_person_name_stephenX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ public void g_V_addVXlabel_animal_age_0X() {
+ final Traversal<Vertex, Vertex> traversal = get_g_V_addVXlabel_animal_age_0X();
+ printTraversalForm(traversal);
+ int count = 0;
+ while (traversal.hasNext()) {
+ final Vertex vertex = traversal.next();
+ assertEquals("animal", vertex.label());
+ assertEquals(0, vertex.<Integer>value("age").intValue());
+ count++;
+ }
+ assertEquals(12, IteratorUtils.count(graph.vertices()));
+ assertEquals(6, count);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ public void g_addVXlabel_person_name_stephenX() {
+ final Traversal<Vertex, Vertex> traversal = get_g_addVXlabel_person_name_stephenX();
+ printTraversalForm(traversal);
+ final Vertex stephen = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals("person", stephen.label());
+ assertEquals("stephen", stephen.value("name"));
+ assertEquals(1, IteratorUtils.count(stephen.properties()));
+ assertEquals(7, IteratorUtils.count(graph.vertices()));
+ }
+
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ public static class Traversals extends AddVertexTest {
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X() {
+ return g.V().addV(T.label, "animal", "age", 0);
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_addVXlabel_person_name_stephenX() {
+ return g.addV(T.label, "person", "name", "stephen");
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackTest.java
new file mode 100644
index 0000000..631d2dc
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackTest.java
@@ -0,0 +1,220 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.junit.Assert.*;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class BackTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_backXhereX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX(final Object v4Id);
+
+ public abstract Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX_name(final Object v4Id);
+
+ public abstract Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_backXhereX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_backXhereX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_backXhereX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_backXhereX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_backXhereX();
+
+ public abstract Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_backXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_backXprojectXX_groupCount_byXnameX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_asXhereX_out_backXhereX() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX1X_asXhereX_out_backXhereX(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ assertEquals("marko", traversal.next().<String>value("name"));
+ }
+ assertEquals(3, counter);
+ }
+
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX() {
+ final Traversal<Vertex, Vertex> traversal = get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX(convertToVertexId("josh"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ final Vertex vertex = traversal.next();
+ assertEquals("java", vertex.<String>value("lang"));
+ assertTrue(vertex.value("name").equals("ripple") || vertex.value("name").equals("lop"));
+ }
+ assertEquals(2, counter);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_outE_asXhereX_inV_hasXname_vadasX_backXhereX() {
+ final Traversal<Vertex, Edge> traversal = get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_backXhereX(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ final Edge edge = traversal.next();
+ assertEquals("knows", edge.label());
+ assertEquals(convertToVertexId("vadas"), edge.inVertex().id());
+ assertEquals(convertToVertexId("marko"), edge.outVertex().id());
+ assertEquals(0.5d, edge.<Double>value("weight"), 0.0001d);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX_name() {
+ final Traversal<Vertex, String> traversal = get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX_name(convertToVertexId("josh"));
+ printTraversalForm(traversal);
+ int counter = 0;
+ final Set<String> names = new HashSet<>();
+ while (traversal.hasNext()) {
+ counter++;
+ names.add(traversal.next());
+ }
+ assertEquals(2, counter);
+ assertEquals(2, names.size());
+ assertTrue(names.contains("ripple"));
+ assertTrue(names.contains("lop"));
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_backXhereX() {
+ final List<Traversal<Vertex, Edge>> traversals = Arrays.asList(
+ get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_backXhereX(convertToVertexId("marko")),
+ get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_backXhereX(convertToVertexId("marko")),
+ get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_backXhereX(convertToVertexId("marko")));
+ traversals.forEach(traversal -> {
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ assertTrue(traversal.hasNext());
+ final Edge edge = traversal.next();
+ assertEquals("knows", edge.label());
+ assertEquals(1.0d, edge.<Double>value("weight"), 0.00001d);
+ assertFalse(traversal.hasNext());
+ assertFalse(traversal.hasNext());
+ });
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_asXhereXout_name_backXhereX() {
+ Traversal<Vertex, Vertex> traversal = get_g_V_asXhereXout_name_backXhereX();
+ printTraversalForm(traversal);
+ super.checkResults(new HashMap<Vertex, Long>() {{
+ put(convertToVertex(graph, "marko"), 3l);
+ put(convertToVertex(graph, "josh"), 2l);
+ put(convertToVertex(graph, "peter"), 1l);
+ }}, traversal);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_backXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_backXprojectXX_groupCount_byXnameX() {
+ List<Traversal<Vertex, Map<String, Long>>> traversals = Arrays.asList(get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_backXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_backXprojectXX_groupCount_byXnameX());
+ traversals.forEach(traversal -> {
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ final Map<String, Long> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(2, map.size());
+ assertEquals(1l, map.get("ripple").longValue());
+ assertEquals(6l, map.get("lop").longValue());
+ });
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends BackTest {
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_backXhereX(final Object v1Id) {
+ return g.V(v1Id).as("here").out().back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX(final Object v4Id) {
+ return g.V(v4Id).out().as("here").has("lang", "java").back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX_name(final Object v4Id) {
+ return g.V(v4Id).out().as("here").has("lang", "java").back("here").values("name");
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_backXhereX(final Object v1Id) {
+ return g.V(v1Id).outE().as("here").inV().has("name", "vadas").back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_backXhereX(final Object v1Id) {
+ return g.V(v1Id).outE("knows").has("weight", 1.0d).as("here").inV().has("name", "josh").back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_backXhereX(final Object v1Id) {
+ return g.V(v1Id).outE("knows").as("here").has("weight", 1.0d).inV().has("name", "josh").<Edge>back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_backXhereX(final Object v1Id) {
+ return g.V(v1Id).outE("knows").as("here").has("weight", 1.0d).as("fake").inV().has("name", "josh").<Edge>back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_backXhereX() {
+ return g.V().as("here").out().values("name").back("here");
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_backXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_backXprojectXX_groupCount_byXnameX() {
+ return (Traversal) g.V().out("created")
+ .union(as("project").in("created").has("name", "marko").back("project"),
+ as("project").in("created").in("knows").has("name", "marko").back("project")).groupCount().by("name");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CoalesceTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CoalesceTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CoalesceTest.java
new file mode 100644
index 0000000..d8f4c04
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CoalesceTest.java
@@ -0,0 +1,158 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.T;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.junit.Assert.*;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class CoalesceTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_coalesceXoutXfooX_outXbarXX();
+
+ public abstract Traversal<Vertex, String> get_g_VX1X_coalesceXoutXknowsX_outXcreatedXX_valuesXnameX(final Object v1Id);
+
+ public abstract Traversal<Vertex, String> get_g_VX1X_coalesceXoutXcreatedX_outXknowsXX_valuesXnameX(final Object v1Id);
+
+ public abstract Traversal<Vertex, Map<String, Long>> get_g_V_coalesceXoutXlikesX_outXknowsX_inXcreatedXX_groupCount_byXnameX();
+
+ public abstract Traversal<Vertex, Path> get_g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_coalesceXoutXfooX_outXbarXX() {
+ Traversal<Vertex, Vertex> traversal = get_g_V_coalesceXoutXfooX_outXbarXX();
+ printTraversalForm(traversal);
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_coalesceXoutXknowsX_outXcreatedXX_valuesXnameX() {
+ Traversal<Vertex, String> traversal = get_g_VX1X_coalesceXoutXknowsX_outXcreatedXX_valuesXnameX(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("josh", "vadas"), traversal);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX1X_coalesceXoutXcreatedX_outXknowsXX_valuesXnameX() {
+ Traversal<Vertex, String> traversal = get_g_VX1X_coalesceXoutXcreatedX_outXknowsXX_valuesXnameX(convertToVertexId("marko"));
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ assertEquals("lop", traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_coalesceXoutXlikesX_outXknowsX_inXcreatedXX_groupCount_byXnameX() {
+ Traversal<Vertex, Map<String, Long>> traversal = get_g_V_coalesceXoutXlikesX_outXknowsX_inXcreatedXX_groupCount_byXnameX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ Map<String, Long> result = traversal.next();
+ assertEquals(4, result.size());
+ assertTrue(result.containsKey("josh") && result.containsKey("lop") && result.containsKey("ripple") && result.containsKey("vadas"));
+ assertEquals(1L, (long) result.get("josh"));
+ assertEquals(2L, (long) result.get("lop"));
+ assertEquals(1L, (long) result.get("ripple"));
+ assertEquals(1L, (long) result.get("vadas"));
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ @LoadGraphWith(MODERN)
+ public void g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX() {
+ Traversal<Vertex, Path> traversal = get_g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX();
+ printTraversalForm(traversal);
+ Map<String, Integer> first = new HashMap<>();
+ Map<String, Integer> last = new HashMap<>();
+ int counter = 0;
+ while (traversal.hasNext()) {
+ counter++;
+ Path path = traversal.next();
+ first.compute(path.<String>get(0), (k, v) -> v != null ? v + 1 : 1);
+ last.compute(path.<String>get(2), (k, v) -> v != null ? v + 1 : 1);
+ assertEquals(3, path.size());
+ assertTrue((path.<String>get(0).equals("marko") && path.<String>get(1).equals("knows") && path.<String>get(2).equals("vadas"))
+ || (path.<String>get(0).equals("marko") && path.<String>get(1).equals("knows") && path.<String>get(2).equals("josh"))
+ || (path.<String>get(0).equals("josh") && path.<String>get(1).equals("created") && path.<String>get(2).equals("lop"))
+ || (path.<String>get(0).equals("josh") && path.<String>get(1).equals("created") && path.<String>get(2).equals("ripple"))
+ || (path.<String>get(0).equals("peter") && path.<String>get(1).equals("created") && path.<String>get(2).equals("lop")));
+ }
+ assertEquals(5, counter);
+ assertEquals(2, (int) first.get("marko"));
+ assertEquals(2, (int) first.get("josh"));
+ assertEquals(1, (int) first.get("peter"));
+ assertEquals(1, (int) last.get("josh"));
+ assertEquals(1, (int) last.get("vadas"));
+ assertEquals(2, (int) last.get("lop"));
+ assertEquals(1, (int) last.get("ripple"));
+ assertFalse(traversal.hasNext());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends CoalesceTest {
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_coalesceXoutXfooX_outXbarXX() {
+ return g.V().coalesce(out("foo"), out("bar"));
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_VX1X_coalesceXoutXknowsX_outXcreatedXX_valuesXnameX(final Object v1Id) {
+ return g.V(v1Id).coalesce(out("knows"), out("created")).values("name");
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_VX1X_coalesceXoutXcreatedX_outXknowsXX_valuesXnameX(final Object v1Id) {
+ return g.V(v1Id).coalesce(out("created"), out("knows")).values("name");
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Long>> get_g_V_coalesceXoutXlikesX_outXknowsX_inXcreatedXX_groupCount_byXnameX() {
+ return g.V().coalesce(out("likes"), out("knows"), out("created")).<String>groupCount().by("name");
+ }
+
+ @Override
+ public Traversal<Vertex, Path> get_g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX() {
+ return g.V().coalesce(outE("knows"), outE("created")).otherV().path().by("name").by(T.label);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CountTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CountTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CountTest.java
new file mode 100644
index 0000000..570ffbb
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CountTest.java
@@ -0,0 +1,168 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class CountTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, Long> get_g_V_count();
+
+ public abstract Traversal<Vertex, Long> get_g_V_out_count();
+
+ public abstract Traversal<Vertex, Long> get_g_V_both_both_count();
+
+ public abstract Traversal<Vertex, Long> get_g_V_repeatXoutX_timesX3X_count();
+
+ public abstract Traversal<Vertex, Long> get_g_V_repeatXoutX_timesX8X_count();
+
+ public abstract Traversal<Vertex, Long> get_g_V_hasXnoX_count();
+
+ public abstract Traversal<Vertex, Long> get_g_V_fold_countXlocalX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(6), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_out_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_out_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(6), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(GRATEFUL)
+ public void g_V_both_both_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_both_both_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(1406914), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(GRATEFUL)
+ public void g_V_repeatXoutX_timesX3X_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_repeatXoutX_timesX3X_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(14465066L), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(GRATEFUL)
+ public void g_V_repeatXoutX_timesX8X_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_repeatXoutX_timesX8X_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(2505037961767380L), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasXnoX_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_hasXnoX_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(0), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_filterXfalseX_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_hasXnoX_count();
+ printTraversalForm(traversal);
+ assertEquals(new Long(0), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_fold_countXlocalX() {
+ final Traversal<Vertex, Long> traversal = get_g_V_fold_countXlocalX();
+ printTraversalForm(traversal);
+ assertEquals(new Long(6), traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends CountTest {
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_count() {
+ return g.V().count();
+ }
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_out_count() {
+ return g.V().out().count();
+ }
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_both_both_count() {
+ return g.V().both().both().count();
+ }
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_repeatXoutX_timesX3X_count() {
+ return g.V().repeat(out()).times(3).count();
+ }
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_repeatXoutX_timesX8X_count() {
+ return g.V().repeat(out()).times(8).count();
+ }
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_hasXnoX_count() {
+ return g.V().has("no").count();
+ }
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_fold_countXlocalX() {
+ return g.V().fold().count(Scope.local);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FoldTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FoldTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FoldTest.java
new file mode 100644
index 0000000..58d84a9
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FoldTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
+import org.apache.tinkerpop.gremlin.structure.Operator;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.function.BinaryOperator;
+
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class FoldTest extends AbstractGremlinProcessTest {
+
+ public abstract Traversal<Vertex, List<Vertex>> get_g_V_fold();
+
+ public abstract Traversal<Vertex, Vertex> get_g_V_fold_unfold();
+
+ public abstract Traversal<Vertex, Integer> get_g_V_age_foldX0_plusX();
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_fold() {
+ final Traversal<Vertex, List<Vertex>> traversal = get_g_V_fold();
+ printTraversalForm(traversal);
+ List<Vertex> list = traversal.next();
+ assertFalse(traversal.hasNext());
+ Set<Vertex> vertices = new HashSet<>(list);
+ assertEquals(6, vertices.size());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+ public void g_V_fold_unfold() {
+ final Traversal<Vertex, Vertex> traversal = get_g_V_fold_unfold();
+ printTraversalForm(traversal);
+ int count = 0;
+ Set<Vertex> vertices = new HashSet<>();
+ while (traversal.hasNext()) {
+ vertices.add(traversal.next());
+ count++;
+ }
+ assertFalse(traversal.hasNext());
+ assertEquals(6, count);
+ assertEquals(6, vertices.size());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_age_foldX0_plusX() {
+ final Traversal<Vertex, Integer> traversal = get_g_V_age_foldX0_plusX();
+ printTraversalForm(traversal);
+ final Integer ageSum = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(Integer.valueOf(123), ageSum);
+ }
+
+ @UseEngine(TraversalEngine.Type.STANDARD)
+ @UseEngine(TraversalEngine.Type.COMPUTER)
+ public static class Traversals extends FoldTest {
+
+ @Override
+ public Traversal<Vertex, List<Vertex>> get_g_V_fold() {
+ return g.V().fold();
+ }
+
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_fold_unfold() {
+ return g.V().fold().unfold();
+ }
+
+ @Override
+ public Traversal<Vertex, Integer> get_g_V_age_foldX0_plusX() {
+ return g.V().<Integer>values("age").fold(0, (BinaryOperator) Operator.sum);
+ }
+ }
+}