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 2019/04/04 13:25:34 UTC
[tinkerpop] branch tp4 updated: fixed a bug in RepeatStep in Pipes.
Added nested repeat(union()) test case to SimpleTestSuite and only Beam
passes. Commented out for now.
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 <ok...@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) {