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 984a1b5 We now naturally support constant or traversal-based
arguments. This is all nicely packaged with the new Compilation object (which
is turning out to be way cooler than Bytecode. Its like JIT). Added has(),
groupCount(), ...
984a1b5 is described below
commit 984a1b591029f572717e223f1f708b451b6161e3
Author: Marko A. Rodriguez <[email protected]>
AuthorDate: Tue Mar 12 11:15:31 2019 -0600
We now naturally support constant or traversal-based arguments. This is all
nicely packaged with the new Compilation object (which is turning out to be way
cooler than Bytecode. Its like JIT). Added has(), groupCount(), ...
---
.../org/apache/tinkerpop/language/Symbols.java | 3 +
.../org/apache/tinkerpop/language/Traversal.java | 53 +++++++++++++---
.../apache/tinkerpop/language/TraversalUtil.java | 4 --
.../{CompilationRing.java => Argument.java} | 35 ++++-------
.../tinkerpop/machine/bytecode/Bytecode.java | 2 +
.../tinkerpop/machine/bytecode/BytecodeUtil.java | 9 +++
.../tinkerpop/machine/bytecode/Compilation.java | 9 +++
.../machine/bytecode/CompilationRing.java | 2 +-
.../tinkerpop/machine/bytecode/Instruction.java | 4 ++
.../machine/functions/filter/HasKeyFilter.java | 53 ++++++++++++++++
.../functions/filter/HasKeyValueFilter.java | 55 +++++++++++++++++
.../machine/functions/reduce/GroupCountReduce.java | 70 ++++++++++++++++++++++
.../org/apache/tinkerpop/machine/beam/Beam.java | 7 ++-
.../apache/tinkerpop/machine/beam/BranchFn.java | 9 +--
.../apache/tinkerpop/machine/beam/FlatMapFn.java | 2 +-
.../apache/tinkerpop/machine/beam/ReduceFn.java | 23 +++----
.../CoefficientCoder.java} | 11 ++--
.../ObjectCoder.java} | 12 ++--
.../beam/{ => serialization}/ReducerCoder.java | 11 ++--
.../beam/{ => serialization}/TraverserCoder.java | 2 +-
.../BasicReducer.java} | 9 +--
.../apache/tinkerpop/machine/beam/BeamTest.java | 2 +-
.../beam/functions/TraversalSourceLibrary.java} | 18 +++---
.../functions/filter/BeamHasKeyValueTest.java} | 15 +++--
.../beam/functions/filter/BeamIdentityTest.java} | 16 ++---
.../apache/tinkerpop/machine/pipes/BranchStep.java | 5 +-
.../apache/tinkerpop/machine/pipes/FilterStep.java | 2 +-
.../tinkerpop/machine/pipes/FlatMapStep.java | 5 +-
.../tinkerpop/machine/pipes/InitialStep.java | 2 +-
.../apache/tinkerpop/machine/pipes/MapStep.java | 2 +-
.../org/apache/tinkerpop/machine/pipes/Pipes.java | 5 +-
.../tinkerpop/machine/pipes/PipesProcessor.java | 2 +-
.../apache/tinkerpop/machine/pipes/ReduceStep.java | 4 +-
.../machine/pipes/strategies/PipesStrategy.java | 2 +-
.../tinkerpop/machine/pipes/util/BasicReducer.java | 2 +-
.../tinkerpop/machine/pipes/util/Reducer.java | 4 +-
.../apache/tinkerpop/machine/pipes/PipesTest.java | 4 +-
.../pipes/functions/TraversalSourceLibrary.java} | 19 +++---
.../functions/filter/PipesHasKeyValueTest.java} | 15 +++--
.../pipes/functions/filter/PipesIdentityTest.java} | 14 ++---
.../HasKeyValueTest.java} | 32 ++++------
.../{filters => filter}/IdentityTest.java | 2 +-
42 files changed, 387 insertions(+), 170 deletions(-)
diff --git a/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
b/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
index 81c80bb..0d431ae 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
@@ -34,6 +34,9 @@ public final class Symbols {
public static final String C = "c";
public static final String COUNT = "count";
public static final String FILTER = "filter";
+ public static final String GROUP_COUNT = "groupCount";
+ public static final String HAS_KEY_VALUE = "hasKeyValue";
+ public static final String HAS_KEY = "hasKey";
public static final String IDENTITY = "identity";
public static final String IS = "is";
public static final String INCR = "incr";
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 92ae122..92a7d23 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
@@ -29,6 +29,7 @@ import org.apache.tinkerpop.machine.traversers.Traverser;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -68,10 +69,45 @@ public class Traversal<C, S, E> implements Iterator<E> {
}
public Traversal<C, S, E> filter(final Traversal<C, E, ?> filterTraversal)
{
- this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER,
filterTraversal.bytecode);
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.FILTER,
filterTraversal);
return this;
}
+ public Traversal<C, S, Map<E, Long>> groupCount() {
+ this.bytecode.addInstruction(this.currentCoefficient,
Symbols.GROUP_COUNT);
+ return (Traversal) this;
+ }
+
+ public <K, V> Traversal<C, S, Map<K, V>> has(final K key) {
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.HAS_KEY,
key);
+ return (Traversal) this;
+ }
+
+ public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>,
K> keyTraversal) {
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.HAS_KEY,
keyTraversal);
+ return (Traversal) this;
+ }
+
+ public <K, V> Traversal<C, S, Map<K, V>> has(final K key, final V value) {
+ this.bytecode.addInstruction(this.currentCoefficient,
Symbols.HAS_KEY_VALUE, key, value);
+ return (Traversal) this;
+ }
+
+ public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>,
K> keyTraversal, final V value) {
+ this.bytecode.addInstruction(this.currentCoefficient,
Symbols.HAS_KEY_VALUE, keyTraversal, value);
+ return (Traversal) this;
+ }
+
+ public <K, V> Traversal<C, S, Map<K, V>> has(final K key, final
Traversal<C, Map<K, V>, V> valueTraversal) {
+ this.bytecode.addInstruction(this.currentCoefficient,
Symbols.HAS_KEY_VALUE, key, valueTraversal);
+ return (Traversal) this;
+ }
+
+ public <K, V> Traversal<C, S, Map<K, V>> has(final Traversal<C, Map<K, V>,
K> keyTraversal, final Traversal<C, Map<K, V>, V> valueTraversal) {
+ this.bytecode.addInstruction(this.currentCoefficient,
Symbols.HAS_KEY_VALUE, keyTraversal, valueTraversal);
+ return (Traversal) this;
+ }
+
public Traversal<C, S, E> identity() {
this.bytecode.addInstruction(this.currentCoefficient,
Symbols.IDENTITY);
return this;
@@ -82,6 +118,11 @@ public class Traversal<C, S, E> implements Iterator<E> {
return this;
}
+ public Traversal<C, S, E> is(final Traversal<C, E, E> objectTraversal) {
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS,
objectTraversal);
+ return this;
+ }
+
public Traversal<C, S, Long> incr() {
this.bytecode.addInstruction(this.currentCoefficient, Symbols.INCR);
return (Traversal) this;
@@ -93,7 +134,7 @@ public class Traversal<C, S, E> implements Iterator<E> {
}
public <R> Traversal<C, S, R> map(final Traversal<C, E, R> mapTraversal) {
- this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP,
mapTraversal.bytecode);
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.MAP,
mapTraversal);
return (Traversal) this;
}
@@ -107,12 +148,8 @@ public class Traversal<C, S, E> implements Iterator<E> {
return (Traversal) this;
}
- public <R> Traversal<C, S, R> union(final Traversal<C, E, R>...
traversals) {
- final Bytecode<C>[] bytecodes = new Bytecode[traversals.length];
- for (int i = 0; i < traversals.length; i++) {
- bytecodes[i] = traversals[i].bytecode;
- }
- this.bytecode.addInstruction(this.currentCoefficient, Symbols.UNION,
bytecodes);
+ public <R> Traversal<C, S, R> union(final Traversal<C, E, R> traversal,
Traversal<C, E, R>... traversals) {
+ this.bytecode.addInstruction(this.currentCoefficient, Symbols.UNION,
traversal, traversals);
return (Traversal) this;
}
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 b8215ad..758fb47 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,8 +33,4 @@ 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/CompilationRing.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Argument.java
similarity index 54%
copy from
java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationRing.java
copy to
java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Argument.java
index 3d1c280..ca51b74 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationRing.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Argument.java
@@ -19,44 +19,35 @@
package org.apache.tinkerpop.machine.bytecode;
import java.io.Serializable;
-import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class CompilationRing<C, S, E> implements Serializable {
+public final class Argument<E> implements Serializable {
- private List<Compilation<C, S, E>> compilations;
- private int currentCompilation = -1;
+ private final E arg;
+ private final boolean isPrimitive;
- public CompilationRing(final List<Compilation<C, S, E>> compilations) {
- this.compilations = compilations;
+ private Argument(final Object arg) {
+ this.isPrimitive = !(arg instanceof Bytecode);
+ this.arg = this.isPrimitive ? (E) arg : (E)
Compilation.compileOne(arg);
}
- public Compilation<C, S, E> next() {
- if (this.compilations.isEmpty()) {
- return null;
- } else {
- this.currentCompilation = (this.currentCompilation + 1) %
this.compilations.size();
- return this.compilations.get(this.currentCompilation);
- }
+ private <C, S> Compilation<C, S, E> getCompilation() {
+ return (Compilation<C, S, E>) this.arg;
}
- public boolean isEmpty() {
- return this.compilations.isEmpty();
- }
- public void reset() {
- this.currentCompilation = -1;
+ public final <C, S> E getArg(final S object) {
+ return this.isPrimitive ? this.arg :
this.getCompilation().mapObject(object).object();
}
- public int size() {
- return this.compilations.size();
+ public static <E> Argument<E> create(final Object arg) {
+ return new Argument<>(arg);
}
-
@Override
public String toString() {
- return this.compilations.toString();
+ return this.arg.toString();
}
}
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 364a292..8716b7b 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
@@ -18,6 +18,8 @@
*/
package org.apache.tinkerpop.machine.bytecode;
+import org.apache.tinkerpop.language.Traversal;
+import org.apache.tinkerpop.language.TraversalUtil;
import org.apache.tinkerpop.machine.coefficients.Coefficient;
import java.util.ArrayList;
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
index 0f129f2..867f112 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
@@ -23,6 +23,8 @@ import org.apache.tinkerpop.machine.coefficients.Coefficient;
import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.branch.UnionBranch;
import org.apache.tinkerpop.machine.functions.filter.FilterFilter;
+import org.apache.tinkerpop.machine.functions.filter.HasKeyFilter;
+import org.apache.tinkerpop.machine.functions.filter.HasKeyValueFilter;
import org.apache.tinkerpop.machine.functions.filter.IdentityFilter;
import org.apache.tinkerpop.machine.functions.filter.IsFilter;
import org.apache.tinkerpop.machine.functions.initial.InjectInitial;
@@ -30,6 +32,7 @@ import org.apache.tinkerpop.machine.functions.map.IncrMap;
import org.apache.tinkerpop.machine.functions.map.MapMap;
import org.apache.tinkerpop.machine.functions.map.PathMap;
import org.apache.tinkerpop.machine.functions.reduce.CountReduce;
+import org.apache.tinkerpop.machine.functions.reduce.GroupCountReduce;
import org.apache.tinkerpop.machine.functions.reduce.SumReduce;
import org.apache.tinkerpop.machine.processor.ProcessorFactory;
import org.apache.tinkerpop.machine.strategies.Strategy;
@@ -135,6 +138,12 @@ public final class BytecodeUtil {
return new CountReduce<>(coefficient, labels);
case Symbols.FILTER:
return new FilterFilter<>(coefficient, labels,
Compilation.compileOne(instruction.args()[0]));
+ case Symbols.GROUP_COUNT:
+ return new GroupCountReduce<>(coefficient, labels,
Compilation.<C, Object, Object>compileMaybe(instruction.args()).orElse(null));
+ case Symbols.HAS_KEY:
+ return new HasKeyFilter<>(coefficient, labels,
Argument.create(instruction.args()[0]));
+ case Symbols.HAS_KEY_VALUE:
+ return new HasKeyValueFilter<>(coefficient, labels,
Argument.create(instruction.args()[0]), Argument.create(instruction.args()[1]));
case Symbols.IDENTITY:
return new IdentityFilter<>(coefficient, labels);
case Symbols.INJECT:
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
index 19de363..f973a8f 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java
@@ -29,6 +29,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Optional;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -115,6 +116,14 @@ public final class Compilation<C, S, E> implements
Serializable {
return new Compilation<>((Bytecode<C>) arg);
}
+ public static <C, S, E> Optional<Compilation<C, S, E>> compileMaybe(final
Object... args) {
+ for (final Object arg : args) {
+ if (arg instanceof Bytecode)
+ return Optional.of(new Compilation<>((Bytecode<C>) arg));
+ }
+ return Optional.empty();
+ }
+
public static <C, S, E> List<Compilation<C, S, E>> compile(final Object...
args) {
final List<Compilation<C, S, E>> compilations = new ArrayList<>();
for (final Object arg : args) {
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationRing.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationRing.java
index 3d1c280..ea634c4 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationRing.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/CompilationRing.java
@@ -24,7 +24,7 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class CompilationRing<C, S, E> implements Serializable {
+public final class CompilationRing<C, S, E> implements Serializable {
private List<Compilation<C, S, E>> compilations;
private int currentCompilation = -1;
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
index 5612a65..bfe10db 100644
---
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
@@ -41,6 +41,10 @@ public final class Instruction<C> {
this.coefficient = coefficient;
this.op = op;
this.args = args;
+ for (int i = 0; i < this.args.length; i++) {
+ if (this.args[i] instanceof Traversal)
+ this.args[i] = TraversalUtil.getBytecode((Traversal)
this.args[i]);
+ }
}
public Coefficient<C> coefficient() {
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyFilter.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyFilter.java
new file mode 100644
index 0000000..09320a7
--- /dev/null
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyFilter.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.functions.filter;
+
+import org.apache.tinkerpop.machine.bytecode.Argument;
+import org.apache.tinkerpop.machine.coefficients.Coefficient;
+import org.apache.tinkerpop.machine.functions.AbstractFunction;
+import org.apache.tinkerpop.machine.functions.FilterFunction;
+import org.apache.tinkerpop.machine.traversers.Traverser;
+import org.apache.tinkerpop.util.StringFactory;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class HasKeyFilter<C, K, V> extends AbstractFunction<C, Map<K,
V>, Map<K, V>> implements FilterFunction<C, Map<K, V>> {
+
+ private final Argument<K> key;
+
+ public HasKeyFilter(final Coefficient<C> coefficient, final Set<String>
labels, final Argument<K> key) {
+ super(coefficient, labels);
+ this.key = key;
+ }
+
+ @Override
+ public boolean test(final Traverser<C, Map<K, V>> traverser) {
+ final Map<K, V> object = traverser.object();
+ return object.containsKey(this.key.getArg(object));
+ }
+
+ @Override
+ public String toString() {
+ return StringFactory.makeFunctionString(this, this.key);
+ }
+}
\ No newline at end of file
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyValueFilter.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyValueFilter.java
new file mode 100644
index 0000000..70aecc3
--- /dev/null
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyValueFilter.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.functions.filter;
+
+import org.apache.tinkerpop.machine.bytecode.Argument;
+import org.apache.tinkerpop.machine.coefficients.Coefficient;
+import org.apache.tinkerpop.machine.functions.AbstractFunction;
+import org.apache.tinkerpop.machine.functions.FilterFunction;
+import org.apache.tinkerpop.machine.traversers.Traverser;
+import org.apache.tinkerpop.util.StringFactory;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class HasKeyValueFilter<C, K, V> extends AbstractFunction<C,
Map<K, V>, Map<K, V>> implements FilterFunction<C, Map<K, V>> {
+
+ private final Argument<K> key;
+ private final Argument<V> value;
+
+ public HasKeyValueFilter(final Coefficient<C> coefficient, final
Set<String> labels, final Argument<K> key, final Argument<V> value) {
+ super(coefficient, labels);
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override
+ public boolean test(final Traverser<C, Map<K, V>> traverser) {
+ final Map<K, V> object = traverser.object();
+ return
this.value.getArg(object).equals(object.get(this.key.getArg(object)));
+ }
+
+ @Override
+ public String toString() {
+ return StringFactory.makeFunctionString(this, this.key, this.value);
+ }
+}
diff --git
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/reduce/GroupCountReduce.java
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/reduce/GroupCountReduce.java
new file mode 100644
index 0000000..50285bf
--- /dev/null
+++
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/reduce/GroupCountReduce.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.machine.functions.reduce;
+
+import org.apache.tinkerpop.machine.bytecode.Compilation;
+import org.apache.tinkerpop.machine.coefficients.Coefficient;
+import org.apache.tinkerpop.machine.functions.AbstractFunction;
+import org.apache.tinkerpop.machine.functions.NestedFunction;
+import org.apache.tinkerpop.machine.functions.ReduceFunction;
+import org.apache.tinkerpop.machine.traversers.Traverser;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class GroupCountReduce<C, S, E> extends AbstractFunction<C, S, Map<E,
Long>> implements ReduceFunction<C, S, Map<E, Long>>, NestedFunction<C> {
+
+ private final Compilation<C, S, E> byCompilation;
+
+ public GroupCountReduce(final Coefficient<C> coefficient, final
Set<String> labels, final Compilation<C, S, E> byCompilation) {
+ super(coefficient, labels);
+ this.byCompilation = byCompilation;
+ }
+
+ @Override
+ public Map<E, Long> apply(final Traverser<C, S> traverser, final Map<E,
Long> currentValue) {
+ E object = null == this.byCompilation ? (E) traverser.object() :
this.byCompilation.mapObject(traverser.object()).object();
+ currentValue.put(object, traverser.coefficient().count() +
currentValue.getOrDefault(object, 0L));
+ return currentValue;
+ }
+
+ @Override
+ public Map<E, Long> merge(final Map<E, Long> valueA, final Map<E, Long>
valueB) {
+ final Map<E, Long> newMap = new HashMap<>();
+ newMap.putAll(valueA);
+ newMap.putAll(valueB);
+ return newMap;
+ }
+
+ @Override
+ public Map<E, Long> getInitialValue() {
+ return new HashMap<>();
+ }
+
+ @Override
+ public List<Compilation<C, ?, ?>> getInternals() {
+ return Collections.singletonList(this.byCompilation);
+ }
+}
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
index eaed2f7..166f44b 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
@@ -27,6 +27,10 @@ import org.apache.beam.sdk.transforms.Flatten;
import org.apache.beam.sdk.transforms.ParDo;
import org.apache.beam.sdk.values.PCollection;
import org.apache.beam.sdk.values.PCollectionList;
+import org.apache.beam.sdk.values.TypeDescriptor;
+import org.apache.tinkerpop.machine.beam.serialization.CoefficientCoder;
+import org.apache.tinkerpop.machine.beam.serialization.ObjectCoder;
+import org.apache.tinkerpop.machine.beam.serialization.TraverserCoder;
import org.apache.tinkerpop.machine.bytecode.Compilation;
import org.apache.tinkerpop.machine.coefficients.Coefficient;
import org.apache.tinkerpop.machine.coefficients.LongCoefficient;
@@ -53,12 +57,11 @@ public class Beam<C, S, E> implements Processor<C, S, E> {
private final Pipeline pipeline;
public static List<Traverser> OUTPUT = new ArrayList<>(); // FIX THIS!
private final List<Fn> functions = new ArrayList<>();
- Iterator<Traverser<C, E>> iterator = null;
+ private Iterator<Traverser<C, E>> iterator = null;
public Beam(final Compilation<C, S, E> compilation) {
this.pipeline = Pipeline.create();
-
this.pipeline.getCoderRegistry().registerCoderForClass(Traverser.class, new
TraverserCoder<>());
PCollection<Traverser<C, ?>> collection =
this.pipeline.apply(Create.of(compilation.getTraverserFactory().create((Coefficient)
LongCoefficient.create(), 1L)));
collection.setCoder(new TraverserCoder());
for (final CFunction<?> function : compilation.getFunctions()) {
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
index 40aec28..e1f9442 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
@@ -21,24 +21,17 @@ package org.apache.tinkerpop.machine.beam;
import org.apache.tinkerpop.machine.functions.BranchFunction;
import org.apache.tinkerpop.machine.traversers.Traverser;
-import java.util.Iterator;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class BranchFn<C, S, E> extends AbstractFn<C, S, E> {
- private BranchFunction<C, S, E> branchFunction;
-
public BranchFn(final BranchFunction<C, S, E> branchFunction) {
super(branchFunction);
- this.branchFunction = branchFunction;
}
@ProcessElement
public void processElement(final @Element Traverser<C, S> traverser, final
OutputReceiver<Traverser<C, E>> output) {
- Iterator<Traverser<C, E>> iterator =
traverser.branch(this.branchFunction);
- while (iterator.hasNext())
- output.output(iterator.next());
+ throw new IllegalStateException("Branching is implementing using
split/merge streams in Beam");
}
}
\ No newline at end of file
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FlatMapFn.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FlatMapFn.java
index e3d2cd9..df06d1e 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FlatMapFn.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/FlatMapFn.java
@@ -37,7 +37,7 @@ public class FlatMapFn<C, S, E> extends AbstractFn<C, S, E> {
@ProcessElement
public void processElement(final @Element Traverser<C, S> traverser, final
OutputReceiver<Traverser<C, E>> output) {
- Iterator<Traverser<C, E>> iterator =
traverser.flatMap(this.flatMapFunction);
+ final Iterator<Traverser<C, E>> iterator =
traverser.flatMap(this.flatMapFunction);
while (iterator.hasNext())
output.output(iterator.next());
}
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReduceFn.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReduceFn.java
index 17d2c3d..cf921aa 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReduceFn.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReduceFn.java
@@ -22,6 +22,9 @@ import org.apache.beam.sdk.coders.CannotProvideCoderException;
import org.apache.beam.sdk.coders.Coder;
import org.apache.beam.sdk.coders.CoderRegistry;
import org.apache.beam.sdk.transforms.Combine;
+import org.apache.tinkerpop.machine.beam.serialization.ReducerCoder;
+import org.apache.tinkerpop.machine.beam.serialization.TraverserCoder;
+import org.apache.tinkerpop.machine.beam.sideEffect.BasicReducer;
import org.apache.tinkerpop.machine.functions.ReduceFunction;
import org.apache.tinkerpop.machine.traversers.Traverser;
import org.apache.tinkerpop.machine.traversers.TraverserFactory;
@@ -29,7 +32,7 @@ import
org.apache.tinkerpop.machine.traversers.TraverserFactory;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class ReduceFn<C, S, E> extends Combine.CombineFn<Traverser<C, S>,
BasicAccumulator<C, S, E>, Traverser<C, E>> implements Fn<C, S, E> {
+public class ReduceFn<C, S, E> extends Combine.CombineFn<Traverser<C, S>,
BasicReducer<C, S, E>, Traverser<C, E>> implements Fn<C, S, E> {
private final ReduceFunction<C, S, E> reduceFunction;
private final TraverserFactory<C> traverserFactory;
@@ -47,40 +50,40 @@ public class ReduceFn<C, S, E> extends
Combine.CombineFn<Traverser<C, S>, BasicA
@Override
- public BasicAccumulator<C, S, E> createAccumulator() {
- return new BasicAccumulator<>(this.reduceFunction,
this.traverserFactory);
+ public BasicReducer<C, S, E> createAccumulator() {
+ return new BasicReducer<>(this.reduceFunction, this.traverserFactory);
}
@Override
- public BasicAccumulator<C, S, E> addInput(BasicAccumulator<C, S, E>
accumulator, Traverser<C, S> input) {
+ public BasicReducer<C, S, E> addInput(final BasicReducer<C, S, E>
accumulator, final Traverser<C, S> input) {
accumulator.addInput(input);
return accumulator;
}
@Override
- public BasicAccumulator<C, S, E>
mergeAccumulators(Iterable<BasicAccumulator<C, S, E>> accumulators) {
+ public BasicReducer<C, S, E> mergeAccumulators(Iterable<BasicReducer<C, S,
E>> accumulators) {
E value = this.reduceFunction.getInitialValue();
- for (final BasicAccumulator accumulator : accumulators) {
+ for (final BasicReducer accumulator : accumulators) {
value = this.reduceFunction.merge(value, (E)
accumulator.extractOutput().object());
}
- final BasicAccumulator<C, S, E> accumulator = new
BasicAccumulator<>(this.reduceFunction, this.traverserFactory);
+ final BasicReducer<C, S, E> accumulator = new
BasicReducer<>(this.reduceFunction, this.traverserFactory);
accumulator.setValue(value);
return accumulator;
}
@Override
- public Traverser<C, E> extractOutput(final BasicAccumulator<C, S, E>
accumulator) {
+ public Traverser<C, E> extractOutput(final BasicReducer<C, S, E>
accumulator) {
return accumulator.extractOutput();
}
@Override
- public Coder<BasicAccumulator<C, S, E>> getAccumulatorCoder(CoderRegistry
registry, Coder<Traverser<C, S>> inputCoder) throws CannotProvideCoderException
{
+ public Coder<BasicReducer<C, S, E>> getAccumulatorCoder(final
CoderRegistry registry, final Coder<Traverser<C, S>> inputCoder) throws
CannotProvideCoderException {
return new ReducerCoder<>();
}
@Override
- public Coder<Traverser<C, E>> getDefaultOutputCoder(CoderRegistry
registry, Coder<Traverser<C, S>> inputCoder) throws CannotProvideCoderException
{
+ public Coder<Traverser<C, E>> getDefaultOutputCoder(final CoderRegistry
registry, final Coder<Traverser<C, S>> inputCoder) throws
CannotProvideCoderException {
return new TraverserCoder<>();
}
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/CoefficientCoder.java
similarity index 79%
copy from
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
copy to
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/CoefficientCoder.java
index dc154bc..e83f806 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/CoefficientCoder.java
@@ -16,10 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.beam;
+package org.apache.tinkerpop.machine.beam.serialization;
import org.apache.beam.sdk.coders.Coder;
import org.apache.beam.sdk.coders.CoderException;
+import org.apache.tinkerpop.machine.coefficients.Coefficient;
import java.io.IOException;
import java.io.InputStream;
@@ -32,19 +33,19 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class ReducerCoder<C, S, E> extends Coder<BasicAccumulator<C, S, E>> {
+public class CoefficientCoder<C> extends Coder<Coefficient<C>> {
@Override
- public void encode(final BasicAccumulator<C, S, E> value, final
OutputStream outStream) throws CoderException, IOException {
+ public void encode(final Coefficient<C> value, final OutputStream
outStream) throws CoderException, IOException {
ObjectOutputStream outputStream = new ObjectOutputStream(outStream);
outputStream.writeObject(value);
}
@Override
- public BasicAccumulator<C, S, E> decode(InputStream inStream) throws
CoderException, IOException {
+ public Coefficient<C> decode(InputStream inStream) throws CoderException,
IOException {
try {
ObjectInputStream inputStream = new ObjectInputStream(inStream);
- return (BasicAccumulator<C, S, E>) inputStream.readObject();
+ return (Coefficient<C>) inputStream.readObject();
} catch (final ClassNotFoundException e) {
throw new IOException(e.getMessage(), e);
}
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/ObjectCoder.java
similarity index 80%
copy from
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
copy to
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/ObjectCoder.java
index dc154bc..c65475d 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/ObjectCoder.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.beam;
+package org.apache.tinkerpop.machine.beam.serialization;
import org.apache.beam.sdk.coders.Coder;
import org.apache.beam.sdk.coders.CoderException;
@@ -32,19 +32,19 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class ReducerCoder<C, S, E> extends Coder<BasicAccumulator<C, S, E>> {
+public class ObjectCoder extends Coder<Object> {
@Override
- public void encode(final BasicAccumulator<C, S, E> value, final
OutputStream outStream) throws CoderException, IOException {
+ public void encode(final Object value, final OutputStream outStream)
throws CoderException, IOException {
ObjectOutputStream outputStream = new ObjectOutputStream(outStream);
outputStream.writeObject(value);
}
@Override
- public BasicAccumulator<C, S, E> decode(InputStream inStream) throws
CoderException, IOException {
+ public Object decode(InputStream inStream) throws CoderException,
IOException {
try {
ObjectInputStream inputStream = new ObjectInputStream(inStream);
- return (BasicAccumulator<C, S, E>) inputStream.readObject();
+ return inputStream.readObject();
} catch (final ClassNotFoundException e) {
throw new IOException(e.getMessage(), e);
}
@@ -59,4 +59,4 @@ public class ReducerCoder<C, S, E> extends
Coder<BasicAccumulator<C, S, E>> {
public void verifyDeterministic() throws NonDeterministicException {
}
-}
+}
\ No newline at end of file
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/ReducerCoder.java
similarity index 78%
rename from
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
rename to
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/ReducerCoder.java
index dc154bc..04a6ffa 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/ReducerCoder.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/ReducerCoder.java
@@ -16,10 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.beam;
+package org.apache.tinkerpop.machine.beam.serialization;
import org.apache.beam.sdk.coders.Coder;
import org.apache.beam.sdk.coders.CoderException;
+import org.apache.tinkerpop.machine.beam.sideEffect.BasicReducer;
import java.io.IOException;
import java.io.InputStream;
@@ -32,19 +33,19 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class ReducerCoder<C, S, E> extends Coder<BasicAccumulator<C, S, E>> {
+public class ReducerCoder<C, S, E> extends Coder<BasicReducer<C, S, E>> {
@Override
- public void encode(final BasicAccumulator<C, S, E> value, final
OutputStream outStream) throws CoderException, IOException {
+ public void encode(final BasicReducer<C, S, E> value, final OutputStream
outStream) throws CoderException, IOException {
ObjectOutputStream outputStream = new ObjectOutputStream(outStream);
outputStream.writeObject(value);
}
@Override
- public BasicAccumulator<C, S, E> decode(InputStream inStream) throws
CoderException, IOException {
+ public BasicReducer<C, S, E> decode(InputStream inStream) throws
CoderException, IOException {
try {
ObjectInputStream inputStream = new ObjectInputStream(inStream);
- return (BasicAccumulator<C, S, E>) inputStream.readObject();
+ return (BasicReducer<C, S, E>) inputStream.readObject();
} catch (final ClassNotFoundException e) {
throw new IOException(e.getMessage(), e);
}
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/TraverserCoder.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/TraverserCoder.java
similarity index 97%
rename from
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/TraverserCoder.java
rename to
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/TraverserCoder.java
index c286034..246e7f3 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/TraverserCoder.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/serialization/TraverserCoder.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.beam;
+package org.apache.tinkerpop.machine.beam.serialization;
import org.apache.beam.sdk.coders.Coder;
import org.apache.beam.sdk.coders.CoderException;
diff --git
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BasicAccumulator.java
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/sideEffect/BasicReducer.java
similarity index 81%
rename from
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BasicAccumulator.java
rename to
java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/sideEffect/BasicReducer.java
index 0c05d7b..5efeb9a 100644
---
a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BasicAccumulator.java
+++
b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/sideEffect/BasicReducer.java
@@ -16,10 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.beam;
+package org.apache.tinkerpop.machine.beam.sideEffect;
import org.apache.beam.sdk.coders.DefaultCoder;
import org.apache.beam.sdk.transforms.Combine;
+import org.apache.tinkerpop.machine.beam.serialization.ReducerCoder;
import org.apache.tinkerpop.machine.functions.ReduceFunction;
import org.apache.tinkerpop.machine.traversers.Traverser;
import org.apache.tinkerpop.machine.traversers.TraverserFactory;
@@ -30,13 +31,13 @@ import java.io.Serializable;
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@DefaultCoder(ReducerCoder.class)
-public class BasicAccumulator<C, S, E> implements
Combine.AccumulatingCombineFn.Accumulator<Traverser<C, S>, BasicAccumulator<C,
S, E>, Traverser<C, E>>, Serializable {
+public class BasicReducer<C, S, E> implements
Combine.AccumulatingCombineFn.Accumulator<Traverser<C, S>, BasicReducer<C, S,
E>, Traverser<C, E>>, Serializable {
private E value;
private final ReduceFunction<C, S, E> reduceFunction;
private final TraverserFactory<C> traverserFactory;
- public BasicAccumulator(final ReduceFunction<C, S, E> reduceFunction,
final TraverserFactory<C> traverserFactory) {
+ public BasicReducer(final ReduceFunction<C, S, E> reduceFunction, final
TraverserFactory<C> traverserFactory) {
super();
this.value = reduceFunction.getInitialValue();
this.reduceFunction = reduceFunction;
@@ -53,7 +54,7 @@ public class BasicAccumulator<C, S, E> implements
Combine.AccumulatingCombineFn.
}
@Override
- public void mergeAccumulator(final BasicAccumulator<C, S, E> other) {
+ public void mergeAccumulator(final BasicReducer<C, S, E> other) {
this.value =
this.reduceFunction.apply(this.traverserFactory.create(this.reduceFunction.coefficient(),
(S) this.value), other.value);
}
diff --git
a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java
b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java
index f392ab7..246b678 100644
---
a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java
+++
b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java
@@ -38,7 +38,7 @@ public class BeamTest {
.withProcessor(BeamProcessor.class)
.withStrategy(IdentityStrategy.class);
- Traversal<Long, Long, Long> traversal = g.inject(7L, 10L,
12L).identity().incr().sum();
+ Traversal<Long, ?,?> traversal = g.inject(7L, 7L, 10L,
12L).identity().incr().groupCount().by(__.incr());
System.out.println(TraversalUtil.getBytecode(traversal).getSourceInstructions());
System.out.println(TraversalUtil.getBytecode(traversal));
System.out.println(traversal);
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/functions/TraversalSourceLibrary.java
similarity index 64%
rename from
java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
rename to
java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/TraversalSourceLibrary.java
index 84b9bfa..d7b8650 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/functions/TraversalSourceLibrary.java
@@ -16,23 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.pipes;
+package org.apache.tinkerpop.machine.beam.functions;
import org.apache.tinkerpop.language.Gremlin;
+import org.apache.tinkerpop.language.TraversalSource;
+import org.apache.tinkerpop.machine.beam.BeamProcessor;
import org.apache.tinkerpop.machine.coefficients.LongCoefficient;
-import org.apache.tinkerpop.machine.functions.filters.IdentityTest;
import org.apache.tinkerpop.machine.strategies.IdentityStrategy;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class PipesIdentityTest extends IdentityTest {
-
- 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));
- }
+public class TraversalSourceLibrary {
+ public static final TraversalSource<Long>[] LONG_SOURCES = new
TraversalSource[]{
+ Gremlin.<Long>traversal().withProcessor(BeamProcessor.class),
+
Gremlin.<Long>traversal().withCoefficient(LongCoefficient.class).withProcessor(BeamProcessor.class),
+
Gremlin.<Long>traversal().withProcessor(BeamProcessor.class).withStrategy(IdentityStrategy.class)};
}
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/filter/BeamHasKeyValueTest.java
similarity index 71%
copy from
java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
copy to
java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/filter/BeamHasKeyValueTest.java
index 6bc5a89..e72ea88 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
+++
b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/filter/BeamHasKeyValueTest.java
@@ -16,18 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.pipes.util;
+package org.apache.tinkerpop.machine.beam.functions.filter;
-import java.io.Serializable;
+import org.apache.tinkerpop.machine.beam.functions.TraversalSourceLibrary;
+import org.apache.tinkerpop.machine.functions.filter.HasKeyValueTest;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface Reducer<S> extends Serializable {
+public class BeamHasKeyValueTest extends HasKeyValueTest {
- public void reset();
-
- public S get();
-
- public void update(final S newValue);
+ public BeamHasKeyValueTest() {
+ super(TraversalSourceLibrary.LONG_SOURCES);
+ }
}
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/filter/BeamIdentityTest.java
similarity index 71%
copy from
java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
copy to
java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/filter/BeamIdentityTest.java
index 6bc5a89..ad1e8b8 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
+++
b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/functions/filter/BeamIdentityTest.java
@@ -16,18 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.pipes.util;
+package org.apache.tinkerpop.machine.beam.functions.filter;
-import java.io.Serializable;
+import org.apache.tinkerpop.machine.beam.functions.TraversalSourceLibrary;
+import org.apache.tinkerpop.machine.functions.filter.IdentityTest;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface Reducer<S> extends Serializable {
+public class BeamIdentityTest extends IdentityTest {
- public void reset();
+ public BeamIdentityTest() {
+ super(TraversalSourceLibrary.LONG_SOURCES);
+ }
- public S get();
-
- public void update(final S newValue);
-}
+}
\ No newline at end of file
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
index 9de62ae..64c2387 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
@@ -27,7 +27,7 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class BranchStep<C, S, E> extends AbstractStep<C, S, E> {
+public final class BranchStep<C, S, E> extends AbstractStep<C, S, E> {
private final BranchFunction<C, S, E> branchFunction;
private Iterator<Traverser<C, E>> iterator = Collections.emptyIterator();
@@ -51,9 +51,8 @@ public class BranchStep<C, S, E> extends AbstractStep<C, S,
E> {
@Override
public Traverser<C, E> next() {
- if (!this.iterator.hasNext()) {
+ if (!this.iterator.hasNext())
this.iterator =
super.getPreviousTraverser().branch(this.branchFunction);
- }
return this.iterator.next();
}
}
\ No newline at end of file
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FilterStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FilterStep.java
index aeee847..3541017 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FilterStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FilterStep.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.machine.traversers.Traverser;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class FilterStep<C, S> extends AbstractStep<C, S, S> {
+public final class FilterStep<C, S> extends AbstractStep<C, S, S> {
private final FilterFunction<C, S> filterFunction;
private Traverser<C, S> nextTraverser = null;
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
index 1dcd090..10aa72d 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
@@ -27,7 +27,7 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class FlatMapStep<C, S, E> extends AbstractStep<C, S, E> {
+public final class FlatMapStep<C, S, E> extends AbstractStep<C, S, E> {
private final FlatMapFunction<C, S, E> flatMapFunction;
private Iterator<Traverser<C, E>> iterator = Collections.emptyIterator();
@@ -51,9 +51,8 @@ public class FlatMapStep<C, S, E> extends AbstractStep<C, S,
E> {
@Override
public Traverser<C, E> next() {
- if (!this.iterator.hasNext()) {
+ if (!this.iterator.hasNext())
this.iterator =
super.getPreviousTraverser().flatMap(this.flatMapFunction);
- }
return this.iterator.next();
}
}
\ No newline at end of file
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/InitialStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/InitialStep.java
index 0138ed3..6248ef9 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/InitialStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/InitialStep.java
@@ -28,7 +28,7 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class InitialStep<C, S> extends AbstractStep<C, S, S> {
+public final class InitialStep<C, S> extends AbstractStep<C, S, S> {
private Iterator<S> objects;
private final TraverserFactory<C> traverserFactory;
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/MapStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/MapStep.java
index fa8b49f..089257b 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/MapStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/MapStep.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.machine.traversers.Traverser;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class MapStep<C, S, E> extends AbstractStep<C, S, E> {
+public final class MapStep<C, S, E> extends AbstractStep<C, S, E> {
private final MapFunction<C, S, E> mapFunction;
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
index 1d19e0c..5cda654 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
@@ -36,7 +36,7 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class Pipes<C, S, E> implements Processor<C, S, E> {
+public final class Pipes<C, S, E> implements Processor<C, S, E> {
private final List<Step<?, ?, ?>> steps = new ArrayList<>();
private Step<C, ?, E> endStep;
@@ -57,7 +57,8 @@ public class Pipes<C, S, E> implements Processor<C, S, E> {
else if (function instanceof InitialFunction)
nextStep = new InitialStep((InitialFunction<C, S>) function,
compilation.getTraverserFactory());
else if (function instanceof ReduceFunction)
- nextStep = new ReduceStep(previousStep, (ReduceFunction<C, ?,
?>) function, new BasicReducer<>(((ReduceFunction<C, ?, ?>)
function).getInitialValue()), compilation.getTraverserFactory());
+ nextStep = new ReduceStep(previousStep, (ReduceFunction<C, ?,
?>) function,
+ new BasicReducer<>(((ReduceFunction<C, ?, ?>)
function).getInitialValue()), compilation.getTraverserFactory());
else
throw new RuntimeException("You need a new step type:" +
function);
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/PipesProcessor.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/PipesProcessor.java
index 1ab1eb0..866c86f 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/PipesProcessor.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/PipesProcessor.java
@@ -30,7 +30,7 @@ import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class PipesProcessor implements ProcessorFactory {
+public final class PipesProcessor implements ProcessorFactory {
public PipesProcessor() {
}
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/ReduceStep.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/ReduceStep.java
index 772d58b..0a9f0f0 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/ReduceStep.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/ReduceStep.java
@@ -26,7 +26,7 @@ import
org.apache.tinkerpop.machine.traversers.TraverserFactory;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class ReduceStep<C, S, E> extends AbstractStep<C, S, E> {
+public final class ReduceStep<C, S, E> extends AbstractStep<C, S, E> {
private final ReduceFunction<C, S, E> reduceFunction;
private final Reducer<E> reducer;
@@ -47,7 +47,7 @@ public class ReduceStep<C, S, E> extends AbstractStep<C, S,
E> {
public Traverser<C, E> next() {
Traverser<C, S> traverser = null;
while (this.hasNext()) {
- traverser = getPreviousTraverser();
+ traverser = super.getPreviousTraverser();
this.reducer.update(this.reduceFunction.apply(traverser,
this.reducer.get()));
}
this.done = true;
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/strategies/PipesStrategy.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/strategies/PipesStrategy.java
index 8b2cf53..cafb897 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/strategies/PipesStrategy.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/strategies/PipesStrategy.java
@@ -27,7 +27,7 @@ import org.apache.tinkerpop.machine.strategies.Strategy;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class PipesStrategy implements Strategy {
+public final class PipesStrategy implements Strategy {
@Override
public <C> void apply(final Bytecode<C> bytecode) {
if (!BytecodeUtil.hasSourceInstruction(bytecode,
Symbols.WITH_PROCESSOR))
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/BasicReducer.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/BasicReducer.java
index 8d7c1fd..489db46 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/BasicReducer.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/BasicReducer.java
@@ -21,7 +21,7 @@ package org.apache.tinkerpop.machine.pipes.util;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class BasicReducer<S> implements Reducer<S> {
+public final class BasicReducer<S> implements Reducer<S> {
private S value;
private final S initialValue;
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
index 6bc5a89..2bdaf44 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
+++
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
@@ -25,9 +25,9 @@ import java.io.Serializable;
*/
public interface Reducer<S> extends Serializable {
- public void reset();
-
public S get();
public void update(final S newValue);
+
+ public void reset();
}
diff --git
a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
index 2275507..691ae6e 100644
---
a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
+++
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
@@ -27,6 +27,8 @@ import
org.apache.tinkerpop.machine.coefficients.LongCoefficient;
import org.apache.tinkerpop.machine.strategies.IdentityStrategy;
import org.junit.jupiter.api.Test;
+import java.util.Map;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@@ -39,7 +41,7 @@ public class PipesTest {
.withProcessor(PipesProcessor.class)
.withStrategy(IdentityStrategy.class);
- Traversal<Long, Long, ?> traversal = g.inject(7L, 10L,
12L).identity().incr().incr().path().by(__.count());
+ Traversal<Long, ?, ?> traversal =
g.inject(1L,1L,1L,2L).groupCount().has(__.count(),__.count().incr().incr());
System.out.println(TraversalUtil.getBytecode(traversal));
System.out.println(traversal);
System.out.println(traversal.toList());
diff --git
a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamIdentityTest.java
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/TraversalSourceLibrary.java
similarity index 63%
rename from
java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamIdentityTest.java
rename to
java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/TraversalSourceLibrary.java
index f48244e..a3c2d25 100644
---
a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamIdentityTest.java
+++
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/TraversalSourceLibrary.java
@@ -16,23 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.beam;
+package org.apache.tinkerpop.machine.pipes.functions;
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.apache.tinkerpop.machine.pipes.PipesProcessor;
import org.apache.tinkerpop.machine.strategies.IdentityStrategy;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class BeamIdentityTest extends IdentityTest {
+public class TraversalSourceLibrary {
- 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));
- }
+ public static final TraversalSource<Long>[] LONG_SOURCES = new
TraversalSource[]{
+ Gremlin.<Long>traversal().withProcessor(PipesProcessor.class),
+
Gremlin.<Long>traversal().withCoefficient(LongCoefficient.class).withProcessor(PipesProcessor.class),
+
Gremlin.<Long>traversal().withProcessor(PipesProcessor.class).withStrategy(IdentityStrategy.class)};
-}
\ No newline at end of file
+}
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/filter/PipesHasKeyValueTest.java
similarity index 70%
copy from
java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
copy to
java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/filter/PipesHasKeyValueTest.java
index 6bc5a89..01c66fd 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
+++
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/filter/PipesHasKeyValueTest.java
@@ -16,18 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.pipes.util;
+package org.apache.tinkerpop.machine.pipes.functions.filter;
-import java.io.Serializable;
+import org.apache.tinkerpop.machine.functions.filter.HasKeyValueTest;
+import org.apache.tinkerpop.machine.pipes.functions.TraversalSourceLibrary;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface Reducer<S> extends Serializable {
+public class PipesHasKeyValueTest extends HasKeyValueTest {
- public void reset();
-
- public S get();
-
- public void update(final S newValue);
+ public PipesHasKeyValueTest() {
+ super(TraversalSourceLibrary.LONG_SOURCES);
+ }
}
diff --git
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/filter/PipesIdentityTest.java
similarity index 71%
copy from
java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
copy to
java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/filter/PipesIdentityTest.java
index 6bc5a89..b9e35ab 100644
---
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/util/Reducer.java
+++
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/functions/filter/PipesIdentityTest.java
@@ -16,18 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.pipes.util;
+package org.apache.tinkerpop.machine.pipes.functions.filter;
-import java.io.Serializable;
+import org.apache.tinkerpop.machine.functions.filter.IdentityTest;
+import org.apache.tinkerpop.machine.pipes.functions.TraversalSourceLibrary;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface Reducer<S> extends Serializable {
+public class PipesIdentityTest extends IdentityTest {
- public void reset();
+ public PipesIdentityTest() {
+ super(TraversalSourceLibrary.LONG_SOURCES);
+ }
- public S get();
-
- public void update(final S newValue);
}
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/filter/HasKeyValueTest.java
similarity index 58%
copy from
java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
copy to
java/test/src/main/java/org/apache/tinkerpop/machine/functions/filter/HasKeyValueTest.java
index 334428f..e3ed7ce 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/filter/HasKeyValueTest.java
@@ -16,54 +16,44 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.functions.filters;
+package org.apache.tinkerpop.machine.functions.filter;
import org.apache.tinkerpop.language.TraversalSource;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public abstract class IdentityTest {
+public abstract class HasKeyValueTest {
private List<TraversalSource<Long>> sources;
- public IdentityTest(final TraversalSource<Long>... sources) {
+ public HasKeyValueTest(final TraversalSource<Long>... sources) {
this.sources = Arrays.asList(sources);
}
@Test
- public void g_injectX2X_identity() {
+ public void g_injectXa_1__b_2X_hasXa_1X() {
for (final TraversalSource<Long> g : this.sources) {
- final List<Long> list = g.inject(2L).identity().toList();
+ final Map<String, Integer> map = Map.of("a", 1, "b", 2);
+ final List<Map<String, Integer>> list = g.inject(map).has("a",
1).toList();
assertEquals(1, list.size());
- assertEquals(2L, list.get(0));
+ assertEquals(map, list.get(0));
}
}
@Test
- public void g_injectX1_2X_identity_asXaX() {
+ public void g_injectXa_a_a_bX_groupCount_hasXa_1X() {
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));
+ assertFalse(g.inject("a", "a", "a", "b").groupCount().has("a",
1L).hasNext());
}
}
- @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));
- }
- }
}
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/filter/IdentityTest.java
similarity index 97%
rename from
java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
rename to
java/test/src/main/java/org/apache/tinkerpop/machine/functions/filter/IdentityTest.java
index 334428f..554ea8c 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/filter/IdentityTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.functions.filters;
+package org.apache.tinkerpop.machine.functions.filter;
import org.apache.tinkerpop.language.TraversalSource;
import org.junit.jupiter.api.Test;