You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/04/10 19:57:03 UTC

[1/3] incubator-tinkerpop git commit: removed back() step in favor of single label select()-step. Provides the same behavior but there are two benefits to select() -- 1) it will try and NOT use path calculations if possible in OLTP. 2) it supports by() m

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP3-581 a4c62be7a -> 3aa7e2153


removed back() step in favor of single label select()-step. Provides the same behavior but there are two benefits to select() -- 1) it will try and NOT use path calculations if possible in OLTP. 2) it supports by() modulation. Moved all the BackTest test cases to SelectTest. All passed except one which @dkuppitz is looking into right now. Validated on TinkerGraph OLTP/OLAP as well as GiraphGraphComptuer and SparkGraphComputer.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/5081a2b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/5081a2b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/5081a2b5

Branch: refs/heads/TINKERPOP3-581
Commit: 5081a2b5d36c1d492abb871ca2cd544accf9d16b
Parents: 24fd909
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Apr 10 11:18:44 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Apr 10 11:18:44 2015 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   5 +-
 docs/src/the-traversal.asciidoc                 |  34 ++-
 .../traversal/dsl/graph/GraphTraversal.java     |   5 -
 .../gremlin/process/traversal/dsl/graph/__.java |   4 -
 .../process/traversal/step/map/BackStep.java    |  64 ------
 .../traversal/traverser/util/TraverserSet.java  |   7 +-
 .../tinkerpop/gremlin/structure/Graph.java      |   4 +-
 .../step/filter/GroovyRangeTest.groovy          |  36 ---
 .../traversal/step/map/GroovyBackTest.groovy    | 146 ------------
 .../traversal/step/map/GroovySelectTest.groovy  | 112 +++++++++-
 .../process/GroovyProcessComputerSuite.java     |   2 -
 .../process/GroovyProcessStandardSuite.java     |   4 +-
 .../tinkerpop/gremlin/AbstractGremlinTest.java  |   2 +-
 .../gremlin/process/ProcessComputerSuite.java   |   6 +-
 .../gremlin/process/ProcessStandardSuite.java   |   4 +-
 .../traversal/step/filter/RangeTest.java        |  79 +------
 .../process/traversal/step/map/BackTest.java    | 220 -------------------
 .../process/traversal/step/map/SelectTest.java  | 183 ++++++++++++++-
 hadoop-gremlin/conf/hadoop-gryo.properties      |   3 -
 .../gremlin/hadoop/structure/io/IOClasses.java  |   2 +-
 20 files changed, 329 insertions(+), 593 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 81fa32c..793b91a 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,10 +25,11 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.M9 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-* `DetachedXXX` use the standard `structure/` exceptions for unsupported operations.
+* Removed `back()`-step as `select()`-step provides the same behavior with more intelligent optimizations and `by()`-modulation.
+* `DetachedXXX` now uses the standard `structure/` exceptions for unsupported operations.
 * Added private constructors to all `Exceptions` inner classes in the respective `structure/` interfaces.
 * Re-introduced `ReferenceXXX` to ensure a smaller data footprint in OLAP situation (`DetachedXXX` uses too much data).
-* `Attachable` now has set of static exceptions messages in an `Exceptions` inner class.
+* `Attachable` now has a set of static exception messages in an `Exceptions` inner class.
 * Added `StarGraph` which is a heap efficient representation of a vertex and its incident edges (useful for `GraphComputer` implementations).
 * `TraverserSet` uses a `FastNoSuchElementException` on `remove()` for increased performance.
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/docs/src/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/the-traversal.asciidoc b/docs/src/the-traversal.asciidoc
index 6ab181e..21adfe7 100644
--- a/docs/src/the-traversal.asciidoc
+++ b/docs/src/the-traversal.asciidoc
@@ -73,12 +73,12 @@ image:map-lambda.png[width=150,float=right]
 ----
 g.V(1).as('a').out() <1>
 g.V(1).as('a').out().map {it.path('a')} <2>
-g.V(1).as('a').out().back('a') <3>
+g.V(1).as('a').out().select('a') <3>
 ----
 
 <1> A standard outgoing traversal from vertex 1.
 <2> For each vertex outgoing adjacent to vertex 1, get the vertex at `a` (which is vertex 1).
