Merge branch 'TINKERPOP-1391' into TINKERPOP-1391-master Resolved Conflicts: CHANGELOG.asciidoc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/eeb218c4 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/eeb218c4 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/eeb218c4 Branch: refs/heads/TINKERPOP-1442-master Commit: eeb218c48b1f40734ec25f6fe257f27b8792f42e Parents: 2492a3a 5ff97ef Author: Daniel Kuppitz <daniel_kupp...@hotmail.com> Authored: Tue Sep 13 16:35:58 2016 +0200 Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com> Committed: Tue Sep 13 16:35:58 2016 +0200 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 3 ++- .../optimization/RangeByIsCountStrategy.java | 20 +++++++++++++++++--- .../RangeByIsCountStrategyTest.java | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/eeb218c4/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --cc CHANGELOG.asciidoc index 7035b5e,f01966d..506b3a9 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@@ -390,8 -26,9 +390,9 @@@ image::https://raw.githubusercontent.co TinkerPop 3.1.5 (Release Date: NOT OFFICIALLY RELEASED YET) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - + Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure. ++* Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure. + * Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly. - [[release-3-1-4]] TinkerPop 3.1.4 (Release Date: September 6, 2016) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/eeb218c4/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java ---------------------------------------------------------------------- diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java index 0e9539d,a48c0f0..99d2f75 --- 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 @@@ -43,56 -48,109 +43,58 @@@ import static org.junit.Assert.assertEq * @author Daniel Kuppitz (http://gremlin.guru) * @author Stephen Mallette (http://stephen.genoprime.com) */ -@RunWith(Enclosed.class) +@RunWith(Parameterized.class) public class RangeByIsCountStrategyTest { - @RunWith(Parameterized.class) - public static class StandardTest extends AbstractRangeByIsCountStrategyTest { + @Parameterized.Parameter(value = 0) + public Traversal original; - @Parameterized.Parameters(name = "{0}") - public static Iterable<Object[]> data() { - return generateTestParameters(); - } + @Parameterized.Parameter(value = 1) + public Traversal optimized; - @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.STANDARD); - } - - @Test - public void shouldApplyStrategy() { - doTest(original, optimized); - } + void applyRangeByIsCountStrategy(final Traversal traversal) { + final TraversalStrategies strategies = new DefaultTraversalStrategies(); + strategies.addStrategies(RangeByIsCountStrategy.instance()); + traversal.asAdmin().setStrategies(strategies); + traversal.asAdmin().applyStrategies(); } - @RunWith(Parameterized.class) - public static class ComputerTest extends AbstractRangeByIsCountStrategyTest { - - @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); - } + @Test + public void doTest() { + applyRangeByIsCountStrategy(original); + assertEquals(optimized, original); } - private static abstract class AbstractRangeByIsCountStrategyTest { - - protected TraversalEngine traversalEngine; - - void applyRangeByIsCountStrategy(final Traversal traversal) { - final TraversalStrategies strategies = new DefaultTraversalStrategies(); - strategies.addStrategies(RangeByIsCountStrategy.instance()); - - traversal.asAdmin().setStrategies(strategies); - traversal.asAdmin().setEngine(this.traversalEngine); - traversal.asAdmin().applyStrategies(); - } - - public void doTest(final Traversal traversal, final Traversal optimized) { - applyRangeByIsCountStrategy(traversal); - assertEquals(optimized, traversal); - } - - static Iterable<Object[]> generateTestParameters() { - - return Arrays.asList(new Traversal[][]{ - {__.count().is(0), __.not(__.identity())}, - {__.count().is(1), __.limit(2).count().is(1)}, - {__.out().count().is(0), __.not(__.out())}, - {__.outE().count().is(lt(1)), __.not(__.outE())}, - {__.both().count().is(lte(0)), __.not(__.both())}, - {__.store("x").count().is(0).as("a"), __.store("x").limit(1).count().is(0).as("a")}, - {__.out().count().as("a").is(0), __.out().limit(1).count().as("a").is(0)}, - {__.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))}, - {__.map(__.count().is(0)), __.map(__.limit(1).count().is(0))}, - {__.flatMap(__.count().is(0)), __.flatMap(__.limit(1).count().is(0))}, - {__.filter(__.count().is(0)), __.filter(__.not(__.identity()))}, - {__.sideEffect(__.count().is(0)), __.sideEffect(__.not(__.identity()))}, - {__.branch(__.count().is(0)), __.branch(__.limit(1).count().is(0))}, - {__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")}, - {__.repeat(__.out()).until(__.outE().count().is(0)), __.repeat(__.out()).until(__.not(__.outE()))}, - {__.repeat(__.out()).emit(__.outE().count().is(0)), __.repeat(__.out()).emit(__.not(__.outE()))}, - {__.where(__.outE().hasLabel("created").count().is(0)), __.where(__.not(__.outE().hasLabel("created")))}, - {__.where(__.out().outE().hasLabel("created").count().is(0)), __.where(__.out().not(__.outE().hasLabel("created")))}, - }); - } + @Parameterized.Parameters(name = "{0}") + public static Iterable<Object[]> generateTestParameters() { + + return Arrays.asList(new Traversal[][]{ + {__.count().is(0), __.not(__.identity())}, + {__.count().is(1), __.limit(2).count().is(1)}, + {__.out().count().is(0), __.not(__.out())}, + {__.outE().count().is(lt(1)), __.not(__.outE())}, + {__.both().count().is(lte(0)), __.not(__.both())}, + {__.store("x").count().is(0).as("a"), __.store("x").limit(1).count().is(0).as("a")}, + {__.out().count().as("a").is(0), __.out().limit(1).count().as("a").is(0)}, + {__.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))}, + {__.map(__.count().is(0)), __.map(__.limit(1).count().is(0))}, + {__.flatMap(__.count().is(0)), __.flatMap(__.limit(1).count().is(0))}, + {__.filter(__.count().is(0)), __.filter(__.not(__.identity()))}, + {__.sideEffect(__.count().is(0)), __.sideEffect(__.not(__.identity()))}, + {__.branch(__.count().is(0)), __.branch(__.limit(1).count().is(0))}, + {__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")}, + {__.repeat(__.out()).until(__.outE().count().is(0)), __.repeat(__.out()).until(__.not(__.outE()))}, + {__.repeat(__.out()).emit(__.outE().count().is(0)), __.repeat(__.out()).emit(__.not(__.outE()))}, ++ {__.where(__.outE().hasLabel("created").count().is(0)), __.where(__.not(__.outE().hasLabel("created")))}, ++ {__.where(__.out().outE().hasLabel("created").count().is(0)), __.where(__.out().not(__.outE().hasLabel("created")))}, + }); } }