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) {