-<3> The <<back-step,`back()`>>-step is implemented as a `map()`-step that accesses data in the historic path.
+<3> The <<select-step,`select()`>>-step is implemented as a `map()`-step that accesses data in the historic path.
 
 image:filter-lambda.png[width=160,float=right]
 [gremlin-groovy,modern]
@@ -252,21 +252,6 @@ g.V().as('a').out('created').as('b').select().by('name') <2>
 <1> Select the objects labeled "a" and "b" from the path.
 <2> Select the objects labeled "a" and "b" from the path and, for each object, project its name value.
 
-[[back-step]]
-Back Step
-~~~~~~~~~
-
-link:http://en.wikipedia.org/wiki/Functional_programming[Functional languages] make use of function composition and lazy evaluation to create complex computations from primitive operations. This is exactly what Gremlin `GraphTraversal` does. One of the differentiating aspects of Gremlin's data flow approach to graph processing is that the flow need not always go "forward," but in fact, can go back to a previously seen area of computation. Examples include <<repeat-step,`repeat()`>> as well as the `back()`-step (*map*).
-
-[gremlin-groovy,modern]
-----
-g.V().out().out()
-g.V().out().out().path()
-g.V().as('x').out().out().back('x')
-g.V().out().as('x').out().back('x')
-g.V().out().out().as('x').back('x') // pointless
-----
-
 [[by-step]]
 By Step
 ~~~~~~~
