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/03/13 20:51:49 UTC

[tinkerpop] 26/41: got IdentityYest working for both Beam and Pipes and with an arbitrary number of provided TraversalSources.

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

commit 1760441aaf40d24152ed93d0242ab5665d0a6a37
Author: Marko A. Rodriguez <ok...@gmail.com>
AuthorDate: Mon Mar 11 17:08:36 2019 -0600

    got IdentityYest working for both Beam and Pipes and with an arbitrary number of provided TraversalSources.
---
 .../org/apache/tinkerpop/language/Traversal.java   |  2 +-
 .../apache/tinkerpop/language/TraversalUtil.java   |  4 ++
 .../tinkerpop/machine/bytecode/Bytecode.java       |  2 +-
 .../machine/strategies/IdentityStrategy.java       |  4 +-
 .../tinkerpop/machine/traversers/Traverser.java    |  1 +
 java/machine/beam/pom.xml                          |  6 +++
 .../apache/tinkerpop/machine/beam/FilterFn.java    |  3 +-
 .../tinkerpop/machine/beam/BeamIdentityTest.java}  | 20 +++++-----
 .../tinkerpop/machine/pipes/PipesIdentityTest.java | 16 ++++----
 .../machine/functions/filters/IdentityTest.java    | 44 ++++++++++++++++++----
 10 files changed, 71 insertions(+), 31 deletions(-)

