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:34 UTC

[16/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-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
new file mode 100644
index 0000000..3ec89e9
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyChooseTest.groovy
@@ -0,0 +1,51 @@
+/*
+ * 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.branch
+
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+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.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Joshua Shinavier (http://fortytwo.net)
+ */
+public abstract class GroovyChooseTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends ChooseTest {
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_chooseXout_countX_optionX2L__nameX_optionX3L__valueMapX() {
+            g.V.choose(__.out.count).option(2L, __.values('name')).option(3L, __.valueMap())
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends ChooseTest {
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_chooseXout_countX_optionX2L__nameX_optionX3L__valueMapX() {
+            ComputerTestHelper.compute("g.V.choose(__.out.count).option(2L, __.values('name')).option(3L, __.valueMap())", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
new file mode 100644
index 0000000..c5cbd5e
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
@@ -0,0 +1,145 @@
+/*
+ * 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.branch
+
+import org.apache.tinkerpop.gremlin.process.traversal.T
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+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.Order
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyLocalTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends LocalTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_localXpropertiesXlocationX_order_byXvalueX_limitX2XX_value() {
+            g.V.local(__.properties('location').order.by(T.value, Order.incr).limit(2)).value
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_hasXlabel_personX_asXaX_localXoutXcreatedX_asXbXX_selectXa_bX_byXnameX_byXidX() {
+            g.V.has(T.label, 'person').as('a').local(__.out('created').as('b')).select('a', 'b').by('name').by(T.id)
+        }
+
+        @Override
+        public Traversal<Vertex, Long> get_g_V_localXoutE_countX() {
+            g.V.local(__.outE.count());
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_localXoutEXknowsX_limitX1XX_inV_name(final Object v1Id) {
+            g.V(v1Id).local(__.outE('knows').limit(1)).inV.name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_localXbothEXcreatedX_limitX1XX_otherV_name() {
+            g.V().local(__.bothE('created').limit(1)).otherV.name
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX4X_localXbothEX1_createdX_limitX1XX(final Object v4Id) {
+            g.V(v4Id).local(__.bothE('created').limit(1))
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX4X_localXbothEXknows_createdX_limitX1XX(final Object v4Id) {
+            g.V(v4Id).local(__.bothE('knows', 'created').limit(1))
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_localXbothE_limitX1XX_otherV_name(final Object v4Id) {
+            g.V(v4Id).local(__.bothE.limit(1)).otherV.name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_localXbothE_limitX2XX_otherV_name(final Object v4Id) {
+            g.V(v4Id).local(__.bothE.limit(2).otherV).name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_localXinEXknowsX_limitX2XX_outV_name() {
+            g.V().inE('knows').local(__.limit(2).outV).name
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends LocalTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_localXpropertiesXlocationX_order_byXvalueX_limitX2XX_value() {
+            ComputerTestHelper.compute("g.V.local(__.properties('location').order.by(T.value,Order.incr).limit(2)).value", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_hasXlabel_personX_asXaX_localXoutXcreatedX_asXbXX_selectXa_bX_byXnameX_byXidX() {
+            ComputerTestHelper.compute("g.V.has(T.label, 'person').as('a').local(__.out('created').as('b')).select('a', 'b').by('name').by(T.id)", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Long> get_g_V_localXoutE_countX() {
+            ComputerTestHelper.compute("g.V.local(__.outE.count())", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_localXoutEXknowsX_limitX1XX_inV_name(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).local(__.outE('knows').limit(1)).inV.name", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_localXbothEXcreatedX_limitX1XX_otherV_name() {
+            ComputerTestHelper.compute("g.V().local(__.bothE('created').limit(1)).otherV.name", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX4X_localXbothEX1_createdX_limitX1XX(final Object v4Id) {
+            ComputerTestHelper.compute("g.V(${v4Id}).local(__.bothE('created').limit(1))", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX4X_localXbothEXknows_createdX_limitX1XX(final Object v4Id) {
+            ComputerTestHelper.compute("g.V(${v4Id}).local(__.bothE('knows', 'created').limit(1))", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_localXbothE_limitX1XX_otherV_name(final Object v4Id) {
+            ComputerTestHelper.compute("g.V(${v4Id}).local(__.bothE.limit(1)).otherV.name", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_localXbothE_limitX2XX_otherV_name(final Object v4Id) {
+            ComputerTestHelper.compute("g.V(${v4Id}).local(__.bothE.limit(2)).otherV.name", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_localXinEXknowsX_limitX2XX_outV_name() {
+            ComputerTestHelper.compute("g.V().local(__.inE('knows').limit(2).outV).name", g);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
new file mode 100644
index 0000000..cee4733
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy
@@ -0,0 +1,134 @@
+/*
+ * 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.branch
+
+import org.apache.tinkerpop.gremlin.process.*
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+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.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.groupCount
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.has;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyRepeatTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends RepeatTest {
+
+        @Override
+        public Traversal<Vertex, Path> get_g_V_repeatXoutX_timesX2X_emit_path() {
+            g.V.repeat(__.out).times(2).emit.path
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_repeatXoutX_timesX2X_repeatXinX_timesX2X_name() {
+            g.V.repeat(__.out).times(2).repeat(__.in).times(2).name
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_repeatXoutX_timesX2X() {
+            g.V.repeat(__.out).times(2)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_repeatXoutX_timesX2X_emit() {
+            g.V.repeat(__.out).times(2).emit;
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_timesX2X_repeatXoutX_name(Object v1Id) {
+            g.V(v1Id).times(2).repeat(__.out).name
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_V_emit_repeatXoutX_timesX2X_path() {
+            g.V.emit.repeat(__.out).times(2).path
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_V_emit_timesX2X_repeatXoutX_path() {
+            g.V.emit.times(2).repeat(__.out).path
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_emitXhasXlabel_personXX_repeatXoutX_name(final Object v1Id) {
+            g.V(v1Id).emit(has(T.label, 'person')).repeat(__.out).name
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_repeatXgroupCountXmX_byXnameX_outX_timesX2X_capXmX() {
+            g.V.repeat(groupCount('m').by('name').out).times(2).cap('m')
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends RepeatTest {
+        @Override
+        public Traversal<Vertex, Path> get_g_V_repeatXoutX_timesX2X_emit_path() {
+            ComputerTestHelper.compute("g.V.repeat(__.out).times(2).emit.path", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_repeatXoutX_timesX2X_repeatXinX_timesX2X_name() {
+            ComputerTestHelper.compute("g.V.repeat(__.out).times(2).repeat(__.in).times(2).name", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_repeatXoutX_timesX2X() {
+            ComputerTestHelper.compute("g.V.repeat(__.out).times(2)", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_repeatXoutX_timesX2X_emit() {
+            ComputerTestHelper.compute("g.V.repeat(__.out).times(2).emit", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_timesX2X_repeatXoutX_name(Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).times(2).repeat(__.out).name", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_V_emit_repeatXoutX_timesX2X_path() {
+            ComputerTestHelper.compute("g.V.emit.repeat(__.out).times(2).path", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_V_emit_timesX2X_repeatXoutX_path() {
+            ComputerTestHelper.compute("g.V.emit.times(2).repeat(__.out).path", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_emitXhasXlabel_personXX_repeatXoutX_name(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).emit(has(T.label, 'person')).repeat(__.out).name", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_repeatXgroupCountXmX_byXnameX_outX_timesX2X_capXmX() {
+            ComputerTestHelper.compute("g.V.repeat(groupCount('m').by('name').out).times(2).cap('m')", g)
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyUnionTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyUnionTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyUnionTest.groovy
new file mode 100644
index 0000000..626a19e
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyUnionTest.groovy
@@ -0,0 +1,111 @@
+/*
+ * 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.branch
+
+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.process.computer.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyUnionTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends UnionTest {
+
+        public Traversal<Vertex, String> get_g_V_unionXout__inX_name() {
+            g.V.union(__.out, __.in).name
+        }
+
+        public Traversal<Vertex, String> get_g_VX1X_unionXrepeatXoutX_timesX2X__outX_name(final Object v1Id) {
+            g.V(v1Id).union(repeat(__.out).times(2), __.out).name
+        }
+
+        public Traversal<Vertex, String> get_g_V_chooseXlabel_is_person__unionX__out_lang__out_nameX__in_labelX() {
+            g.V.choose(__.label.is('person'), union(__.out.lang, __.out.name), __.in.label)
+        }
+
+        public Traversal<Vertex, Map<String, Long>> get_g_V_chooseXlabel_is_person__unionX__out_lang__out_nameX__in_labelX_groupCount() {
+            g.V.choose(__.label.is('person'), union(__.out.lang, __.out.name), __.in.label).groupCount
+        }
+
+        public Traversal<Vertex, Map<String, Long>> get_g_V_unionXrepeatXunionXoutXcreatedX__inXcreatedXX_timesX2X__repeatXunionXinXcreatedX__outXcreatedXX_timesX2XX_label_groupCount() {
+            g.V.union(
+                    repeat(union(
+                            out('created'),
+                            __.in('created'))).times(2),
+                    repeat(union(
+                            __.in('created'),
+                            out('created'))).times(2)).label.groupCount()
+        }
+
+        @Override
+        public Traversal<Vertex, Number> get_g_VX1_2X_unionXoutE_count__inE_count__outE_weight_sumX(
+                final Object v1Id, final Object v2Id) {
+            g.V(v1Id, v2Id).union(outE().count, inE().count, outE().weight.sum);
+        }
+
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends UnionTest {
+
+        public Traversal<Vertex, String> get_g_V_unionXout__inX_name() {
+            ComputerTestHelper.compute("g.V.union(__.out, __.in).name", g)
+        }
+
+        public Traversal<Vertex, String> get_g_VX1X_unionXrepeatXoutX_timesX2X__outX_name(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).union(repeat(__.out).times(2), __.out).name", g)
+        }
+
+        public Traversal<Vertex, String> get_g_V_chooseXlabel_is_person__unionX__out_lang__out_nameX__in_labelX() {
+            ComputerTestHelper.compute("g.V.choose(__.label.is('person'), union(__.out.lang, __.out.name), __.in.label)", g)
+        }
+
+        public Traversal<Vertex, Map<String, Long>> get_g_V_chooseXlabel_is_person__unionX__out_lang__out_nameX__in_labelX_groupCount() {
+            ComputerTestHelper.compute("g.V.choose(__.label.is('person'), union(__.out.lang, __.out.name), __.in.label).groupCount", g)
+        }
+
+        public Traversal<Vertex, Map<String, Long>> get_g_V_unionXrepeatXunionXoutXcreatedX__inXcreatedXX_timesX2X__repeatXunionXinXcreatedX__outXcreatedXX_timesX2XX_label_groupCount() {
+            ComputerTestHelper.compute("""
+            g.V.union(
+                    repeat(union(
+                            out('created'),
+                            __.in('created'))).times(2),
+                    repeat(union(
+                            __.in('created'),
+                            out('created'))).times(2)).label.groupCount()
+           """, g)
+        }
+
+        @Override
+        public Traversal<Vertex, Number> get_g_VX1_2X_unionXoutE_count__inE_count__outE_weight_sumX(
+                final Object v1Id, final Object v2Id) {
+            g.engine(StandardTraversalEngine.INSTANCE);
+            g.V(v1Id, v2Id).union(outE().count, inE().count, outE().weight.sum);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyAndTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyAndTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyAndTest.groovy
new file mode 100644
index 0000000..4ee88a6
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyAndTest.groovy
@@ -0,0 +1,65 @@
+/*
+ * 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.process.computer.ComputerTestHelper
+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 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 GroovyAndTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends AndTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_andXhasXage_gt_27X__outE_count_gt_2X_name() {
+            g.V.and(has('age', gt, 27), outE().count.is(gte, 2l)).name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_andXoutE__hasXlabel_personX_and_hasXage_gte_32XX_name() {
+            g.V.and(outE(), has(T.label, 'person') & has('age', gte, 32)).name
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends AndTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_andXhasXage_gt_27X__outE_count_gt_2X_name() {
+            ComputerTestHelper.compute("g.V.and(has('age', gt, 27), outE().count.is(gte, 2l)).name", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_andXoutE__hasXlabel_personX_and_hasXage_gte_32XX_name() {
+            ComputerTestHelper.compute("g.V.and(outE(), has(T.label, 'person') & has('age', gte, 32)).name", g)
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCoinTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCoinTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCoinTest.groovy
new file mode 100644
index 0000000..01ae205
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCoinTest.groovy
@@ -0,0 +1,59 @@
+/*
+ * 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.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine
+import org.apache.tinkerpop.gremlin.process.UseEngine
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyCoinTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends CoinTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_coinX1X() {
+            g.V.coin(1.0f)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_coinX0X() {
+            g.V.coin(0.0f)
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends CoinTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_coinX1X() {
+            ComputerTestHelper.compute("g.V.coin(1.0f)", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_coinX0X() {
+            ComputerTestHelper.compute("g.V.coin(0.0f)", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCyclicPathTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCyclicPathTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCyclicPathTest.groovy
new file mode 100644
index 0000000..042d4e0
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyCyclicPathTest.groovy
@@ -0,0 +1,60 @@
+/*
+ * 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.process.traversal.Path
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine
+import org.apache.tinkerpop.gremlin.process.UseEngine
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyCyclicPathTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends CyclicPathTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_cyclicPath(final Object v1Id) {
+            g.V(v1Id).out('created').in('created').cyclicPath
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_VX1X_outXcreatedX_inXcreatedX_cyclicPath_path(final Object v1Id) {
+            g.V(v1Id).out('created').in('created').cyclicPath.path
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends CyclicPathTest {
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_cyclicPath(final Object v1) {
+            ComputerTestHelper.compute("g.V(${v1}).out('created').in('created').cyclicPath", g);
+        }
+
+        @Override
+        Traversal<Vertex, Path> get_g_VX1X_outXcreatedX_inXcreatedX_cyclicPath_path(final Object v1) {
+            ComputerTestHelper.compute("g.V(${v1}).out('created').in('created').cyclicPath().path()", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
new file mode 100644
index 0000000..036d18c
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
@@ -0,0 +1,105 @@
+/*
+ * 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.process.*
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+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.structure.Vertex
+import org.junit.Test
+
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.dedup
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class GroovyDedupTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends DedupTest {
+        @Override
+        public Traversal<Vertex, String> get_g_V_both_dedup_name() {
+            g.V.both.dedup.name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name() {
+            g.V.both.has(T.label, 'software').dedup.by('lang').name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_both_name_orderXa_bX_dedup() {
+            g.V().both().properties('name').order.by { a, b -> a.value() <=> b.value() }.dedup.value
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX() {
+            g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local))
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends DedupTest {
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_V_both_dedup_name() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_V_both_hasXlabel_softwareX_dedup_byXlangX_name() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_V_both_name_orderXa_bX_dedup() {
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX() {
+            ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local))", g);
+        }
+
+        @Override
+        Traversal<Vertex, String> get_g_V_both_dedup_name() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, String> get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, String> get_g_V_both_name_orderXa_bX_dedup() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyExceptTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyExceptTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyExceptTest.groovy
new file mode 100644
index 0000000..6dddba2
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyExceptTest.groovy
@@ -0,0 +1,114 @@
+/*
+ * 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.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.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class GroovyExceptTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends ExceptTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_exceptXg_v2X(final Object v1Id, final Object v2Id) {
+            g.V(v1Id).out.except(g.V(v2Id).next())
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_aggregateXxX_out_exceptXxX(final Object v1Id) {
+            g.V(v1Id).out.aggregate('x').out.except('x')
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_outXcreatedX_inXcreatedX_exceptXg_v1X_name(final Object v1Id) {
+            g.V(v1Id).out('created').in('created').except(g.V(v1Id).next()).values('name')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_exceptXg_V_toListX() {
+            g.V.out.except(g.V.toList())
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_exceptXX() {
+            g.V.out.except([])
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_VX1X_repeatXbothEXcreatedX_exceptXeX_aggregateXeX_otherVX_emit_path(
+                final Object v1Id) {
+            g.V(v1Id).repeat(__.bothE('created').except('e').aggregate('e').otherV).emit.path
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_asXaX_outXcreatedX_inXcreatedX_exceptXaX_name(final Object v1Id) {
+            g.V(v1Id).as('a').out('created').in('created').except('a').name
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends ExceptTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_exceptXg_v2X(final Object v1Id, final Object v2Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out.except(g.V(${v2Id}).next())", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_aggregateXxX_out_exceptXxX(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out.aggregate('x').out.except('x')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_outXcreatedX_inXcreatedX_exceptXg_v1X_name(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out('created').in('created').except(g.V(${v1Id}).next()).values('name')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_exceptXg_V_toListX() {
+            ComputerTestHelper.compute("g.V.out.except(g.V.toList())", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_exceptXX() {
+            ComputerTestHelper.compute("g.V.out.except([])", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_VX1X_repeatXbothEXcreatedX_exceptXeX_aggregateXeX_otherVX_emit_path(
+                final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).repeat(__.bothE('created').except('e').aggregate('e').otherV).emit.path", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_asXaX_outXcreatedX_inXcreatedX_exceptXaX_name(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).as('a').out('created').in('created').except('a').name", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyFilterTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyFilterTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyFilterTest.groovy
new file mode 100644
index 0000000..6b854eb
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyFilterTest.groovy
@@ -0,0 +1,179 @@
+/*
+ * 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.computer.ComputerTestHelper
+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
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyFilterTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends FilterTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXfalseX() {
+            g.V.filter { false }
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXtrueX() {
+            g.V.filter { true }
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXlang_eq_javaX() {
+            g.V.filter { it.property('lang').orElse("none") == 'java' }
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_filterXage_gt_30X(final Object v1Id) {
+            g.V(v1Id).filter { it.age > 30 }
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_filterXage_gt_30X(final Object v1Id) {
+            g.V(v1Id).out.filter { it.property('age').orElse(0) > 30 }
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXname_startsWith_m_OR_name_startsWith_pX() {
+            g.V.filter { it.name.startsWith('m') || it.name.startsWith('p') }
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_filterXfalseX() {
+            g.E.filter { false }
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_filterXtrueX() {
+            g.E.filter { true }
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends FilterTest {
+
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_V_filterXfalseX() {
+            super.g_V_filterXfalseX();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_V_filterXtrueX() {
+            super.g_V_filterXtrueX();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_V_filterXlang_eq_javaX() {
+            super.g_V_filterXlang_eq_javaX();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_VX1X_filterXage_gt_30X() {
+            super.g_VX1X_filterXage_gt_30X();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_VX1X_out_filterXage_gt_30X() {
+            super.g_VX1X_out_filterXage_gt_30X();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_V_filterXname_startsWith_m_OR_name_startsWith_pX() {
+            super.g_V_filterXname_startsWith_m_OR_name_startsWith_pX();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_E_filterXfalseX() {
+            super.g_E_filterXfalseX();
+        }
+
+        @Test
+        @LoadGraphWith(org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN)
+        @Override
+        public void g_E_filterXtrueX() {
+            super.g_E_filterXtrueX();
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXfalseX() {
+            ComputerTestHelper.compute("g.V.filter { false }", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXtrueX() {
+            ComputerTestHelper.compute("g.V.filter { true }", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXlang_eq_javaX() {
+            ComputerTestHelper.compute("g.V.filter { it.property('lang').orElse('none') == 'java' }", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_filterXage_gt_30X(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).filter { it.age > 30 }", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_filterXage_gt_30X(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out.filter { it.property('age').orElse(0) > 30 }", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_filterXname_startsWith_m_OR_name_startsWith_pX() {
+            ComputerTestHelper.compute("g.V.filter { it.name.startsWith('m') || it.name.startsWith('p') }", g);
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_filterXfalseX() {
+            ComputerTestHelper.compute("g.E.filter { false }", g);
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_filterXtrueX() {
+            ComputerTestHelper.compute("g.E.filter { true }", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
new file mode 100644
index 0000000..6e63e96
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
@@ -0,0 +1,68 @@
+/*
+ * 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.process.computer.ComputerTestHelper
+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.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Joshua Shinavier (http://fortytwo.net)
+ */
+public abstract class GroovyHasNotTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends HasNotTest {
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasNotXprop(final Object v1Id, final String propertyKey) {
+            g.V(v1Id).hasNot(propertyKey)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasNotXprop(final String propertyKey) {
+            g.V.hasNot(propertyKey)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_hasNotXoutXcreatedXX() {
+            return g.V().hasNot(__.out('created')).values('name');
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends HasNotTest {
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasNotXprop(final Object v1Id, final String propertyKey) {
+            ComputerTestHelper.compute("g.V(${v1Id}).hasNot('${propertyKey}')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasNotXprop(final String propertyKey) {
+            ComputerTestHelper.compute("g.V.hasNot('${propertyKey}')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_hasNotXoutXcreatedXX() {
+            ComputerTestHelper.compute("return g.V().hasNot(__.out('created')).values('name')", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
new file mode 100644
index 0000000..d4512cb
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
@@ -0,0 +1,191 @@
+/*
+ * 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.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+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.Edge
+import org.apache.tinkerpop.gremlin.structure.Vertex
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyHasTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends HasTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_outXknowsX_hasXoutXcreatedXX_name() {
+            g.V.out('knows').has(__.out('created')).name
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasXkeyX(final Object v1Id, final String key) {
+            g.V(v1Id).has(key)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasXname_markoX(final Object v1Id) {
+            g.V(v1Id).has('name', 'marko')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXname_markoX() {
+            g.V.has('name', 'marko')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXname_blahX() {
+            g.V.has('name', 'blah')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXblahX() {
+            g.V.has('blah')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasXage_gt_30X(final Object v1Id) {
+            g.V(v1Id).has('age', Compare.gt, 30)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2X(final Object v1Id, final Object v2Id) {
+            g.V(v1Id).out.hasId(v2Id)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXage_gt_30X() {
+            g.V.has('age', Compare.gt, 30)
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_EX7X_hasLabelXknowsX(final Object e7Id) {
+            g.E(e7Id).hasLabel('knows')
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_hasLabelXknowsX() {
+            g.E.hasLabel('knows')
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_hasLabelXuses_traversesX() {
+            g.E.hasLabel('uses', 'traverses')
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_V_hasLabelXperson_software_blahX() {
+            g.V.hasLabel("person", "software", 'blah');
+        }
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_hasXperson_name_markoX_age() {
+            g.V.has('person', 'name', 'marko').age;
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outE_hasXweight_inside_0_06X_inV(final Object v1Id) {
+            g.V(v1Id).outE.has('weight', Compare.inside, [0.0d, 0.6d]).inV
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends HasTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_outXknowsX_hasXoutXcreatedXX_name() {
+            ComputerTestHelper.compute("g.V.out('knows').has(__.out('created')).name", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasXkeyX(final Object v1Id, final String key) {
+            ComputerTestHelper.compute("g.V(${v1Id}).has('${key}')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasXname_markoX(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).has('name', 'marko')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXname_markoX() {
+            ComputerTestHelper.compute("g.V.has('name', 'marko')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXname_blahX() {
+            ComputerTestHelper.compute(" g.V.has('name', 'blah')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXblahX() {
+            ComputerTestHelper.compute("g.V.has('blah')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_hasXage_gt_30X(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).has('age', Compare.gt, 30)", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2X(final Object v1Id, final Object v2Id) {
+            ComputerTestHelper.compute(" g.V(${v1Id}).out.hasId(${v2Id})", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXage_gt_30X() {
+            ComputerTestHelper.compute("g.V.has('age', Compare.gt, 30)", g);
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_EX7X_hasLabelXknowsX(final Object e7Id) {
+            ComputerTestHelper.compute(" g.E(${e7Id}).hasLabel('knows')", g);
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_hasLabelXknowsX() {
+            ComputerTestHelper.compute("g.E.hasLabel('knows')", g);
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_hasLabelXuses_traversesX() {
+            ComputerTestHelper.compute("g.E.hasLabel('uses', 'traverses')", g);
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_V_hasLabelXperson_software_blahX() {
+            ComputerTestHelper.compute("g.V.hasLabel('person', 'software', 'blah')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_hasXperson_name_markoX_age() {
+            ComputerTestHelper.compute("g.V.has('person', 'name', 'marko').age", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outE_hasXweight_inside_0_06X_inV(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).outE.has('weight', Compare.inside, [0.0d, 0.6d]).inV", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyIsTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyIsTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyIsTest.groovy
new file mode 100644
index 0000000..6e57af9
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyIsTest.groovy
@@ -0,0 +1,90 @@
+/*
+ * 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.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+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.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class GroovyIsTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends IsTest {
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_valuesXageX_isX32X() {
+            return g.V().values('age').is(32);
+        }
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_valuesXageX_isXlte_30X() {
+            return g.V().values('age').is(Compare.lte, 30);
+        }
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_valuesXageX_isXgte_29X_isXlt_34X() {
+            return g.V().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');
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends IsTest {
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_valuesXageX_isX32X() {
+            ComputerTestHelper.compute("g.V().values('age').is(32)", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_valuesXageX_isXlte_30X() {
+            ComputerTestHelper.compute("g.V().values('age').is(Compare.lte, 30)", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Integer> get_g_V_valuesXageX_isXgte_29X_isXlt_34X() {
+            ComputerTestHelper.compute("g.V().values('age').is(Compare.gte, 29).is(Compare.lt, 34)", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX() {
+            ComputerTestHelper.compute("g.V().has(__.in('created').count().is(1l)).values('name')", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_hasXinXcreatedX_count_isXgte_2XX_valuesXnameX() {
+            ComputerTestHelper.compute("g.V().has(__.in('created').count().is(Compare.gte, 2l)).values('name')", g)
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyOrTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyOrTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyOrTest.groovy
new file mode 100644
index 0000000..7ce8fec
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyOrTest.groovy
@@ -0,0 +1,65 @@
+/*
+ * 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.process.computer.ComputerTestHelper
+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 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 GroovyOrTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends OrTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_orXhasXage_gt_27X__outE_count_gte_2X_name() {
+            g.V.or(has('age', gt, 27), outE().count.gte(2l)).name
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_orXoutEXknowsX__hasXlabel_softwareX_or_hasXage_gte_35XX_name() {
+            g.V.or(outE('knows'), has(T.label, 'software') | has('age', gte, 35)).name
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends OrTest {
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_orXhasXage_gt_27X__outE_count_gte_2X_name() {
+            ComputerTestHelper.compute("g.V.or(has('age', gt, 27), outE().count.gte(2l)).name", g)
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_orXoutEXknowsX__hasXlabel_softwareX_or_hasXage_gte_35XX_name() {
+            ComputerTestHelper.compute("g.V.or(outE('knows'), has(T.label, 'software') | has('age', gte, 35)).name", g)
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
new file mode 100644
index 0000000..a7d4cde
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRangeTest.groovy
@@ -0,0 +1,196 @@
+/*
+ * 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.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.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.structure.Vertex
+import org.junit.Test
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyRangeTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends RangeTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_limitX2X(final Object v1Id) {
+            g.V(v1Id).out.limit(2)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_localXoutE_limitX1X_inVX_limitX3X() {
+            g.V.local(__.outE.limit(3)).inV.limit(3)
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV(final Object v1Id) {
+            g.V(v1Id).out('knows').outE('created')[0].inV()
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X(final Object v1Id) {
+            g.V(v1Id).out('knows').out('created')[0]
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X(final Object v1Id) {
+            g.V(v1Id).out('created').in('created')[1..3]
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV(final Object v1Id) {
+            g.V(v1Id).out('created').inE('created')[1..3].outV
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_rangeX5_11X() {
+            g.V().repeat(__.both).times(3)[5..11];
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by() {
+            g.V().hasLabel('software').as('s').local(__.inE('created').values('weight').fold().limit(Scope.local, 1)).as('w').select().by('name').by()
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by() {
+            g.V().hasLabel('software').as('s').local(__.inE('created').values('weight').fold().range(Scope.local, 1, 3)).as('w').select().by('name').by()
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends RangeTest {
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_VX1X_out_limitX2X() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_V_localXoutE_limitX1X_inVX_limitX3X() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_V_repeatXbothX_timesX3X_rangeX5_11X() {
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        void g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by() {
+
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        void g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by() {
+            // TODO: the traversal should work in computer mode, but throws a ClassCastException
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_VX1X_out_limitX2X(Object v1Id) {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_V_localXoutE_limitX1X_inVX_limitX3X() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outEXcreatedX_rangeX0_1X_inV(Object v1Id) {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_VX1X_outXknowsX_outXcreatedX_rangeX0_1X(Object v1Id) {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_rangeX1_3X(Object v1Id) {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inEXcreatedX_rangeX1_3X_outV(Object v1Id) {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_rangeX5_11X() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_limitXlocal_1XX_asXwX_select_byXnameX_by() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXsoftwareX_asXsX_localXinEXcreatedX_valuesXweightX_fold_rangeXlocal_1_3XX_asXwX_select_byXnameX_by() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRetainTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRetainTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRetainTest.groovy
new file mode 100644
index 0000000..0c271de
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyRetainTest.groovy
@@ -0,0 +1,67 @@
+/*
+ * 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.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine
+import org.apache.tinkerpop.gremlin.process.UseEngine
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovyRetainTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends RetainTest {
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_retainXg_v2X(final Object v1Id, final Object v2Id) {
+            g.V(v1Id).out.retain(g.V(v2Id).next())
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_aggregateXxX_out_retainXxX(final Object v1Id) {
+            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) {
+            g.V(v1Id).as('a').out('created').in('created').retain('a').name
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends RetainTest {
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_retainXg_v2X(final Object v1Id, final Object v2Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out.retain(g.V($v2Id).next())", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_aggregateXxX_out_retainXxX(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out.aggregate('x').out.retain('x')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_asXaX_outXcreatedX_inXcreatedX_retainXaX_name(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).as('a').out('created').in('created').retain('a').name", g);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySampleTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySampleTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySampleTest.groovy
new file mode 100644
index 0000000..8cdb4fc
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySampleTest.groovy
@@ -0,0 +1,113 @@
+/*
+ * 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.process.computer.ComputerTestHelper
+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.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.structure.Edge
+import org.apache.tinkerpop.gremlin.structure.Vertex
+import org.junit.Test
+
+import static __.bothE
+import static __.sample
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovySampleTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends SampleTest {
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_sampleX1X() {
+            g.E.sample(1)
+        }
+
+        @Override
+        public Traversal<Edge, Edge> get_g_E_sampleX2X_byXweightX() {
+            g.E.sample(2).by('weight')
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
+            g.V.local(__.outE.sample(1).by('weight'))
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+            g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2))
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+            g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5))
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends SampleTest {
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_E_sampleX1X() {
+            // TODO: makes no sense when its global
+        }
+
+        @Override
+        @Test
+        @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
+        public void g_E_sampleX2X_byXweightX() {
+            // TODO: makes no sense when its global
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
+            ComputerTestHelper.compute("g.V.local(__.outE.sample(1).by('weight'))", g)
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+            ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2))", g)
+        }
+
+        @Override
+        Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+            ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5))", g)
+        }
+
+        @Override
+        Traversal<Edge, Edge> get_g_E_sampleX1X() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+
+        @Override
+        Traversal<Edge, Edge> get_g_E_sampleX2X_byXweightX() {
+            // override with nothing until the test itself is supported
+            return null
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c97e964/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySimplePathTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySimplePathTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySimplePathTest.groovy
new file mode 100644
index 0000000..b9789fe
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovySimplePathTest.groovy
@@ -0,0 +1,61 @@
+/*
+ * 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.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.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.structure.Vertex
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public abstract class GroovySimplePathTest {
+
+    @UseEngine(TraversalEngine.Type.STANDARD)
+    public static class StandardTraversals extends SimplePathTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_simplePath(final Object v1Id) {
+            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()
+        }
+    }
+
+    @UseEngine(TraversalEngine.Type.COMPUTER)
+    public static class ComputerTraversals extends SimplePathTest {
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_outXcreatedX_inXcreatedX_simplePath(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).out('created').in('created').simplePath", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Path> get_g_V_repeatXboth_simplePathX_timesX3X_path() {
+            ComputerTestHelper.compute("g.V.repeat(__.both.simplePath).times(3).path()", g);
+        }
+    }
+}