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/05/06 22:16:57 UTC

incubator-tinkerpop git commit: renamed ComparatorHolderRemovalStrategy to OrderGlobalRemovalStrategy as it ONLY applies to OrderGlobalStep. Also, fixed up all the recent strategy test case where the engine was defined after applyStrategies(). JavaDoc.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 55c6a5273 -> 00815bbe6


renamed ComparatorHolderRemovalStrategy to OrderGlobalRemovalStrategy as it ONLY applies to OrderGlobalStep. Also, fixed up all the recent strategy test case where the engine was defined after applyStrategies(). JavaDoc.


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

Branch: refs/heads/master
Commit: 00815bbe611629ad22306d3c01d1c2d68e876deb
Parents: 55c6a52
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed May 6 14:16:09 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed May 6 14:16:51 2015 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../mapreduce/TraverserMapReduce.java           |   5 +-
 .../process/traversal/TraversalStrategies.java  |   2 +-
 .../ComparatorHolderRemovalStrategy.java        |  55 ----------
 .../OrderGlobalRemovalStrategy.java             |  65 ++++++++++++
 .../AdjacentToIncidentStrategyTest.java         |   2 +-
 .../DedupBijectionStrategyTest.java             |   2 +-
 .../IdentityRemovalStrategyTest.java            |   3 +-
 .../IncidentToAdjacentStrategyTest.java         |   3 +-
 .../optimization/MatchWhereStrategyTest.java    |   3 +-
 .../OrderGlobalRemovalStrategyTest.java         | 101 +++++++++++++++++++
 .../RangeByIsCountStrategyTest.java             |   2 +-
 .../ComputerVerificationStrategyTest.java       |  84 +++++++++++++++
 13 files changed, 264 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index f46d564..53a73e1 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ TinkerPop 3.0.0.M9 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 * Added `IncidentToAdjacentStrategy` which rewrites `outE().inV()`, `inE().outV()` and `bothE().otherV()` to `out()`, `in()` and `both()` respectively.
+* Renamed `ComparatorHolderRemovalStrategy` to `OrderGlobalRemovalStrategy` as it now only applies to `OrderGlobalStep`.
 * Anonymous traversal no longer have `EmptyGraph` as their graph, but instead use `Optional<Graph>.isPresent() == false`.
 * Added `Traversal.Admin.setGraph(Graph)` as strategies that need reference to the graph, need it across all nested traversals.
 * `AbstractLambdaTraversal` is now smart about `TraversalParent` and `TraversalStrategies`.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
