This is an automated email from the ASF dual-hosted git repository. okram pushed a commit to branch tp4 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/tp4 by this push: new abf9fd6 fixed a bug in RepeatStep in Pipes. Added nested repeat(union()) test case to SimpleTestSuite and only Beam passes. Commented out for now. abf9fd6 is described below commit abf9fd628aba7e6387727c2d793fd66be407e9bd Author: Marko A. Rodriguez <okramma...@gmail.com> AuthorDate: Thu Apr 4 07:25:25 2019 -0600 fixed a bug in RepeatStep in Pipes. Added nested repeat(union()) test case to SimpleTestSuite and only Beam passes. Commented out for now. --- .../apache/tinkerpop/machine/SimpleTestSuite.java | 28 +++++++++---- .../machine/processor/pipes/BranchStep.java | 6 +-- .../machine/processor/pipes/RepeatStep.java | 47 ++++++++++++---------- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java b/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java index 3404d4d..49bb764 100644 --- a/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java +++ b/java/machine/machine-test/src/main/java/org/apache/tinkerpop/machine/SimpleTestSuite.java @@ -199,16 +199,28 @@ public class SimpleTestSuite extends AbstractTestSuite<Long> { // NESTED REPEAT TESTING - // @Test - void g_injectX1X_repeatXunionXincr__incr_incrXX_timesX3X() { // r.u.e - verify(List.of(3L, 4L, 4L, 5L, 4L, 5L, 5L, 6L), - g.inject(1L).repeat(union(incr(), __.<Long>incr().incr())).times(3)); + //@Test + void g_injectX1X_repeatXunionXincr__incr_incrXX_timesX1X() { + verify(List.of(2L, 3L), + g.inject(1L).repeat(union(incr(), __.<Long>incr().incr())).times(1)); + } + + //@Test + void g_injectX1X_repeatXunionXincr__incr_incrXX_timesX2X() { + verify(List.of(3L, 4L, 4L, 5L), + g.inject(1L).repeat(union(incr(), __.<Long>incr().incr())).times(2)); + } - // 1 - // 1 2 - // 2 3 3 4 - // 3 4 4 5 4 5 5 6 + //@Test + void g_injectX1X_repeatXunionXincr__incr_incrXX_timesX3X() { + verify(List.of(4L, 5L, 5L, 6L, 5L, 6L, 6L, 7L), + g.inject(1L).repeat(union(incr(), __.<Long>incr().incr())).times(3)); } + // 1 + // 1 2 + // 2 3 3 4 + // 3 4 4 5 4 5 5 6 + @Test void g_injectX7_3_5_20_1_2_5X_incr_order_byXdescX() { diff --git a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java index 32ed3eb..0ef8280 100644 --- a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java +++ b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/BranchStep.java @@ -57,7 +57,7 @@ final class BranchStep<C, S, E, M> extends AbstractStep<C, S, E> { return this.nextTraversers.next(); } - private final void stageOutput() { + private void stageOutput() { while (!this.nextTraversers.hasNext() && this.previousStep.hasNext()) { boolean found = false; this.nextTraversers = new MultiIterator<>(); @@ -66,13 +66,13 @@ final class BranchStep<C, S, E, M> extends AbstractStep<C, S, E> { if (entry.getKey().filterTraverser(traverser)) { found = true; for (final Compilation<C, S, E> branch : entry.getValue()) { - ((MultiIterator<Traverser<C, E>>) this.nextTraversers).addIterator(branch.addTraverser(traverser)); + ((MultiIterator<Traverser<C, E>>) this.nextTraversers).addIterator(branch.addTraverser(traverser.clone())); } } } if (!found) { for (final Compilation<C, S, E> defaultBranches : this.defaultBranches) { - ((MultiIterator<Traverser<C, E>>) this.nextTraversers).addIterator(defaultBranches.addTraverser(traverser)); + ((MultiIterator<Traverser<C, E>>) this.nextTraversers).addIterator(defaultBranches.addTraverser(traverser.clone())); } } } diff --git a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java index 830ad45..8dc25f3 100644 --- a/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java +++ b/java/machine/processor/pipes/src/main/java/org/apache/tinkerpop/machine/processor/pipes/RepeatStep.java @@ -63,33 +63,36 @@ final class RepeatStep<C, S> extends AbstractStep<C, S, S> { return this.outputTraversers.remove(); } - private final void stageInput() { - if (this.hasStartPredicates) { + private boolean stageInput() { + if (!this.inputTraversers.isEmpty() || this.previousStep.hasNext()) { final Traverser<C, S> traverser = this.inputTraversers.isEmpty() ? this.previousStep.next() : this.inputTraversers.remove(); - if (1 == this.untilLocation) { - if (this.untilCompilation.filterTraverser(traverser)) { - this.outputTraversers.add(traverser); - } else if (2 == this.emitLocation && this.emitCompilation.filterTraverser(traverser)) { - this.outputTraversers.add(traverser.repeatDone(this.repeatBranch)); - this.repeat.addTraverser(traverser); - } else - this.repeat.addTraverser(traverser); - } else if (1 == this.emitLocation) { - if (this.emitCompilation.filterTraverser(traverser)) - this.outputTraversers.add(traverser.repeatDone(this.repeatBranch)); - if (2 == this.untilLocation && this.untilCompilation.filterTraverser(traverser)) - this.outputTraversers.add(traverser.repeatDone(this.repeatBranch)); - else - this.repeat.addTraverser(traverser); + if (this.hasStartPredicates) { + if (1 == this.untilLocation) { + if (this.untilCompilation.filterTraverser(traverser)) { + this.outputTraversers.add(traverser); + } else if (2 == this.emitLocation && this.emitCompilation.filterTraverser(traverser)) { + this.outputTraversers.add(traverser.repeatDone(this.repeatBranch)); + this.repeat.addTraverser(traverser); + } else + this.repeat.addTraverser(traverser); + } else if (1 == this.emitLocation) { + if (this.emitCompilation.filterTraverser(traverser)) + this.outputTraversers.add(traverser.repeatDone(this.repeatBranch)); + if (2 == this.untilLocation && this.untilCompilation.filterTraverser(traverser)) + this.outputTraversers.add(traverser.repeatDone(this.repeatBranch)); + else + this.repeat.addTraverser(traverser); + } + } else { + this.repeat.addTraverser(traverser); } - } else { - this.repeat.addTraverser(this.inputTraversers.isEmpty() ? this.previousStep.next() : this.inputTraversers.remove()); + return true; } + return false; } - private final void stageOutput() { - while (this.outputTraversers.isEmpty() && (this.previousStep.hasNext() || !this.inputTraversers.isEmpty())) { - this.stageInput(); + private void stageOutput() { + while (this.outputTraversers.isEmpty() && (this.repeat.getProcessor().hasNext() || this.stageInput())) { if (this.repeat.getProcessor().hasNext()) { final Traverser<C, S> traverser = this.repeat.getProcessor().next().repeatLoop(this.repeatBranch); if (this.hasEndPredicates) {