@@ -1139,7 +1124,7 @@ g.V(1).repeat(local(
 Select Step
 ~~~~~~~~~~~
 
-There are two use cases for `select()`-step (*map*).
+link:http://en.wikipedia.org/wiki/Functional_programming[Functional languages] make use of function composition and lazy evaluation to create complex computations from primitive operations. This is exactly what `Traversal` does. One of the differentiating aspects of Gremlin's data flow approach to graph processing is that the flow need not always go "forward," but in fact, can go back to a previously seen area of computation. Examples include <<path-step,`path()`>> as well as the `select()`-step (*map*). There are two general ways to use `select()`-step.
 
 . Select labeled steps within a path (as defined by `as()` in a traversal).
 . Select objects out of a `Map<String,Object>` flow (i.e. a sub-map).
@@ -1157,6 +1142,17 @@ g.V().as('a').out().as('b').out().as('c').select('a') <1>
 
 <1> If the selection is one step, no map is returned.
 
+When there is only one label selected, then a single object is returned. This is useful for stepping back in a computation and easily moving forward again on the object reverted to.
+
+[gremlin-groovy,modern]
+----
+g.V().out().out()
+g.V().out().out().path()
+g.V().as('x').out().out().select('x')
+g.V().out().as('x').out().select('x')
+g.V().out().out().as('x').select('x') // pointless
+----
+
 The second use case is best understood in terms of <<match-step,`match()`>>-step where the result of `match()` is a `Map<String,Object>` of variable bindings. However, any step that emits a `Map<String,Object>` can be selected. A contrived example is presented below.
 
 [gremlin-groovy,modern]
@@ -1172,6 +1168,8 @@ g.V().range(0, 2).as('a').map {[b:1,c:2]}.select('c') <4>
 <3> The same `List<String>` selectivity can be used as demonstrated in the previous example.
 <4> If a single selection is used, then the object is emitted not wrapped in a map. Useful for continuing the traversal process without having to do a map projection.
 
+NOTE: When executing a traversal with `select()` on a standard traversal engine (i.e. OLTP), `select()` will do its best to avoid calculating the path history and instead, will rely on a global data structure for storing the currently selected object. As such, if only a subset of the path walked is required, `select()` should be used over the more resource intensive <<path-step,`path()`>>-step.
+
 [[using-where-with-select]]
 Using Where with Select
 ^^^^^^^^^^^^^^^^^^^^^^^

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index acfd01a..9fb9083 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -61,7 +61,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeByPathStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.BackStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountLocalStep;
@@ -289,10 +288,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         return this.asAdmin().addStep(new PathStep<>(this.asAdmin()));
     }
 
-    public default <E2> GraphTraversal<S, E2> back(final String stepLabel) {
-        return this.asAdmin().addStep(new BackStep<>(this.asAdmin(), stepLabel));
-    }
-
     public default <E2> GraphTraversal<S, Map<String, E2>> match(final String startLabel, final Traversal... traversals) {
         return (GraphTraversal) this.asAdmin().addStep(new MatchStep<E, Map<String, E2>>(this.asAdmin(), startLabel, traversals));
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index f34ba71..f428d53 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -176,10 +176,6 @@ public class __ {
         return __.<A>start().path();
     }
 
-    public static <A, E2> GraphTraversal<A, E2> back(final String stepLabel) {
-        return __.<A>start().back(stepLabel);
-    }
-
     public static <A, E2> GraphTraversal<A, Map<String, E2>> match(final String startLabel, final Traversal... traversals) {
         return __.<A>start().match(startLabel, traversals);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackStep.java
deleted file mode 100644
index 9d683df..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackStep.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class BackStep<S, E> extends MapStep<S, E> implements EngineDependent {
-
-    private final String stepLabel;
-    private boolean requiresPaths = false;
-
-    public BackStep(final Traversal.Admin traversal, final String stepLabel) {
-        super(traversal);
-        this.stepLabel = stepLabel;
-    }
-
-    @Override
-    protected E map(final Traverser.Admin<S> traverser) {
-        return traverser.path(this.stepLabel);
-    }
-
-    @Override
-    public void onEngine(final TraversalEngine traversalEngine) {
-        this.requiresPaths = traversalEngine.isComputer();
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        //return this.requiresPaths ? Collections.singleton(TraverserRequirement.PATH) : Collections.singleton(TraverserRequirement.PATH_ACCESS);
-        return Collections.singleton(TraverserRequirement.PATH); // TODO: if the traversal isn't nested, path access works
-    }
-
-    @Override
-    public String toString() {
-        return TraversalHelper.makeStepString(this, this.stepLabel);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/TraverserSet.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/TraverserSet.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/TraverserSet.java
index 60fee75..c44c623 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/TraverserSet.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/TraverserSet.java
@@ -97,8 +97,11 @@ public class TraverserSet<S> extends AbstractSet<Traverser.Admin<S>> implements
     @Override
     public Traverser.Admin<S> remove() {  // pop, exception if empty
         final Iterator<Traverser.Admin<S>> iterator = this.map.values().iterator();
-        if (!iterator.hasNext()) throw FastNoSuchElementException.instance();
-        return this.map.remove(iterator.next());
+        if (!iterator.hasNext())
+            throw FastNoSuchElementException.instance();
+        final Traverser.Admin<S> next = iterator.next();
+        iterator.remove();
+        return next;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 7eff2a8..9cbdba4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -149,8 +149,8 @@ public interface Graph extends AutoCloseable {
 
     public GraphComputer compute() throws IllegalArgumentException;
 
-    public default <C extends TraversalSource> C traversal(final TraversalSource.Builder<C> contextBuilder) {
-        return contextBuilder.create(this);
+    public default <C extends TraversalSource> C traversal(final TraversalSource.Builder<C> sourceBuilder) {
+        return sourceBuilder.create(this);
     }
 
     public default GraphTraversalSource traversal() {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/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
index a7d4cde..c8611ea 100644
--- 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
@@ -68,16 +68,6 @@ public abstract class GroovyRangeTest {
         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)
@@ -126,20 +116,6 @@ public abstract class GroovyRangeTest {
         }
 
         @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
@@ -180,17 +156,5 @@ public abstract class GroovyRangeTest {
             // 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/5081a2b5/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyBackTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyBackTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyBackTest.groovy
deleted file mode 100644
index 620d257..0000000
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyBackTest.groovy
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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.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.Edge
-import org.apache.tinkerpop.gremlin.structure.Vertex
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public abstract class GroovyBackTest {
-
-    @UseEngine(TraversalEngine.Type.STANDARD)
-    public static class StandardTraversals extends BackTest {
-
-        @Override
-        public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_backXhereX(final Object v1Id) {
-            g.V(v1Id).as('here').out.back('here')
-        }
-
-        @Override
-        public Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX(final Object v4Id) {
-            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) {
-            g.V(v4Id).out.as('here').has('lang', 'java').back('here').name
-        }
-
-        @Override
-        public Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_backXhereX(final Object v1Id) {
-            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) {
-            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) {
-            g.V(v1Id).outE('knows').as('here').has('weight', 1.0d).inV.has('name', 'josh').back('here')
-        }
-
-        @Override
-        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_backXhereX(
-                final Object v1Id) {
-            g.V(v1Id).outE("knows").as('here').has('weight', 1.0d).as('fake').inV.has("name", 'josh').back('here')
-        }
-
-        @Override
-        public Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_backXhereX() {
-            g.V().as("here").out.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() {
-            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');
-        }
-    }
-
-    @UseEngine(TraversalEngine.Type.COMPUTER)
-    public static class ComputerTraversals extends BackTest {
-
-        @Override
-        public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_backXhereX(final Object v1Id) {
-            ComputerTestHelper.compute("g.V(${v1Id}).as('here').out.back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX(final Object v4Id) {
-            ComputerTestHelper.compute("g.V(${v4Id}).out.as('here').has('lang', 'java').back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_backXhereX_name(
-                final Object v4Id) {
-            ComputerTestHelper.compute("g.V(${v4Id}).out.as('here').has('lang', 'java').back('here').name", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_backXhereX(final Object v1Id) {
-            ComputerTestHelper.compute("g.V(${v1Id}).outE.as('here').inV.has('name', 'vadas').back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_backXhereX(
-                final Object v1Id) {
-            ComputerTestHelper.compute("g.V(${v1Id}).outE('knows').has('weight', 1.0d).as('here').inV.has('name', 'josh').back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_backXhereX(
-                final Object v1Id) {
-            ComputerTestHelper.compute("g.V(${v1Id}).outE('knows').as('here').has('weight', 1.0d).inV.has('name','josh').back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_backXhereX(
-                final Object v1Id) {
-            ComputerTestHelper.compute("g.V(${v1Id}).outE('knows').as('here').has('weight', 1.0d).as('fake').inV.has('name','josh').back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_backXhereX() {
-            ComputerTestHelper.compute("g.V().as('here').out.name.back('here')", g);
-        }
-
-        @Override
-        public Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_backXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_backXprojectXX_groupCount_byXnameX() {
-            ComputerTestHelper.compute("""
-            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');
-            """, g)
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
index a7d3894..8c2c75f 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
@@ -23,6 +23,7 @@ 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.Order
 import org.apache.tinkerpop.gremlin.structure.Vertex
 import org.junit.Test
@@ -93,6 +94,60 @@ public abstract class GroovySelectTest {
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by() {
             return g.V().hasLabel('person').as('person').local(__.bothE().label().groupCount()).as('relations').select().by('name').by()
         }
+
+        //
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id) {
+            g.V(v1Id).as('here').out.select('here')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX(final Object v4Id) {
+            g.V(v4Id).out.as('here').has('lang', 'java').select('here')
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX_name(
+                final Object v4Id) {
+            g.V(v4Id).out.as('here').has('lang', 'java').select('here').name
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX(final Object v1Id) {
+            g.V(v1Id).outE.as('here').inV.has('name', 'vadas').select('here')
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_selectXhereX(
+                final Object v1Id) {
+            g.V(v1Id).outE('knows').has('weight', 1.0d).as('here').inV.has('name', 'josh').select('here')
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_selectXhereX(
+                final Object v1Id) {
+            g.V(v1Id).outE('knows').as('here').has('weight', 1.0d).inV.has('name', 'josh').select('here')
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_selectXhereX(
+                final Object v1Id) {
+            g.V(v1Id).outE("knows").as('here').has('weight', 1.0d).as('fake').inV.has("name", 'josh').select('here')
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_selectXhereX() {
+            g.V().as("here").out.name.select("here");
+        }
+
+
+        @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX() {
+            g.V.out('created')
+                    .union(__.as('project').in('created').has('name', 'marko').select('project'),
+                    __.as('project').in('created').in('knows').has('name', 'marko').select('project')).groupCount().by('name');
+        }
     }
 
     @UseEngine(TraversalEngine.Type.COMPUTER)
@@ -129,7 +184,7 @@ public abstract class GroovySelectTest {
         @Override
         @Test
         @org.junit.Ignore("Traversal not supported by ComputerTraversalEngine.computer")
-        void g_V_asXaX_name_order_asXbX_select_byXnameX_byXitX() {
+        public void g_V_asXaX_name_order_asXbX_select_byXnameX_byXitX() {
         }
 
         @Override
@@ -202,5 +257,60 @@ public abstract class GroovySelectTest {
             // override with nothing until the test itself is supported
             return null
         }
+
+        //
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).as('here').out.select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX(final Object v4Id) {
+            ComputerTestHelper.compute("g.V(${v4Id}).out.as('here').has('lang', 'java').select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX_name(
+                final Object v4Id) {
+            ComputerTestHelper.compute("g.V(${v4Id}).out.as('here').has('lang', 'java').select('here').name", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX(final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).outE.as('here').inV.has('name', 'vadas').select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_selectXhereX(
+                final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).outE('knows').has('weight', 1.0d).as('here').inV.has('name', 'josh').select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_selectXhereX(
+                final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).outE('knows').as('here').has('weight', 1.0d).inV.has('name','josh').select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_selectXhereX(
+                final Object v1Id) {
+            ComputerTestHelper.compute("g.V(${v1Id}).outE('knows').as('here').has('weight', 1.0d).as('fake').inV.has('name','josh').select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_selectXhereX() {
+            ComputerTestHelper.compute("g.V().as('here').out.name.select('here')", g);
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX() {
+            ComputerTestHelper.compute("""
+            g.V.out('created')
+                    .union(__.as('project').in('created').has('name', 'marko').select('project'),
+                    __.as('project').in('created').in('knows').has('name', 'marko').select('project')).groupCount().by('name');
+            """, g)
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index 90c1a7f..6fbf70c 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@ -41,7 +41,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyRangeTes
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovySampleTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovySimplePathTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyWhereTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyBackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyCoalesceTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyCountTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyFoldTest;
@@ -105,7 +104,6 @@ public class GroovyProcessComputerSuite extends ProcessComputerSuite {
             GroovyWhereTest.ComputerTraversals.class,
 
             // map
-            GroovyBackTest.ComputerTraversals.class,
             GroovyCoalesceTest.ComputerTraversals.class,
             GroovyCountTest.ComputerTraversals.class,
             GroovyFoldTest.ComputerTraversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
index 962f572..67bd21b 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessStandardSuite.java
@@ -32,6 +32,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyAndTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyCoinTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyCyclicPathTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyDedupTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyDropTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyExceptTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyFilterTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyHasNotTest;
@@ -45,10 +46,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovySimplePa
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyWhereTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyAddEdgeTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyAddVertexTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyBackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyCoalesceTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyCountTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.GroovyDropTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyFoldTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMapTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMatchTest;
@@ -115,7 +114,6 @@ public class GroovyProcessStandardSuite extends ProcessStandardSuite {
             // map
             GroovyAddEdgeTest.StandardTraversals.class,
             GroovyAddVertexTest.StandardTraversals.class,
-            GroovyBackTest.StandardTraversals.class,
             GroovyCoalesceTest.StandardTraversals.class,
             GroovyCountTest.StandardTraversals.class,
             GroovyFoldTest.StandardTraversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
index b1fcc42..8b0af7c 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
@@ -165,7 +165,7 @@ public abstract class AbstractGremlinTest {
     }
 
     public Object convertToEdgeId(final Graph graph, final String outVertexName, String edgeLabel, final String inVertexName) {
-        return graph.traversal().V().has("name", outVertexName).outE(edgeLabel).as("e").inV().has("name", inVertexName).<Edge>back("e").next().id();
+        return graph.traversal().V().has("name", outVertexName).outE(edgeLabel).as("e").inV().has("name", inVertexName).<Edge>select("e").next().id();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 1487ee8..9e693dc 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -44,7 +44,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RetainTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SampleTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SimplePathTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.BackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldTest;
@@ -68,9 +67,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategyTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategyTest;
 import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.RunnerBuilder;
 
@@ -140,7 +139,6 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
             WhereTest.Traversals.class,
 
             // map
-            BackTest.Traversals.class,
             CoalesceTest.Traversals.class,
             CountTest.Traversals.class,
             FoldTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
index c2af8e7..518273c 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
@@ -46,7 +46,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.SimplePathTest
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.BackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CoalesceTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldTest;
@@ -77,8 +76,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.PathTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategyTest;
 import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.RunnerBuilder;
@@ -148,7 +147,6 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
             // map
             AddEdgeTest.Traversals.class,
             AddVertexTest.Traversals.class,
-            BackTest.Traversals.class,
             CoalesceTest.Traversals.class,
             CountTest.Traversals.class,
             FoldTest.Traversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/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
index 31c8be3..c46658d 100644
--- 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
@@ -21,21 +21,17 @@ 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.UseEngine;
 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.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -57,10 +53,6 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
 
     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)
@@ -163,57 +155,6 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
         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 {
@@ -251,15 +192,5 @@ public abstract class RangeTest extends AbstractGremlinProcessTest {
         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/5081a2b5/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
deleted file mode 100644
index 631d2dc..0000000
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/BackTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * 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/5081a2b5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
index cc6de20..7cb07f1 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
@@ -25,6 +25,7 @@ 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.Order;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Ignore;
@@ -34,6 +35,7 @@ import java.util.*;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.CREW;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.values;
 import static org.junit.Assert.*;
 
@@ -65,6 +67,26 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by();
 
+    // below we original back()-tests
+
+    public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id);
+
+    public abstract Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX(final Object v4Id);
+
+    public abstract Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX_name(final Object v4Id);
+
+    public abstract Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX(final Object v1Id);
+
+    public abstract Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_selectXhereX(final Object v1Id);
+
+    public abstract Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_selectXhereX(final Object v1Id);
+
+    public abstract Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_selectXhereX(final Object v1Id);
+
+    public abstract Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_selectXhereX();
+
+    public abstract Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_VX1X_asXaX_outXknowsX_asXbX_select() {
@@ -114,7 +136,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    @IgnoreEngine(TraversalEngine.Type.COMPUTER)
+    //@IgnoreEngine(TraversalEngine.Type.COMPUTER)
     public void g_VX1X_asXaX_outXknowsX_asXbX_selectXaX_byXnameX() {
         final Traversal<Vertex, String> traversal = get_g_VX1X_asXaX_outXknowsX_asXbX_selectXaX_byXnameX(convertToVertexId("marko"));
         printTraversalForm(traversal);
@@ -206,8 +228,8 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     }
 
     @Test
-    @Ignore
     @LoadGraphWith(MODERN)
+    @Ignore("There is a HashMap to Element cast problem happening here for some reason in both OLTP and OLAP")  // TODO: dkuppitz this has been ignored for some time now -- don't know if the test is bad or the code is bad.
     @IgnoreEngine(TraversalEngine.Type.COMPUTER)
     public void g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by() {
         final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by();
@@ -249,6 +271,114 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
         assertEquals(4, persons.size());
     }
 
+    //
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_VX1X_asXhereX_out_selectXhereX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_VX1X_asXhereX_out_selectXhereX(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_selectXhereX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX(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_selectXhereX() {
+        final Traversal<Vertex, Edge> traversal = get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX(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_selectXhereX_name() {
+        final Traversal<Vertex, String> traversal = get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX_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_selectXhereX() {
+        final List<Traversal<Vertex, Edge>> traversals = Arrays.asList(
+                get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_selectXhereX(convertToVertexId("marko")),
+                get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_selectXhereX(convertToVertexId("marko")),
+                get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_selectXhereX(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_selectXhereX() {
+        Traversal<Vertex, Vertex> traversal = get_g_V_asXhereXout_name_selectXhereX();
+        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)
+    @IgnoreEngine(TraversalEngine.Type.STANDARD)  // TODO: dkuppitz this fails on OLTP, but passes on OLAP
+    public void g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX() {
+        List<Traversal<Vertex, Map<String, Long>>> traversals = Arrays.asList(get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_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 SelectTest {
@@ -306,5 +436,54 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by() {
             return g.V().hasLabel("person").as("person").local(__.bothE().label().groupCount()).as("relations").select().by("name").by();
         }
+
+        //
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id) {
+            return g.V(v1Id).as("here").out().select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX(final Object v4Id) {
+            return g.V(v4Id).out().as("here").has("lang", "java").select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX4X_out_asXhereX_hasXlang_javaX_selectXhereX_name(final Object v4Id) {
+            return g.V(v4Id).out().as("here").has("lang", "java").select("here").values("name");
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX(final Object v1Id) {
+            return g.V(v1Id).outE().as("here").inV().has("name", "vadas").select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_hasXweight_1X_asXhereX_inV_hasXname_joshX_selectXhereX(final Object v1Id) {
+            return g.V(v1Id).outE("knows").has("weight", 1.0d).as("here").inV().has("name", "josh").select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_inV_hasXname_joshX_selectXhereX(final Object v1Id) {
+            return g.V(v1Id).outE("knows").as("here").has("weight", 1.0d).inV().has("name", "josh").<Edge>select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_VX1X_outEXknowsX_asXhereX_hasXweight_1X_asXfakeX_inV_hasXname_joshX_selectXhereX(final Object v1Id) {
+            return g.V(v1Id).outE("knows").as("here").has("weight", 1.0d).as("fake").inV().has("name", "josh").<Edge>select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, Vertex> get_g_V_asXhereXout_name_selectXhereX() {
+            return g.V().as("here").out().values("name").select("here");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Long>> get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX() {
+            return (Traversal) g.V().out("created")
+                    .union(as("project").in("created").has("name", "marko").select("project"),
+                            as("project").in("created").in("knows").has("name", "marko").select("project")).groupCount().by("name");
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/hadoop-gremlin/conf/hadoop-gryo.properties
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/conf/hadoop-gryo.properties b/hadoop-gremlin/conf/hadoop-gryo.properties
index 428cb5c..0484327 100644
--- a/hadoop-gremlin/conf/hadoop-gryo.properties
+++ b/hadoop-gremlin/conf/hadoop-gryo.properties
@@ -35,9 +35,6 @@ mapred.map.child.java.opts=-Xmx1024m
 mapred.reduce.child.java.opts=-Xmx1024m
 giraph.numInputThreads=4
 giraph.numComputeThreads=4
-giraph.maxMessagesInMemory=100000
-# giraph.vertexOutputFormatThreadSafe=true
-# giraph.numOutputThreads=4
 # giraph.maxPartitionsInMemory=1
 # giraph.userPartitionCount=2
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5081a2b5/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/IOClasses.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/IOClasses.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/IOClasses.java
index 4efd98c..504e25d 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/IOClasses.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/IOClasses.java
@@ -30,7 +30,7 @@ import java.util.List;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class IOClasses {
+public final class IOClasses {
 
     public static List<Class> getGryoClasses(final GryoMapper mapper) {
         return mapper.getRegisteredClasses();


[3/3] incubator-tinkerpop git commit: Refactor IdManager configuration in TinkerGraph.

Posted by sp...@apache.org.
Refactor IdManager configuration in TinkerGraph.

Provides for less cut/paste of similar code and improved readability of constructor.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/3aa7e215
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/3aa7e215
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/3aa7e215

Branch: refs/heads/TINKERPOP3-581
Commit: 3aa7e215381723f29e982a54bd076816bf081e36
Parents: 975f0a1
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 10 13:56:01 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Apr 10 13:56:01 2015 -0400

----------------------------------------------------------------------
 .../tinkergraph/structure/TinkerGraph.java      | 58 ++++++++------------
 1 file changed, 22 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3aa7e215/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index 07cab24..aacc223 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -86,9 +86,9 @@ public class TinkerGraph implements Graph {
 
     private final static TinkerGraph EMPTY_GRAPH = new TinkerGraph(EMPTY_CONFIGURATION);
 
-    protected IdManager<?> vertexIdManager;
-    protected IdManager<?> edgeIdManager;
-    protected IdManager<?> vertexPropertyIdManager;
+    protected final IdManager<?> vertexIdManager;
+    protected final IdManager<?> edgeIdManager;
+    protected final IdManager<?> vertexPropertyIdManager;
 
     private final Configuration configuration;
 
@@ -97,39 +97,9 @@ public class TinkerGraph implements Graph {
      */
     private TinkerGraph(final Configuration configuration) {
         this.configuration = configuration;
-
-        final String vertexIdManagerConfigValue = configuration.getString(CONFIG_VERTEX_ID, DefaultIdManager.ANY.name());
-        try {
-            vertexIdManager = DefaultIdManager.valueOf(vertexIdManagerConfigValue);
-        } catch (IllegalArgumentException iae) {
-            try {
-                vertexIdManager = (IdManager) Class.forName(vertexIdManagerConfigValue).newInstance();
-            } catch (Exception ex) {
-                throw new IllegalStateException(String.format("Could not configure TinkerGraph vertex id manager with %s", vertexIdManagerConfigValue));
-            }
-        }
-
-        final String edgeIdManagerConfigValue = configuration.getString(CONFIG_EDGE_ID, DefaultIdManager.ANY.name());
-        try {
-            edgeIdManager = DefaultIdManager.valueOf(edgeIdManagerConfigValue);
-        } catch (IllegalArgumentException iae) {
-            try {
-                edgeIdManager = (IdManager) Class.forName(edgeIdManagerConfigValue).newInstance();
-            } catch (Exception ex) {
-                throw new IllegalStateException(String.format("Could not configure TinkerGraph edge id manager with %s", edgeIdManagerConfigValue));
-            }
-        }
-
-        final String vertexPropIdManagerConfigValue = configuration.getString(CONFIG_VERTEX_PROPERTY_ID, DefaultIdManager.ANY.name());
-        try {
-            vertexPropertyIdManager = DefaultIdManager.valueOf(vertexPropIdManagerConfigValue);
-        } catch (IllegalArgumentException iae) {
-            try {
-                vertexPropertyIdManager = (IdManager) Class.forName(vertexPropIdManagerConfigValue).newInstance();
-            } catch (Exception ex) {
-                throw new IllegalStateException(String.format("Could not configure TinkerGraph vertex property id manager with %s", vertexPropIdManagerConfigValue));
-            }
-        }
+        vertexIdManager = selectIdManager(configuration, CONFIG_VERTEX_ID, Vertex.class);
+        edgeIdManager = selectIdManager(configuration, CONFIG_EDGE_ID, Edge.class);
+        vertexPropertyIdManager = selectIdManager(configuration, CONFIG_VERTEX_PROPERTY_ID, VertexProperty.class);
     }
 
     public static TinkerGraph empty() {
@@ -426,6 +396,22 @@ public class TinkerGraph implements Graph {
     }
 
     /**
+     * Construct an {@link TinkerGraph.IdManager} from the TinkerGraph {@link Configuration}.
+     */
+    private static IdManager<?> selectIdManager(final Configuration config, final String configKey, final Class<? extends Element> clazz) {
+        final String vertexIdManagerConfigValue = config.getString(configKey, DefaultIdManager.ANY.name());
+        try {
+            return DefaultIdManager.valueOf(vertexIdManagerConfigValue);
+        } catch (IllegalArgumentException iae) {
+            try {
+                return (IdManager) Class.forName(vertexIdManagerConfigValue).newInstance();
+            } catch (Exception ex) {
+                throw new IllegalStateException(String.format("Could not configure TinkerGraph %s id manager with %s", clazz.getSimpleName(), vertexIdManagerConfigValue));
+            }
+        }
+    }
+
+    /**
      * TinkerGraph will use an implementation of this interface to generate identifiers when a user does not supply
      * them and to handle identifier conversions when querying to provide better flexibility with respect to
      * handling different data types that mean the same thing.  For example, the


[2/3] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/master' into TINKERPOP3-581

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/master' into TINKERPOP3-581


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/975f0a1b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/975f0a1b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/975f0a1b

Branch: refs/heads/TINKERPOP3-581
Commit: 975f0a1b21fe36993d506f80212fccb2f77894be
Parents: a4c62be 5081a2b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 10 13:32:12 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Apr 10 13:32:12 2015 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   5 +-
 docs/src/the-traversal.asciidoc                 |  34 ++-
 .../traversal/dsl/graph/GraphTraversal.java     |   5 -
 .../gremlin/process/traversal/dsl/graph/__.java |   4 -
 .../process/traversal/step/map/BackStep.java    |  64 ------
 .../traversal/traverser/util/TraverserSet.java  |   7 +-
 .../tinkerpop/gremlin/structure/Graph.java      |   4 +-
 .../step/filter/GroovyRangeTest.groovy          |  36 ---
 .../traversal/step/map/GroovyBackTest.groovy    | 146 ------------
 .../traversal/step/map/GroovySelectTest.groovy  | 112 +++++++++-
 .../process/GroovyProcessComputerSuite.java     |   2 -
 .../process/GroovyProcessStandardSuite.java     |   4 +-
 .../tinkerpop/gremlin/AbstractGremlinTest.java  |   2 +-
 .../gremlin/process/ProcessComputerSuite.java   |   6 +-
 .../gremlin/process/ProcessStandardSuite.java   |   4 +-
 .../traversal/step/filter/RangeTest.java        |  79 +------
 .../process/traversal/step/map/BackTest.java    | 220 -------------------
 .../process/traversal/step/map/SelectTest.java  | 183 ++++++++++++++-
 hadoop-gremlin/conf/hadoop-gryo.properties      |   3 -
 .../gremlin/hadoop/structure/io/IOClasses.java  |   2 +-
 20 files changed, 329 insertions(+), 593 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/975f0a1b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/975f0a1b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
----------------------------------------------------------------------