diff --git a/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java b/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java
index 0e8f40a..f072712 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java
@@ -45,7 +45,7 @@ public class Traversal<C, S, E> implements Iterator<E> {
     private long lastCount = 0L;
     private E lastObject = null;
 
-    public Traversal(final Bytecode<C> bytecode) {
+    protected Traversal(final Bytecode<C> bytecode) {
         this.bytecode = bytecode;
         this.currentCoefficient = BytecodeUtil.getCoefficient(this.bytecode).orElse((Coefficient<C>) LongCoefficient.create());
         this.processorFactory = BytecodeUtil.getProcessorFactory(this.bytecode).orElse(EmptyProcessorFactory.instance());
diff --git a/java/core/src/main/java/org/apache/tinkerpop/language/TraversalUtil.java b/java/core/src/main/java/org/apache/tinkerpop/language/TraversalUtil.java
index 758fb47..b8215ad 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/language/TraversalUtil.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/language/TraversalUtil.java
@@ -33,4 +33,8 @@ public final class TraversalUtil {
         return traversal.bytecode;
     }
 
+    public static <C, S, E> Traversal<C, S, E> getTraversal(final Bytecode<C> bytecode) {
+        return new Traversal<>(bytecode);
+    }
+
 }
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
index ddc1cf9..364a292 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
@@ -26,7 +26,7 @@ import java.util.List;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class Bytecode<C> implements Cloneable {
+public final class Bytecode<C> implements Cloneable {
 
     private List<Instruction<C>> instructions = new ArrayList<>();
     private List<SourceInstruction> sourceInstructions = new ArrayList<>();
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java b/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java
index 92ef157..c0eda40 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/strategies/IdentityStrategy.java
@@ -30,7 +30,7 @@ public final class IdentityStrategy implements Strategy {
     public <C> void apply(final Bytecode<C> bytecode) {
         bytecode.getInstructions().removeIf(instruction ->
                 instruction.op().equals(Symbols.IDENTITY) &&
-                        instruction.labels().isEmpty());
-        //!instruction.coefficient().equals(unity));
+                        instruction.labels().isEmpty() &&
+                        instruction.coefficient().isUnity());
     }
 }
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
index 59c9752..e8703c0 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
@@ -44,6 +44,7 @@ public interface Traverser<C, S> extends Serializable, Cloneable {
     public default boolean filter(final FilterFunction<C, S> function) {
         if (function.test(this)) {
             this.path().addLabels(function.labels());
+            this.coefficient().multiply(function.coefficient().value());
             return true;
         } else {
             return false;
diff --git a/java/machine/beam/pom.xml b/java/machine/beam/pom.xml
index dc0d2da..a8a2422 100644
--- a/java/machine/beam/pom.xml
+++ b/java/machine/beam/pom.xml
@@ -84,6 +84,12 @@ limitations under the License.
             <artifactId>pipes</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <!-- TESTING -->
+        <dependency>
+            <groupId>org.apache.tinkerpop</groupId>
+            <artifactId>test</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
     <build>
         <directory>${basedir}/target</directory>
diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java
index 02ff1db..782ffdc 100644
--- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java
+++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FilterFn.java
@@ -35,7 +35,8 @@ public class FilterFn<C, S> extends AbstractFn<C, S, S> {
 
     @ProcessElement
     public void processElement(final @Element Traverser<C, S> traverser, final OutputReceiver<Traverser<C, S>> output) {
-        final Traverser<C,S> clone = traverser.split(this.filterFunction,traverser.object());
+        final Traverser<C, S> clone = traverser.split(this.filterFunction, traverser.object());
+        clone.coefficient().set(traverser.coefficient().clone().value()); // TODO: get rid of this
         if (clone.filter(this.filterFunction))
             output.output(clone);
     }
diff --git a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamIdentityTest.java
similarity index 67%
copy from java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
copy to java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamIdentityTest.java
index 13dd6b2..f48244e 100644
--- a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
+++ b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamIdentityTest.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.pipes;
+package org.apache.tinkerpop.machine.beam;
 
 import org.apache.tinkerpop.language.Gremlin;
-import org.apache.tinkerpop.language.TraversalSource;
 import org.apache.tinkerpop.machine.coefficients.LongCoefficient;
 import org.apache.tinkerpop.machine.functions.filters.IdentityTest;
-import org.junit.jupiter.api.Test;
+import org.apache.tinkerpop.machine.strategies.IdentityStrategy;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class PipesIdentityTest {
+public class BeamIdentityTest extends IdentityTest {
 
-    private TraversalSource<Long> g = Gremlin.<Long>traversal().withProcessor(PipesProcessor.class).withCoefficient(LongCoefficient.class);
-
-    @Test
-    public void g_injectX2X_identity() {
-        IdentityTest.g_injectX2X_identity(g.inject(2L).identity());
+    public BeamIdentityTest() {
+        super(
+                Gremlin.<Long>traversal().withProcessor(BeamProcessor.class),
+                Gremlin.<Long>traversal().withCoefficient(LongCoefficient.class).withProcessor(BeamProcessor.class),
+                Gremlin.<Long>traversal().withProcessor(BeamProcessor.class).withStrategy(IdentityStrategy.class));
     }
-}
+
+}
\ No newline at end of file
diff --git a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
index 13dd6b2..84b9bfa 100644
--- a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
+++ b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
@@ -19,20 +19,20 @@
 package org.apache.tinkerpop.machine.pipes;
 
 import org.apache.tinkerpop.language.Gremlin;
-import org.apache.tinkerpop.language.TraversalSource;
 import org.apache.tinkerpop.machine.coefficients.LongCoefficient;
 import org.apache.tinkerpop.machine.functions.filters.IdentityTest;
-import org.junit.jupiter.api.Test;
+import org.apache.tinkerpop.machine.strategies.IdentityStrategy;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class PipesIdentityTest {
+public class PipesIdentityTest extends IdentityTest {
 
-    private TraversalSource<Long> g = Gremlin.<Long>traversal().withProcessor(PipesProcessor.class).withCoefficient(LongCoefficient.class);
-
-    @Test
-    public void g_injectX2X_identity() {
-        IdentityTest.g_injectX2X_identity(g.inject(2L).identity());
+    public PipesIdentityTest() {
+        super(
+                Gremlin.<Long>traversal().withProcessor(PipesProcessor.class),
+                Gremlin.<Long>traversal().withCoefficient(LongCoefficient.class).withProcessor(PipesProcessor.class),
+                Gremlin.<Long>traversal().withProcessor(PipesProcessor.class).withStrategy(IdentityStrategy.class));
     }
+
 }
diff --git a/java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java b/java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
index 4699eb7..334428f 100644
--- a/java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
+++ b/java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
@@ -18,24 +18,52 @@
  */
 package org.apache.tinkerpop.machine.functions.filters;
 
-import org.apache.tinkerpop.language.Traversal;
+import org.apache.tinkerpop.language.TraversalSource;
+import org.junit.jupiter.api.Test;
 
+import java.util.Arrays;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class IdentityTest {
+public abstract class IdentityTest {
 
-    private IdentityTest() {
-        // static class
+    private List<TraversalSource<Long>> sources;
+
+    public IdentityTest(final TraversalSource<Long>... sources) {
+        this.sources = Arrays.asList(sources);
+    }
+
+    @Test
+    public void g_injectX2X_identity() {
+        for (final TraversalSource<Long> g : this.sources) {
+            final List<Long> list = g.inject(2L).identity().toList();
+            assertEquals(1, list.size());
+            assertEquals(2L, list.get(0));
+        }
+    }
+
+    @Test
+    public void g_injectX1_2X_identity_asXaX() {
+        for (final TraversalSource<Long> g : this.sources) {
+            final List<Long> list = g.inject(1L, 2L).identity().as("a").toList();
+            assertEquals(2, list.size());
+            assertTrue(list.contains(1L));
+            assertTrue(list.contains(2L));
+        }
     }
 
-    public static void g_injectX2X_identity(final Traversal<Long, Long, Long> traversal) {
-        final List<Long> list = traversal.toList();
-        assertEquals(1, list.size());
-        assertEquals(2L, list.get(0));
+    @Test
+    public void g_injectX1_2X_cX3X_identity() {
+        for (final TraversalSource<Long> g : this.sources) {
+            final List<Long> list = g.inject(1L, 2L).c(3L).identity().toList();
+            assertEquals(6, list.size());
+            assertTrue(list.contains(1L));
+            assertTrue(list.contains(2L));
+        }
     }
 }