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);
+ }
+ }
+
+}