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 2015/02/13 23:41:15 UTC
[5/8] incubator-tinkerpop git commit: Added `dedup(local)` and
`sample(local)`.
Added `dedup(local)` and `sample(local)`.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/a40babe2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/a40babe2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/a40babe2
Branch: refs/heads/master
Commit: a40babe22fec50507c6a536cfc00e70a733ba53b
Parents: 1e85ddf
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri Feb 13 22:53:01 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri Feb 13 22:53:01 2015 +0100
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../graph/traversal/ElementTraversal.java | 29 ++++-----
.../process/graph/traversal/GraphTraversal.java | 42 ++++---------
.../gremlin/process/graph/traversal/__.java | 23 +++----
.../traversal/step/map/DedupLocalStep.java | 40 ++++++++++++
.../traversal/step/map/SampleLocalStep.java | 49 +++++++++++++++
.../step/filter/GroovyDedupTest.groovy | 28 +++++++--
.../step/filter/GroovySampleTest.groovy | 28 ++++++++-
.../process/GroovyProcessComputerSuite.java | 2 +-
.../gremlin/process/ProcessComputerSuite.java | 2 +-
.../graph/traversal/step/filter/DedupTest.java | 63 ++++++++++++++++++-
.../graph/traversal/step/filter/SampleTest.java | 66 ++++++++++++++++++--
.../tinkergraph/structure/TinkerGraphTest.java | 16 ++++-
13 files changed, 307 insertions(+), 82 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index c94a08b..33a381d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -9,6 +9,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Added `dedup(local)` and `sample(local)`.
* Added `count(local)`, `sum(local)`, `max(local)`, `min(local)`, and `mean(local)` operating on the local object (e.g. collection, map, etc.)
* `TraversalComparator` exists which allows for `order().by(outE().count(),decr)`.
* Apache refactoring: `com.tinkerpop` -> `org.apache.tinkerpop`.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
index 516acff..4612c18 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
@@ -18,30 +18,15 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal;
-import org.apache.tinkerpop.gremlin.process.Path;
-import org.apache.tinkerpop.gremlin.process.Scope;
-import org.apache.tinkerpop.gremlin.process.T;
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.*;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.*;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.function.BiFunction;
-import java.util.function.BiPredicate;
-import java.util.function.BinaryOperator;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
+import java.util.function.*;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -240,6 +225,10 @@ public abstract interface ElementTraversal<A extends Element> {
return this.start().dedup();
}
+ public default GraphTraversal<A, A> dedup(final Scope scope) {
+ return this.start().dedup(scope);
+ }
+
public default GraphTraversal<A, A> except(final String sideEffectKeyOrPathLabel) {
return this.start().except(sideEffectKeyOrPathLabel);
}
@@ -360,6 +349,10 @@ public abstract interface ElementTraversal<A extends Element> {
return this.start().sample(amountToSample);
}
+ public default GraphTraversal<A, A> sample(final Scope scope, final int amountToSample) {
+ return this.start().sample(scope, amountToSample);
+ }
+
///////////////////// SIDE-EFFECT STEPS /////////////////////
public default GraphTraversal<A, A> sideEffect(final Consumer<Traverser<A>> consumer) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
index 83e4175..2520cc5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
@@ -53,37 +53,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SampleSt
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SimplePathStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.TimeLimitStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.WhereStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.BackStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.CoalesceStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.CountGlobalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.CountLocalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.EdgeOtherVertexStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.EdgeVertexStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.FoldStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.IdStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.KeyStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.LabelStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.LambdaFlatMapStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.LambdaMapStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MaxGlobalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MaxLocalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MeanGlobalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MeanLocalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MinGlobalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MinLocalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.OrderGlobalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.OrderLocalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.PathStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.PropertiesStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.PropertyMapStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.PropertyValueStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.SackStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.SelectOneStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.SelectStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.SumGlobalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.SumLocalStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.UnfoldStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.VertexStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.*;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.match.MatchStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.AddEdgeStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.AggregateStep;
@@ -394,6 +364,10 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep(new DedupStep<>(this.asAdmin()));
}
+ public default GraphTraversal<S, E> dedup(final Scope scope) {
+ return this.asAdmin().addStep(scope.equals(Scope.global) ? new DedupStep<>(this.asAdmin()) : new DedupLocalStep<>(this.asAdmin()));
+ }
+
public default GraphTraversal<S, E> except(final String sideEffectKeyOrPathLabel) {
return this.asAdmin().addStep(new ExceptStep<E>(this.asAdmin(), sideEffectKeyOrPathLabel));
}
@@ -514,6 +488,12 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep(new SampleStep<>(this.asAdmin(), amountToSample));
}
+ public default GraphTraversal<S, E> sample(final Scope scope, final int amountToSample) {
+ return this.asAdmin().addStep(scope.equals(Scope.global)
+ ? new SampleStep<>(this.asAdmin(), amountToSample)
+ : new SampleLocalStep<>(this.asAdmin(), amountToSample));
+ }
+
///////////////////// SIDE-EFFECT STEPS /////////////////////
public default GraphTraversal<S, E> sideEffect(final Consumer<Traverser<E>> consumer) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
index 56f1ff7..6148dbc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
@@ -18,11 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal;
-import org.apache.tinkerpop.gremlin.process.Path;
-import org.apache.tinkerpop.gremlin.process.Scope;
-import org.apache.tinkerpop.gremlin.process.T;
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.*;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -33,14 +29,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.function.BiFunction;
-import java.util.function.BiPredicate;
-import java.util.function.BinaryOperator;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
+import java.util.function.*;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -271,6 +260,10 @@ public class __ {
return __.<A>start().dedup();
}
+ public static <A> GraphTraversal<A, A> dedup(final Scope scope) {
+ return __.<A>start().dedup(scope);
+ }
+
public static <A> GraphTraversal<A, A> except(final String sideEffectKeyOrPathLabel) {
return __.<A>start().except(sideEffectKeyOrPathLabel);
}
@@ -391,6 +384,10 @@ public class __ {
return __.<A>start().sample(amountToSample);
}
+ public static <A> GraphTraversal<A, A> sample(final Scope scope, final int amountToSample) {
+ return __.<A>start().sample(scope, amountToSample);
+ }
+
///////////////////// SIDE-EFFECT STEPS /////////////////////
public static <A> GraphTraversal<A, A> sideEffect(final Consumer<Traverser<A>> consumer) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/DedupLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/DedupLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/DedupLocalStep.java
new file mode 100644
index 0000000..6aa546d
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/DedupLocalStep.java
@@ -0,0 +1,40 @@
+/*
+ * 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.gremlin.process.graph.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+
+import java.util.HashSet;
+import java.util.stream.Collectors;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public final class DedupLocalStep<S> extends LocalBarrierStep<S, S> {
+
+ public DedupLocalStep(final Traversal.Admin traversal) {
+ super(traversal);
+ }
+
+ @Override
+ protected S map(final Traverser.Admin<S> traverser) {
+ return (S) this.collect(traverser).stream().collect(Collectors.toCollection(HashSet::new));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SampleLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SampleLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SampleLocalStep.java
new file mode 100644
index 0000000..16fc673
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SampleLocalStep.java
@@ -0,0 +1,49 @@
+/*
+ * 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.gremlin.process.graph.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public final class SampleLocalStep<S> extends LocalBarrierStep<S, S> {
+
+ private final int amountToSample;
+
+ public SampleLocalStep(final Traversal.Admin traversal, final int amountToSample) {
+ super(traversal);
+ this.amountToSample = amountToSample;
+ }
+
+ @Override
+ protected S map(final Traverser.Admin<S> traverser) {
+ final List elements = new ArrayList(this.collect(traverser));
+ if (elements.size() <= this.amountToSample) return (S) elements;
+ Collections.shuffle(elements);
+ return (S) elements.subList(0, this.amountToSample);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
index 8ef306f..3e69814 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
@@ -18,12 +18,15 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter
+import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.Scope
import org.apache.tinkerpop.gremlin.process.T
import org.apache.tinkerpop.gremlin.process.Traversal
-import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupTest
import org.apache.tinkerpop.gremlin.structure.Vertex
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.bothE
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.dedup
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Daniel Kuppitz (http://gremlin.guru)
@@ -45,22 +48,35 @@ public abstract class GroovyDedupTest {
public Traversal<Vertex, String> get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value() {
g.V().both().properties('name').order.by { a, b -> a.value() <=> b.value() }.dedup.value
}
+
+ @Override
+ Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
+ g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local)).cap()
+ }
}
- public static class ComputerTestImpl extends DedupTest {
+ public static class ComputerTest extends DedupTest {
@Override
public Traversal<Vertex, String> get_g_V_both_dedup_name() {
- ComputerTestHelper.compute("g.V.both.dedup.name", g);
+ g.V.both.dedup.name // TODO
+ //ComputerTestHelper.compute("g.V.both.dedup.name", g);
}
@Override
public Traversal<Vertex, String> get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name() {
- ComputerTestHelper.compute("g.V.both.has(T.label,'software').dedup.by('lang').name", g);
+ g.V.both.has(T.label, 'software').dedup.by('lang').name // TODO
+ //ComputerTestHelper.compute("g.V.both.has(T.label,'software').dedup.by('lang').name", g);
}
@Override
public Traversal<Vertex, String> get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value() {
- ComputerTestHelper.compute("g.V.both.properties('name').order.by { a, b -> a.value() <=> b.value() }.dedup.value", g);
+ g.V().both().properties('name').order.by { a, b -> a.value() <=> b.value() }.dedup.value // TODO
+ //ComputerTestHelper.compute("g.V.both.properties('name').order.by { a, b -> a.value() <=> b.value() }.dedup.value", g);
+ }
+
+ @Override
+ Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
+ ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local)).cap()", g);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
index 84d0b8a..801a527 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
@@ -18,13 +18,17 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter
+import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.Scope
+import org.apache.tinkerpop.gremlin.process.T
import org.apache.tinkerpop.gremlin.process.Traversal
import org.apache.tinkerpop.gremlin.process.graph.traversal.__
-import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SampleTest
import org.apache.tinkerpop.gremlin.structure.Edge
import org.apache.tinkerpop.gremlin.structure.Vertex
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.bothE
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.sample
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@@ -46,6 +50,16 @@ public abstract class GroovySampleTest {
public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
g.V.local(__.outE.sample(1).by('weight'))
}
+
+ @Override
+ Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2)).cap()
+ }
+
+ @Override
+ Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5)).cap()
+ }
}
public static class ComputerTest extends SampleTest {
@@ -64,5 +78,15 @@ public abstract class GroovySampleTest {
public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
ComputerTestHelper.compute("g.V.local(__.outE.sample(1).by('weight'))", g)
}
+
+ @Override
+ Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2)).cap()", g)
+ }
+
+ @Override
+ Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5)).cap()", g)
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index 239e234..2d61246 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@ -55,7 +55,7 @@ public class GroovyProcessComputerSuite extends ProcessComputerSuite {
GroovyAndTest.ComputerTest.class,
GroovyCoinTest.ComputerTest.class,
GroovyCyclicPathTest.ComputerTest.class,
- // TODO: GroovyDedupTest.ComputerTest.class
+ GroovyDedupTest.ComputerTest.class,
// TODO: GroovyExceptTest.ComputerTest.class,
GroovyFilterTest.ComputerTest.class,
GroovyHasNotTest.ComputerTest.class,
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index cf03949..a894f34 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -83,7 +83,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
AndTest.ComputerTest.class,
CoinTest.ComputerTest.class,
CyclicPathTest.ComputerTest.class,
- // TODO: DedupTest.ComputerTest.class
+ DedupTest.ComputerTest.class,
ExceptTest.ComputerTest.class,
FilterTest.ComputerTest.class,
HasNotTest.ComputerTest.class,
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
index 7b82f7a..234a182 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
@@ -18,18 +18,21 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
-import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.Scope;
import org.apache.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.StreamFactory;
import org.junit.Test;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.bothE;
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.dedup;
import static org.junit.Assert.*;
/**
@@ -37,7 +40,7 @@ import static org.junit.Assert.*;
* @author Stephen Mallette (http://stephen.genoprime.com)
* @author Daniel Kuppitz (http://gremlin.guru)
*/
-public abstract class DedupTest extends AbstractGremlinTest {
+public abstract class DedupTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, String> get_g_V_both_dedup_name();
@@ -45,6 +48,8 @@ public abstract class DedupTest extends AbstractGremlinTest {
public abstract Traversal<Vertex, String> get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value();
+ public abstract Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap();
+
@Test
@LoadGraphWith(MODERN)
public void g_V_both_dedup_name() {
@@ -88,8 +93,28 @@ public abstract class DedupTest extends AbstractGremlinTest {
assertFalse(traversal.hasNext());
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
+ final Traversal<Vertex, Map<String, Set<Double>>> traversal =
+ get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ final Map<String, Set<Double>> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(2, map.size());
+ assertEquals(3, map.get("software").size());
+ assertEquals(4, map.get("person").size());
+ assertEquals(new HashSet<>(Arrays.asList(0.2, 0.4, 1.0)), map.get("software"));
+ assertEquals(new HashSet<>(Arrays.asList(0.2, 0.4, 0.5, 1.0)), map.get("person"));
+ }
+
public static class StandardTest extends DedupTest {
+ public StandardTest() {
+ requiresGraphComputer = false;
+ }
+
@Override
public Traversal<Vertex, String> get_g_V_both_dedup_name() {
return g.V().both().dedup().values("name");
@@ -104,5 +129,37 @@ public abstract class DedupTest extends AbstractGremlinTest {
public Traversal<Vertex, String> get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value() {
return g.V().both().<String>properties("name").order().by((a, b) -> a.value().compareTo(b.value())).dedup().value();
}
+
+ @Override
+ public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
+ return g.V().group().by(T.label).by(bothE().values("weight").fold()).by(dedup(Scope.local)).cap();
+ }
+ }
+
+ public static class ComputerTest extends StandardTest {
+
+ public ComputerTest() {
+ requiresGraphComputer = true;
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_both_dedup_name() {
+ return super.get_g_V_both_dedup_name()/*.submit(g.compute())*/; // TODO
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name() {
+ return super.get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name()/*.submit(g.compute())*/; // TODO
+ }
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value() {
+ return super.get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value()/*.submit(g.compute())*/; // TODO
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
+ return super.get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap().submit(g.compute());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
index 2b830c4..bcd2724 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
@@ -20,11 +20,16 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.Scope;
+import org.apache.tinkerpop.gremlin.process.T;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.Test;
+import java.util.Collection;
+import java.util.Map;
+
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.*;
import static org.junit.Assert.*;
@@ -40,6 +45,10 @@ public abstract class SampleTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX();
+ public abstract Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX();
+
+ public abstract Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX();
+
@Test
@LoadGraphWith(MODERN)
public void g_E_sampleX1X() {
@@ -73,6 +82,34 @@ public abstract class SampleTest extends AbstractGremlinProcessTest {
assertFalse(traversal.hasNext());
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ final Traversal<Vertex, Map<String, Collection<Double>>> traversal =
+ get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ final Map<String, Collection<Double>> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(2, map.size());
+ assertEquals(2, map.get("software").size());
+ assertEquals(2, map.get("person").size());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ final Traversal<Vertex, Map<String, Collection<Double>>> traversal =
+ get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX();
+ printTraversalForm(traversal);
+ assertTrue(traversal.hasNext());
+ final Map<String, Collection<Double>> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(2, map.size());
+ assertEquals(4, map.get("software").size());
+ assertEquals(5, map.get("person").size());
+ }
+
public static class StandardTest extends SampleTest {
public StandardTest() {
@@ -93,26 +130,47 @@ public abstract class SampleTest extends AbstractGremlinProcessTest {
public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
return g.V().local(outE().sample(1).by("weight"));
}
+
+ @Override
+ public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ return g.V().group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 2)).cap();
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ return g.V().group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 5)).cap();
+ }
}
- public static class ComputerTest extends SampleTest {
+ public static class ComputerTest extends StandardTest {
+
public ComputerTest() {
requiresGraphComputer = true;
}
@Override
public Traversal<Edge, Edge> get_g_E_sampleX1X() {
- return g.E().sample(1); // TODO: makes no sense when its global
+ return super.get_g_E_sampleX1X(); // TODO: makes no sense when its global
}
@Override
public Traversal<Edge, Edge> get_g_E_sampleX2X_byXweightX() {
- return g.E().sample(2).by("weight"); // TODO: makes no sense when its global
+ return super.get_g_E_sampleX2X_byXweightX(); // TODO: makes no sense when its global
}
@Override
public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
- return g.V().local(outE().sample(1).by("weight")).submit(g.compute());
+ return super.get_g_V_localXoutE_sampleX1X_byXweightXX().submit(g.compute());
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
+ return super.get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX().submit(g.compute());
+ }
+
+ @Override
+ public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
+ return super.get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX().submit(g.compute());
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a40babe2/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 0684723..5186eb7 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -189,10 +189,20 @@ public class TinkerGraphTest {
public void testPlayDK() throws Exception {
Graph g = TinkerFactory.createModern();
- Traversal t = g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).cap();
- System.out.println(t.toString());
+ Traversal t = g.V().group().by(T.label).by(bothE().values("weight").fold()).by(dedup(Scope.local)).cap();
+ t.forEachRemaining(System.out::println);
+ System.out.println("--");
+
+ t = g.V().group().by(T.label).by(bothE().values("weight").fold()).cap();
+ t.forEachRemaining(System.out::println);
+ System.out.println("--");
+
+ t = g.V().group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 2)).cap();
+ t.forEachRemaining(System.out::println);
+ System.out.println("--");
+
+ t = g.V().group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 4)).cap();
t.forEachRemaining(System.out::println);
- System.out.println(t.toString());
}
/**