index dcf30e2..3e38325 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -52,14 +53,14 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Object
 
     public TraverserMapReduce(final Step traversalEndStep) {
         this.traversal = traversalEndStep.getTraversal();
-        this.comparator = Optional.ofNullable(traversalEndStep instanceof ComparatorHolder ? new ChainedComparator<Comparable>(((ComparatorHolder) traversalEndStep).getComparators()) : null);
+        this.comparator = Optional.ofNullable(traversalEndStep instanceof OrderGlobalStep ? new ChainedComparator<Comparable>(((OrderGlobalStep) traversalEndStep).getComparators()) : null);
     }
 
     @Override
     public void loadState(final Configuration configuration) {
         this.traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
         final Step endStep = this.traversal.getEndStep().getPreviousStep(); // don't get the ComputerResultStep
-        this.comparator = Optional.ofNullable(endStep instanceof ComparatorHolder ? new ChainedComparator<Comparable>(((ComparatorHolder) endStep).getComparators()) : null);
+        this.comparator = Optional.ofNullable(endStep instanceof OrderGlobalStep ? new ChainedComparator<Comparable>(((OrderGlobalStep) endStep).getComparators()) : null);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index e6f91f1..1e7dbfd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -155,7 +155,7 @@ public interface TraversalStrategies extends Serializable, Cloneable {
                     ProfileStrategy.instance(),
                     IncidentToAdjacentStrategy.instance(),
                     AdjacentToIncidentStrategy.instance(),
-                    ComparatorHolderRemovalStrategy.instance(),
+                    OrderGlobalRemovalStrategy.instance(),
                     DedupBijectionStrategy.instance(),
                     IdentityRemovalStrategy.instance(),
                     MatchWhereStrategy.instance(),

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
deleted file mode 100644
index a30be79..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/ComparatorHolderRemovalStrategy.java
+++ /dev/null
@@ -1,55 +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.strategy.optimization;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class ComparatorHolderRemovalStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
-
-    private static final ComparatorHolderRemovalStrategy INSTANCE = new ComparatorHolderRemovalStrategy();
-
-    private ComparatorHolderRemovalStrategy() {
-    }
-
-    @Override
-    public void apply(final Traversal.Admin<?, ?> traversal) {
-        if (traversal.getEngine().isStandard())
-            return;
-
-        if (TraversalHelper.hasStepOfAssignableClass(ComparatorHolder.class, traversal)) {
-            final Step endStep = traversal.getEndStep();
-            TraversalHelper.getStepsOfAssignableClass(ComparatorHolder.class, traversal)
-                    .stream()
-                    .filter(step -> step != endStep)
-                    .forEach(step -> traversal.removeStep((Step)step));
-        }
-    }
-
-    public static ComparatorHolderRemovalStrategy instance() {
-        return INSTANCE;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategy.java
new file mode 100644
index 0000000..a6a76a2
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategy.java
@@ -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.strategy.optimization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+
+/**
+ * OrderGlobalRemovalStrategy will remove all {@link OrderGlobalStep} instances in an {@link Traversal} as long as it is not the final, end-step.
+ * This strategy is only applied when the {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine} is a {@link org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine}.
+ * Mid-traversal ordering does not make sense in a distributed, parallel computation as at the next step, everything is executed in parallel again (thus, loosing the order).
+ * However, if the last step is an {@link OrderGlobalStep}, then the result set is ordered accordingly.
+ * <p/>
+ *
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @example <pre>
+ * __.order().out()             // is replaced by out() (OLAP only)
+ * __.out().order().by("name")  // is not replaced
+ * </pre>
+ */
+public final class OrderGlobalRemovalStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
+
+    private static final OrderGlobalRemovalStrategy INSTANCE = new OrderGlobalRemovalStrategy();
+
+    private OrderGlobalRemovalStrategy() {
+    }
+
+    @Override
+    public void apply(final Traversal.Admin<?, ?> traversal) {
+        if (traversal.getEngine().isStandard())
+            return;
+
+        if (TraversalHelper.hasStepOfAssignableClass(OrderGlobalStep.class, traversal)) {
+            final Step endStep = traversal.getEndStep();
+            TraversalHelper.getStepsOfAssignableClass(OrderGlobalStep.class, traversal)
+                    .stream()
+                    .filter(step -> step != endStep)
+                    .forEach(step -> traversal.removeStep((Step) step));
+        }
+    }
+
+    public static OrderGlobalRemovalStrategy instance() {
+        return INSTANCE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
index 8c4aeb5..8fb9bca 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/AdjacentToIncidentStrategyTest.java
@@ -102,8 +102,8 @@ public class AdjacentToIncidentStrategyTest {
             strategies.addStrategies(AdjacentToIncidentStrategy.instance());
 
             traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
             traversal.asAdmin().applyStrategies();
-            traversal.asAdmin().setEngine(traversalEngine);
         }
 
         public void doTest(final Traversal traversal, final Traversal optimized) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategyTest.java
index 4875139..5120881 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/DedupBijectionStrategyTest.java
@@ -105,8 +105,8 @@ public class DedupBijectionStrategyTest {
             strategies.addStrategies(DedupBijectionStrategy.instance(), IdentityRemovalStrategy.instance());
 
             traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
             traversal.asAdmin().applyStrategies();
-            traversal.asAdmin().setEngine(traversalEngine);
         }
 
         public void doTest(final Traversal traversal, final Traversal optimized) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
index 2a19104..e0950ae 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IdentityRemovalStrategyTest.java
@@ -105,8 +105,9 @@ public class IdentityRemovalStrategyTest {
             strategies.addStrategies(IdentityRemovalStrategy.instance());
 
             traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
             traversal.asAdmin().applyStrategies();
-            traversal.asAdmin().setEngine(traversalEngine);
+
         }
 
         public void doTest(final Traversal traversal, final Traversal optimized) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
index 37b5ae4..1afcda9 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/IncidentToAdjacentStrategyTest.java
@@ -102,8 +102,9 @@ public class IncidentToAdjacentStrategyTest {
             strategies.addStrategies(IncidentToAdjacentStrategy.instance());
 
             traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
             traversal.asAdmin().applyStrategies();
-            traversal.asAdmin().setEngine(traversalEngine);
+
         }
 
         public void doTest(final Traversal traversal, final Traversal optimized) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategyTest.java
index 28b6f6e..39a8cc8 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategyTest.java
@@ -105,8 +105,9 @@ public class MatchWhereStrategyTest {
             strategies.addStrategies(MatchWhereStrategy.instance(), IdentityRemovalStrategy.instance());
 
             traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
             traversal.asAdmin().applyStrategies();
-            traversal.asAdmin().setEngine(traversalEngine);
+
         }
 
         public void doTest(final Traversal traversal, final Traversal optimized) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategyTest.java
new file mode 100644
index 0000000..c0721b3
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/OrderGlobalRemovalStrategyTest.java
@@ -0,0 +1,101 @@
+/*
+ *
+ *  * 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.strategy.optimization;
+
+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.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+@RunWith(Enclosed.class)
+public class OrderGlobalRemovalStrategyTest {
+
+    @RunWith(Parameterized.class)
+    public static class ComputerTest extends OrderGlobalRemovalStrategyTest.AbstractOrderGlobalRemovalStrategyTest {
+
+        @Parameterized.Parameters(name = "{0}")
+        public static Iterable<Object[]> data() {
+            return generateTestParameters();
+        }
+
+        @Parameterized.Parameter(value = 0)
+        public Traversal original;
+
+        @Parameterized.Parameter(value = 1)
+        public Traversal optimized;
+
+        @Before
+        public void setup() {
+            this.traversalEngine = mock(TraversalEngine.class);
+            when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
+        }
+
+        @Test
+        public void shouldApplyStrategy() {
+            doTest(original, optimized);
+        }
+    }
+
+    private static abstract class AbstractOrderGlobalRemovalStrategyTest {
+
+        protected TraversalEngine traversalEngine;
+
+        void applyOrderGlobalRemovalStrategy(final Traversal traversal) {
+            final TraversalStrategies strategies = new DefaultTraversalStrategies();
+            strategies.addStrategies(OrderGlobalRemovalStrategy.instance());
+            traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
+            traversal.asAdmin().applyStrategies();
+        }
+
+        public void doTest(final Traversal traversal, final Traversal optimized) {
+            applyOrderGlobalRemovalStrategy(traversal);
+            assertEquals(optimized.toString(), traversal.toString());
+        }
+
+        static Iterable<Object[]> generateTestParameters() {
+
+            return Arrays.asList(new Traversal[][]{
+                    {__.out().order().out(), __.out().out()},
+                    {__.out().order().order().out(), __.out().out()},
+                    {__.out().order(), __.out().order()},
+                    {__.out().order(Scope.local).out(), __.out().order(Scope.local).out()},
+            });
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
index fff8a8e..1d3c884 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
@@ -141,8 +141,8 @@ public class RangeByIsCountStrategyTest {
             strategies.addStrategies(RangeByIsCountStrategy.instance());
 
             traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
             traversal.asAdmin().applyStrategies();
-            traversal.asAdmin().setEngine(traversalEngine);
         }
 
         public void doTest(final Object predicate, final long expectedHighRange) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/00815bbe/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
new file mode 100644
index 0000000..72a7b5d
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategyTest.java
@@ -0,0 +1,84 @@
+/*
+ *
+ *  * 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.strategy.verification;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+@RunWith(Parameterized.class)
+public class ComputerVerificationStrategyTest {
+
+    private TraversalEngine traversalEngine;
+
+    @Before
+    public void setup() {
+        this.traversalEngine = mock(TraversalEngine.class);
+        when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
+    }
+
+    @Parameterized.Parameters(name = "{0}")
+    public static Iterable<Object[]> data() {
+        return Arrays.asList(new Object[][]{
+                {"__.out().union(__.out().count(),__.in().count())", __.out().union(__.out().count(), __.in().count())},
+                {"__.has(__.out().values(\"name\"))", __.has(__.out().values("name"))},
+                {"__.groupCount(\"a\").out().cap(\"a\").count()", __.groupCount("a").out().cap("a").count()},
+
+        });
+    }
+
+    @Parameterized.Parameter(value = 0)
+    public String name;
+
+    @Parameterized.Parameter(value = 1)
+    public Traversal traversal;
+
+    @Test
+    public void shouldNotAllowLambdaSteps() {
+        try {
+            final TraversalStrategies strategies = new DefaultTraversalStrategies();
+            strategies.addStrategies(ComputerVerificationStrategy.instance());
+            traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().setEngine(this.traversalEngine);
+            traversal.asAdmin().applyStrategies();
+            fail("The strategy should not allow lambdas: " + this.traversal);
+        } catch (IllegalStateException ise) {
+           assertTrue(true);
+        }
+    }
+
+}