Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1312 3f9a256db -> e242b4409


More robust pattern for `RangeByIsCountStrategy`.


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

Branch: refs/heads/TINKERPOP-1312
Commit: c99a1950bd15b9b9c2bb58b52cce360f41e15ae4
Parents: 3f9a256
Author: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Authored: Thu May 26 11:03:52 2016 +0200
Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Committed: Thu May 26 11:03:52 2016 +0200

----------------------------------------------------------------------
 .../RangeByIsCountStrategyTest.java             | 180 +++----------------
 1 file changed, 23 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c99a1950/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 a72df8e..b6d0e27 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
@@ -22,11 +22,7 @@ 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.step.filter.NotStep;
-import 
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
-import 
org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
@@ -34,10 +30,7 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
 import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
 import static org.apache.tinkerpop.gremlin.process.traversal.P.gt;
 import static org.apache.tinkerpop.gremlin.process.traversal.P.gte;
 import static org.apache.tinkerpop.gremlin.process.traversal.P.inside;
@@ -67,39 +60,10 @@ public class RangeByIsCountStrategyTest {
         }
 
         @Parameterized.Parameter(value = 0)
-        public String name;
+        public Traversal original;
 
         @Parameterized.Parameter(value = 1)
-        public Object predicate;
-
-        @Parameterized.Parameter(value = 2)
-        public long expectedHighRange;
-
-        @Before
-        public void setup() {
-            this.traversalEngine = mock(TraversalEngine.class);
-            
when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.STANDARD);
-        }
-
-        @Test
-        public void shouldApplyStrategy() {
-            doTest(predicate, expectedHighRange);
-        }
-    }
-
-    @RunWith(Parameterized.class)
-    public static class StandardNotTest extends 
AbstractRangeByIsCountStrategyTest {
-
-        @Parameterized.Parameters(name = "{0}")
-        public static Iterable<Object[]> data() {
-            return generateNotTestParameters();
-        }
-
-        @Parameterized.Parameter(value = 0)
-        public String name;
-
-        @Parameterized.Parameter(value = 1)
-        public Object predicate;
+        public Traversal optimized;
 
         @Before
         public void setup() {
@@ -109,7 +73,7 @@ public class RangeByIsCountStrategyTest {
 
         @Test
         public void shouldApplyStrategy() {
-            doTest(predicate);
+            doTest(original, optimized);
         }
     }
 
@@ -122,39 +86,10 @@ public class RangeByIsCountStrategyTest {
         }
 
         @Parameterized.Parameter(value = 0)
-        public String name;
-
-        @Parameterized.Parameter(value = 1)
-        public Object predicate;
-
-        @Parameterized.Parameter(value = 2)
-        public long expectedHighRange;
-
-        @Before
-        public void setup() {
-            this.traversalEngine = mock(TraversalEngine.class);
-            
when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
-        }
-
-        @Test
-        public void shouldApplyStrategy() {
-            doTest(predicate, expectedHighRange);
-        }
-    }
-
-    @RunWith(Parameterized.class)
-    public static class ComputerNotTest extends 
AbstractRangeByIsCountStrategyTest {
-
-        @Parameterized.Parameters(name = "{0}")
-        public static Iterable<Object[]> data() {
-            return generateNotTestParameters();
-        }
-
-        @Parameterized.Parameter(value = 0)
-        public String name;
+        public Traversal original;
 
         @Parameterized.Parameter(value = 1)
-        public Object predicate;
+        public Traversal optimized;
 
         @Before
         public void setup() {
@@ -164,47 +99,7 @@ public class RangeByIsCountStrategyTest {
 
         @Test
         public void shouldApplyStrategy() {
-            doTest(predicate);
-        }
-    }
-
-    public static class SpecificComputerTest extends 
AbstractRangeByIsCountStrategyTest {
-
-        @Before
-        public void setup() {
-            this.traversalEngine = mock(TraversalEngine.class);
-            
when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
-        }
-
-        @Test
-        public void nestedCountEqualsOneShouldLimitToTwo() {
-            final AtomicInteger counter = new AtomicInteger(0);
-            final Traversal traversal = 
__.out().where(__.outE("created").count().is(1));
-            applyRangeByIsCountStrategy(traversal);
-
-            final TraversalFilterStep filterStep = 
TraversalHelper.getStepsOfClass(TraversalFilterStep.class, 
traversal.asAdmin()).stream().findFirst().get();
-            final Traversal nestedTraversal = (Traversal) 
filterStep.getLocalChildren().get(0);
-            TraversalHelper.getStepsOfClass(RangeGlobalStep.class, 
nestedTraversal.asAdmin()).stream().forEach(step -> {
-                assertEquals(0, step.getLowRange());
-                assertEquals(2, step.getHighRange());
-                counter.incrementAndGet();
-            });
-            assertEquals(1, counter.get());
-        }
-
-        @Test
-        public void nestedCountEqualsNullShouldUseNotStep() {
-            final AtomicInteger counter = new AtomicInteger(0);
-            final Traversal traversal = 
__.out().where(__.outE("created").count().is(0));
-            applyRangeByIsCountStrategy(traversal);
-
-            final TraversalFilterStep filterStep = 
TraversalHelper.getStepsOfClass(TraversalFilterStep.class, 
traversal.asAdmin()).stream().findFirst().get();
-            final Traversal nestedTraversal = (Traversal) 
filterStep.getLocalChildren().get(0);
-            TraversalHelper.getStepsOfClass(NotStep.class, 
nestedTraversal.asAdmin()).stream().forEach(step -> {
-                assertEquals(__.outE("created"), 
step.getLocalChildren().get(0));
-                counter.incrementAndGet();
-            });
-            assertEquals(1, counter.get());
+            doTest(original, optimized);
         }
     }
 
@@ -212,7 +107,7 @@ public class RangeByIsCountStrategyTest {
 
         protected TraversalEngine traversalEngine;
 
-        void applyRangeByIsCountStrategy(final Traversal traversal) {
+        void applyAdjacentToIncidentStrategy(final Traversal traversal) {
             final TraversalStrategies strategies = new 
DefaultTraversalStrategies();
             strategies.addStrategies(RangeByIsCountStrategy.instance());
 
@@ -221,55 +116,26 @@ public class RangeByIsCountStrategyTest {
             traversal.asAdmin().applyStrategies();
         }
 
-        public void doTest(final Object predicate, final long 
expectedHighRange) {
-            final AtomicInteger counter = new AtomicInteger(0);
-            final Traversal traversal = __.out().count().is(predicate);
-
-            applyRangeByIsCountStrategy(traversal);
-
-            final List<RangeGlobalStep> steps = 
TraversalHelper.getStepsOfClass(RangeGlobalStep.class, traversal.asAdmin());
-            assertEquals(1, steps.size());
-
-            steps.forEach(step -> {
-                assertEquals(0, step.getLowRange());
-                assertEquals(expectedHighRange, step.getHighRange());
-                counter.incrementAndGet();
-            });
-
-            assertEquals(1, counter.intValue());
-        }
-
-        public void doTest(final Object predicate) {
-            final Traversal traversal = __.out().count().is(predicate);
-
-            applyRangeByIsCountStrategy(traversal);
-
-            final List<NotStep> steps = 
TraversalHelper.getStepsOfClass(NotStep.class, traversal.asAdmin());
-            assertEquals(1, steps.size());
-
-            steps.forEach(step -> assertEquals(__.out(), 
step.getLocalChildren().get(0)));
+        public void doTest(final Traversal traversal, final Traversal 
optimized) {
+            applyAdjacentToIncidentStrategy(traversal);
+            assertEquals(optimized, traversal);
         }
 
         static Iterable<Object[]> generateTestParameters() {
 
-            return Arrays.asList(new Object[][]{
-                    {"countNotEqualsFourShouldLimitToFive", neq(4l), 5l},
-                    {"countLessThanOrEqualThreeShouldLimitToFour", lte(3l), 
4l},
-                    {"countLessThanThreeShouldLimitToThree", lt(3l), 3l},
-                    {"countGreaterThanTwoShouldLimitToThree", gt(2l), 3l},
-                    {"countGreaterThanOrEqualTwoShouldLimitToTwo", gte(2l), 
2l},
-                    {"countInsideTwoAndFourShouldLimitToFour", inside(2l, 4l), 
4l},
-                    {"countOutsideTwoAndFourShouldLimitToFive", outside(2l, 
4l), 5l},
-                    {"countWithinTwoSixFourShouldLimitToSeven", within(2l, 6l, 
4l), 7l},
-                    {"countWithoutTwoSixFourShouldLimitToSix", without(2l, 6l, 
4l), 6l}});
-        }
-
-        static Iterable<Object[]> generateNotTestParameters() {
-
-            return Arrays.asList(new Object[][]{
-                    {"countEqualsNullShouldUseNotStep", eq(0l)},
-                    {"countLessThanOneShouldUseNotStep", lt(1l)},
-                    {"countLessThanOrEqualNullShouldUseNotStep", lte(0l)}});
+            return Arrays.asList(new Traversal[][]{
+                    {__.out().count().is(0), __.not(__.out())},
+                    {__.out().count().is(lt(1)), __.not(__.out())},
+                    {__.out().count().is(lte(0)), __.not(__.out())},
+                    {__.out().count().is(neq(4)), 
__.out().limit(5).count().is(neq(4))},
+                    {__.out().count().is(lte(3)), 
__.out().limit(4).count().is(lte(3))},
+                    {__.out().count().is(lt(3)), 
__.out().limit(3).count().is(lt(3))},
+                    {__.out().count().is(gt(2)), 
__.out().limit(3).count().is(gt(2))},
+                    {__.out().count().is(gte(2)), 
__.out().limit(2).count().is(gte(2))},
+                    {__.out().count().is(inside(2, 4)), 
__.out().limit(4).count().is(inside(2, 4))},
+                    {__.out().count().is(outside(2, 4)), 
__.out().limit(5).count().is(outside(2, 4))},
+                    {__.out().count().is(within(2, 6, 4)), 
__.out().limit(7).count().is(within(2, 6, 4))},
+                    {__.out().count().is(without(2, 6, 4)), 
__.out().limit(6).count().is(without(2, 6, 4))}});
         }
     }
 }

Reply via email to