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));
+ }
}
}