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:11 UTC

[1/8] incubator-tinkerpop git commit: simplified local aggregation steps

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 446df04f0 -> 4172c3a2d


simplified local aggregation steps


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/8226a0be
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/8226a0be
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/8226a0be

Branch: refs/heads/master
Commit: 8226a0be8e725026d6ad7fdba4d05c0e66ec68d2
Parents: e1da1e1
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri Feb 13 16:34:04 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri Feb 13 16:34:04 2015 +0100

----------------------------------------------------------------------
 .../traversal/step/map/CountLocalStep.java      | 17 +------
 .../traversal/step/map/LocalAggregateStep.java  | 53 ++++++++++++++++++++
 .../graph/traversal/step/map/MaxLocalStep.java  | 23 ++-------
 .../graph/traversal/step/map/MeanLocalStep.java | 24 ++-------
 .../graph/traversal/step/map/MinLocalStep.java  | 23 ++-------
 .../graph/traversal/step/map/SumLocalStep.java  | 24 +--------
 6 files changed, 66 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8226a0be/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
index 7f89abb..8a1d0e0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
@@ -22,15 +22,13 @@ import org.apache.tinkerpop.gremlin.process.Traversal;
 import org.apache.tinkerpop.gremlin.process.Traverser;
 import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
 
-import java.util.Collection;
 import java.util.Collections;
-import java.util.Map;
 import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class CountLocalStep<S> extends MapStep<S, Long> {
+public final class CountLocalStep<S> extends LocalAggregateStep<S, Long> {
 
     public CountLocalStep(final Traversal.Admin traversal) {
         super(traversal);
@@ -38,17 +36,6 @@ public final class CountLocalStep<S> extends MapStep<S, Long> {
 
     @Override
     protected Long map(final Traverser.Admin<S> traverser) {
-        final S start = traverser.get();
-        if (start instanceof Collection)
-            return (long) ((Collection) start).size();
-        else if (start instanceof Map)
-            return (long) ((Map) start).size();
-        else
-            return 1L;
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
+        return (long) collect(traverser).size();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8226a0be/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java
new file mode 100644
index 0000000..4e99de2
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.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.gremlin.process.graph.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class LocalAggregateStep<S, E> extends MapStep<S, E> {
+
+    public LocalAggregateStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    protected <E2> Collection<E2> collect(final Traverser.Admin<S> traverser) {
+        final S start = traverser.get();
+        if (start instanceof Collection)
+            return (Collection<E2>) start;
+        else if (start instanceof Map)
+            return (Collection<E2>) ((Map) start).values();
+        else
+            return Collections.singleton((E2) start);
+    }
+
+    @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return Collections.singleton(TraverserRequirement.OBJECT);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8226a0be/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
index 059af47..b19e8dc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
@@ -22,14 +22,13 @@ import org.apache.tinkerpop.gremlin.process.Traversal;
 import org.apache.tinkerpop.gremlin.process.Traverser;
 import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MaxLocalStep<S> extends MapStep<S, Number> {
+public final class MaxLocalStep<S> extends LocalAggregateStep<S, Number> {
 
     public MaxLocalStep(final Traversal.Admin traversal) {
         super(traversal);
@@ -37,23 +36,7 @@ public final class MaxLocalStep<S> extends MapStep<S, Number> {
 
     @Override
     protected Number map(final Traverser.Admin<S> traverser) {
-        final S start = traverser.get();
-        if (start instanceof Number) {
-            return (Number) start;
-        } else if (start instanceof Collection) {
-            Number temp = Double.MIN_VALUE;
-            for (final Number number : (Collection<Number>) start) {
-                if (number.doubleValue() > temp.doubleValue())
-                    temp = number;
-            }
-            return temp;
-        } else
-            return Double.NaN;
-    }
-
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
+        return this.<Number>collect(traverser).stream().mapToDouble(Number::doubleValue).max()
+                .orElseGet(() -> Double.NaN);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8226a0be/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
index 659e4d3..1a01f8c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
@@ -22,14 +22,13 @@ import org.apache.tinkerpop.gremlin.process.Traversal;
 import org.apache.tinkerpop.gremlin.process.Traverser;
 import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MeanLocalStep<S> extends MapStep<S, Double> {
+public final class MeanLocalStep<S> extends LocalAggregateStep<S, Double> {
 
     public MeanLocalStep(final Traversal.Admin traversal) {
         super(traversal);
@@ -37,24 +36,7 @@ public final class MeanLocalStep<S> extends MapStep<S, Double> {
 
     @Override
     protected Double map(final Traverser.Admin<S> traverser) {
-        final S start = traverser.get();
-        if (start instanceof Collection) {
-            double sum = 0.0d;
-            int count = 0;
-            for (final Number number : (Collection<Number>) start) {
-                count++;
-                sum = sum + number.doubleValue();
-            }
-            return sum / count;
-        } else if (start instanceof Number) {
-            return ((Number) start).doubleValue();
-        } else {
-            return Double.NaN;
-        }
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
+        return this.<Number>collect(traverser).stream().mapToDouble(Number::doubleValue).average()
+                .orElseGet(() -> Double.NaN);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8226a0be/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
index 7bf71a7..72aa2a7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
@@ -22,14 +22,13 @@ import org.apache.tinkerpop.gremlin.process.Traversal;
 import org.apache.tinkerpop.gremlin.process.Traverser;
 import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MinLocalStep<S> extends MapStep<S, Number> {
+public final class MinLocalStep<S> extends LocalAggregateStep<S, Number> {
 
     public MinLocalStep(final Traversal.Admin traversal) {
         super(traversal);
@@ -37,23 +36,7 @@ public final class MinLocalStep<S> extends MapStep<S, Number> {
 
     @Override
     protected Number map(final Traverser.Admin<S> traverser) {
-        final S start = traverser.get();
-        if (start instanceof Number) {
-            return (Number) start;
-        } else if (start instanceof Collection) {
-            Number temp = Double.MAX_VALUE;
-            for (final Number number : (Collection<Number>) start) {
-                if (number.doubleValue() < temp.doubleValue())
-                    temp = number;
-            }
-            return temp;
-        } else
-            return Double.NaN;
-    }
-
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
+        return this.<Number>collect(traverser).stream().mapToDouble(Number::doubleValue).min()
+                .orElseGet(() -> Double.NaN);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8226a0be/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
index 1398f71..933331b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
@@ -20,16 +20,11 @@ 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 org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class SumLocalStep<S> extends MapStep<S, Double> {
+public final class SumLocalStep<S> extends LocalAggregateStep<S, Double> {
 
     public SumLocalStep(final Traversal.Admin traversal) {
         super(traversal);
@@ -37,21 +32,6 @@ public final class SumLocalStep<S> extends MapStep<S, Double> {
 
     @Override
     protected Double map(final Traverser.Admin<S> traverser) {
-        final S start = traverser.get();
-        if (start instanceof Collection) {
-            double sum = 0.0d;
-            for (final Number number : (Collection<Number>) start) {
-                sum = sum + number.doubleValue();
-            }
-            return sum;
-        } else if (start instanceof Number) {
-            return ((Number) start).doubleValue();
-        } else
-            return Double.NaN;
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
+        return this.<Number>collect(traverser).stream().mapToDouble(Number::doubleValue).sum();
     }
 }


[4/8] incubator-tinkerpop git commit: fixed return type

Posted by ok...@apache.org.
fixed return type


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/1e85ddfa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/1e85ddfa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/1e85ddfa

Branch: refs/heads/master
Commit: 1e85ddfa95c3dbac59f4fd3707e2d747bf3f6919
Parents: 3d4335b
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri Feb 13 21:44:32 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri Feb 13 21:44:32 2015 +0100

----------------------------------------------------------------------
 .../process/graph/traversal/step/map/GroovyMaxTest.groovy     | 7 ++++---
 .../process/graph/traversal/step/map/GroovyMeanTest.groovy    | 4 ++--
 .../process/graph/traversal/step/map/GroovyMinTest.groovy     | 4 ++--
 .../process/graph/traversal/step/map/GroovySumTest.groovy     | 4 ++--
 4 files changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1e85ddfa/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
index 8469834..100f943 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
@@ -24,7 +24,8 @@ import org.apache.tinkerpop.gremlin.process.Traversal
 import org.apache.tinkerpop.gremlin.process.graph.traversal.__
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
-import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.*
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.bothE
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.max
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -44,7 +45,7 @@ public abstract class GroovyMaxTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
             g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local)).cap()
         }
     }
@@ -62,7 +63,7 @@ public abstract class GroovyMaxTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
             ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local)).cap()", g)
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1e85ddfa/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
index 9bd3d10..8524e6e 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
@@ -39,7 +39,7 @@ public abstract class GroovyMeanTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
             g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local)).cap()
         }
     }
@@ -52,7 +52,7 @@ public abstract class GroovyMeanTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
             ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local)).cap()", g)
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1e85ddfa/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
index 6f4c4fe..3b6152a 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
@@ -45,7 +45,7 @@ public abstract class GroovyMinTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
             g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local)).cap()
         }
     }
@@ -63,7 +63,7 @@ public abstract class GroovyMinTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
             ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local)).cap()", g)
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/1e85ddfa/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
index f039363..f78bbc7 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
@@ -39,7 +39,7 @@ public abstract class GroovySumTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
             g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local)).cap()
         }
     }
@@ -52,7 +52,7 @@ public abstract class GroovySumTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
             ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local)).cap()", g)
         }
     }


[5/8] incubator-tinkerpop git commit: Added `dedup(local)` and `sample(local)`.

Posted by ok...@apache.org.
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());
     }
 
     /**


[2/8] incubator-tinkerpop git commit: renamed LocalAggregateStep to LocalBarrierStep

Posted by ok...@apache.org.
renamed LocalAggregateStep to LocalBarrierStep


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/2f679ab6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/2f679ab6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/2f679ab6

Branch: refs/heads/master
Commit: 2f679ab6b316353291aa150fc697a5e0eccb3789
Parents: 8226a0b
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri Feb 13 16:41:24 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri Feb 13 16:41:24 2015 +0100

----------------------------------------------------------------------
 .../traversal/step/map/CountLocalStep.java      |  6 +--
 .../traversal/step/map/LocalAggregateStep.java  | 53 --------------------
 .../traversal/step/map/LocalBarrierStep.java    | 53 ++++++++++++++++++++
 .../graph/traversal/step/map/MaxLocalStep.java  |  6 +--
 .../graph/traversal/step/map/MeanLocalStep.java |  6 +--
 .../graph/traversal/step/map/MinLocalStep.java  |  6 +--
 .../graph/traversal/step/map/SumLocalStep.java  |  2 +-
 7 files changed, 58 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
index 8a1d0e0..5fc5f2c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountLocalStep.java
@@ -20,15 +20,11 @@ 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 org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class CountLocalStep<S> extends LocalAggregateStep<S, Long> {
+public final class CountLocalStep<S> extends LocalBarrierStep<S, Long> {
 
     public CountLocalStep(final Traversal.Admin traversal) {
         super(traversal);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java
deleted file mode 100644
index 4e99de2..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalAggregateStep.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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 org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Daniel Kuppitz (http://gremlin.guru)
- */
-public abstract class LocalAggregateStep<S, E> extends MapStep<S, E> {
-
-    public LocalAggregateStep(final Traversal.Admin traversal) {
-        super(traversal);
-    }
-
-    protected <E2> Collection<E2> collect(final Traverser.Admin<S> traverser) {
-        final S start = traverser.get();
-        if (start instanceof Collection)
-            return (Collection<E2>) start;
-        else if (start instanceof Map)
-            return (Collection<E2>) ((Map) start).values();
-        else
-            return Collections.singleton((E2) start);
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.OBJECT);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalBarrierStep.java
new file mode 100644
index 0000000..54b9e97
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/LocalBarrierStep.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.gremlin.process.graph.traversal.step.map;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class LocalBarrierStep<S, E> extends MapStep<S, E> {
+
+    public LocalBarrierStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    protected <E2> Collection<E2> collect(final Traverser.Admin<S> traverser) {
+        final S start = traverser.get();
+        if (start instanceof Collection)
+            return (Collection<E2>) start;
+        else if (start instanceof Map)
+            return (Collection<E2>) ((Map) start).values();
+        else
+            return Collections.singleton((E2) start);
+    }
+
+    @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return Collections.singleton(TraverserRequirement.OBJECT);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
index b19e8dc..b3b8ce3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxLocalStep.java
@@ -20,15 +20,11 @@ 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 org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MaxLocalStep<S> extends LocalAggregateStep<S, Number> {
+public final class MaxLocalStep<S> extends LocalBarrierStep<S, Number> {
 
     public MaxLocalStep(final Traversal.Admin traversal) {
         super(traversal);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
index 1a01f8c..873fd8f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanLocalStep.java
@@ -20,15 +20,11 @@ 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 org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MeanLocalStep<S> extends LocalAggregateStep<S, Double> {
+public final class MeanLocalStep<S> extends LocalBarrierStep<S, Double> {
 
     public MeanLocalStep(final Traversal.Admin traversal) {
         super(traversal);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
index 72aa2a7..04fdb45 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinLocalStep.java
@@ -20,15 +20,11 @@ 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 org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class MinLocalStep<S> extends LocalAggregateStep<S, Number> {
+public final class MinLocalStep<S> extends LocalBarrierStep<S, Number> {
 
     public MinLocalStep(final Traversal.Admin traversal) {
         super(traversal);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2f679ab6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
index 933331b..834dc8a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumLocalStep.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.gremlin.process.Traverser;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class SumLocalStep<S> extends LocalAggregateStep<S, Double> {
+public final class SumLocalStep<S> extends LocalBarrierStep<S, Double> {
 
     public SumLocalStep(final Traversal.Admin traversal) {
         super(traversal);


[6/8] incubator-tinkerpop git commit: Merge branch 'master' into local

Posted by ok...@apache.org.
Merge branch 'master' into local

Resolved Conflicts:
	CHANGELOG.asciidoc
	gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
	gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
	gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
	tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/962150e7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/962150e7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/962150e7

Branch: refs/heads/master
Commit: 962150e77fffa65f3abde9ed207f09f3a4857a92
Parents: a40babe 9024bbd
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri Feb 13 23:24:47 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri Feb 13 23:24:47 2015 +0100

----------------------------------------------------------------------
 .travis.yml                                     |  16 +++
 CHANGELOG.asciidoc                              |  20 +++
 CONTRIBUTING.asciidoc                           |  16 +++
 README.asciidoc                                 |  18 +++
 docs/preprocessor/processor.groovy              |  19 +++
 docs/src/acknowledgements.asciidoc              |  16 +++
 docs/src/conclusion.asciidoc                    |  16 +++
 docs/src/gremlin-applications.asciidoc          |  16 +++
 docs/src/implementations.asciidoc               |  16 +++
 docs/src/index.asciidoc                         |  16 +++
 docs/src/intro.asciidoc                         |  16 +++
 docs/src/preface.asciidoc                       |  16 +++
 docs/src/the-graph.asciidoc                     |  16 +++
 docs/src/the-graphcomputer.asciidoc             |  16 +++
 docs/src/the-traversal.asciidoc                 |  16 +++
 docs/src/tinkerpop-contributors.asciidoc        |  16 +++
 gremlin-console/bin/gremlin.bat                 |  17 +++
 gremlin-console/bin/gremlin.sh                  |  19 +++
 gremlin-console/conf/log4j-console.properties   |  24 ++++
 gremlin-console/conf/log4j-repl.properties      |   8 --
 gremlin-console/conf/log4j.properties           |  17 +++
 gremlin-console/conf/remote-objects.yaml        |  17 +++
 gremlin-console/conf/remote.yaml                |  17 +++
 gremlin-console/src/main/bin/gremlin.bat        |  17 +++
 gremlin-console/src/main/bin/gremlin.sh         |   2 +-
 .../plugin/gremlin-server-integration.yaml      |  17 +++
 .../gremlin/console/groovy/plugin/remote.yaml   |  17 +++
 .../tinkerpop/gremlin/process/Traversal.java    |  71 +++++-----
 .../gremlin/process/TraversalEngine.java        |  22 ++-
 .../process/TraversalInterruptedException.java  |  50 +++++++
 .../gremlin/process/TraversalStrategies.java    |   2 +-
 .../gremlin/process/TraversalStrategy.java      |   2 +-
 .../traversal/TraversalVertexProgram.java       |  14 +-
 .../traversal/step/map/ComputerResultStep.java  |  70 ++++++----
 .../computer/util/DefaultComputerResult.java    |   2 +
 .../graph/traversal/DefaultGraphTraversal.java  |   4 +-
 .../process/graph/traversal/EdgeTraversal.java  |   2 +-
 .../graph/traversal/ElementTraversal.java       |   6 -
 .../process/graph/traversal/GraphTraversal.java |  19 +--
 .../traversal/VertexPropertyTraversal.java      |   2 +-
 .../graph/traversal/VertexTraversal.java        |   2 +-
 .../gremlin/process/graph/traversal/__.java     |   8 +-
 .../graph/traversal/step/map/BackStep.java      |   2 +-
 .../graph/traversal/step/map/SelectOneStep.java |   2 +-
 .../graph/traversal/step/map/SelectStep.java    |   2 +-
 .../traversal/step/sideEffect/GraphStep.java    |   2 +-
 .../traversal/step/sideEffect/GroupStep.java    |   2 +-
 .../traversal/step/sideEffect/ProfileStep.java  |   6 +-
 .../sideEffect/mapreduce/GroupMapReduce.java    |   7 +-
 .../traversal/step/util/ComputerAwareStep.java  |   4 +-
 .../ComparatorHolderRemovalStrategy.java        |   4 +-
 .../traversal/strategy/ConjunctionStrategy.java |   2 +-
 .../strategy/DedupOptimizerStrategy.java        |   2 +-
 .../strategy/EngineDependentStrategy.java       |   4 +-
 .../strategy/IdentityRemovalStrategy.java       |   2 +-
 .../strategy/LabeledEndStepStrategy.java        |   2 +-
 .../traversal/strategy/MatchWhereStrategy.java  |   2 +-
 .../traversal/strategy/ProfileStrategy.java     |   2 +-
 .../strategy/RangeByIsCountStrategy.java        |   2 +-
 .../traversal/strategy/ReducingStrategy.java    |   4 +-
 .../strategy/SideEffectCapStrategy.java         |   2 +-
 .../SideEffectRegistrationStrategy.java         |   2 +-
 .../strategy/TraversalVerificationStrategy.java |   9 +-
 .../traversal/util/EmptyGraphTraversal.java     |   5 -
 .../process/traversal/DefaultTraversal.java     |  76 ++++++++---
 .../traversal/DefaultTraversalStrategies.java   |   4 +-
 .../engine/ComputerTraversalEngine.java         |  57 ++++++++
 .../engine/StandardTraversalEngine.java         |  54 ++++++++
 .../lambda/AbstractLambdaTraversal.java         |  23 +++-
 .../traversal/lambda/HasNextTraversal.java      |  16 ++-
 .../process/traversal/util/EmptyTraversal.java  |  18 ++-
 .../util/EmptyTraversalStrategies.java          |   2 +-
 .../tinkerpop/gremlin/structure/Graph.java      |  14 +-
 .../structure/strategy/PartitionStrategy.java   |   9 +-
 .../structure/strategy/StrategyGraph.java       |  11 ++
 .../structure/util/batch/BatchGraph.java        |  12 ++
 .../structure/util/empty/EmptyGraph.java        |  12 ++
 .../util/InterruptedRuntimeException.java       |  41 ++++++
 .../loaders/SugarLoaderPerformanceTest.groovy   | 136 +++++++++++++++++++
 .../groovy/loaders/SugarLoaderTest.groovy       |  60 --------
 .../step/branch/GroovyUnionTest.groovy          |   2 +
 .../step/filter/GroovyDedupTest.groovy          |  10 +-
 .../step/filter/GroovySampleTest.groovy         |   3 +
 .../step/filter/GroovyWhereTest.groovy          |   3 +
 .../traversal/step/map/GroovyCountTest.groovy   |   2 +
 .../traversal/step/map/GroovyFoldTest.groovy    |   2 +
 .../traversal/step/map/GroovyMapTest.groovy     |   3 +
 .../traversal/step/map/GroovyOrderTest.groovy   |   8 +-
 .../traversal/step/map/GroovySelectTest.groovy  |   7 +
 .../GroovyEnvironmentPerformanceSuite.java      |   4 +-
 .../engine/GremlinExecutorPerformanceTest.java  |   1 -
 .../groovy/engine/GremlinExecutorTest.java      |  77 ++++++++++-
 .../jsr223/GremlinGroovyScriptEngineTest.java   |  31 +++++
 .../process/GroovyProcessComputerSuite.java     |   2 +-
 .../META-INF/javax.script.ScriptEngineFactory   |   1 -
 .../AbstractImportCustomizerProvider.java       |   8 +-
 .../gremlin/groovy/engine/GremlinExecutor.java  | 107 ++++++++-------
 .../groovy/engine/GroovyTraversalScript.java    |  17 +--
 gremlin-server/bin/gremlin-server.bat           |  17 +++
 gremlin-server/conf/gremlin-server-classic.yaml |  17 +++
 gremlin-server/conf/gremlin-server-min.yaml     |  17 +++
 gremlin-server/conf/gremlin-server-modern.yaml  |  17 +++
 gremlin-server/conf/gremlin-server-neo4j.yaml   |  17 +++
 .../conf/gremlin-server-rest-modern.yaml        |  17 +++
 gremlin-server/conf/gremlin-server.yaml         |  17 +++
 gremlin-server/src/main/bin/gremlin-server.bat  |  17 +++
 .../server/gremlin-server-integration.yaml      |  17 +++
 .../server/gremlin-server-performance.yaml      |  17 +++
 .../tinkerpop/gremlin/AbstractGremlinTest.java  |   5 +-
 .../apache/tinkerpop/gremlin/GraphProvider.java |   7 +-
 .../ranking/PageRankVertexProgramTest.java      |   2 +
 .../graph/traversal/step/branch/BranchTest.java |   4 +-
 .../graph/traversal/step/branch/ChooseTest.java |   2 +-
 .../graph/traversal/step/branch/LocalTest.java  |  18 +--
 .../graph/traversal/step/branch/RepeatTest.java |  18 +--
 .../graph/traversal/step/branch/UnionTest.java  |  12 +-
 .../graph/traversal/step/filter/AndTest.java    |   4 +-
 .../graph/traversal/step/filter/CoinTest.java   |   4 +-
 .../traversal/step/filter/CyclicPathTest.java   |   4 +-
 .../graph/traversal/step/filter/DedupTest.java  |  12 +-
 .../graph/traversal/step/filter/ExceptTest.java |  19 ++-
 .../graph/traversal/step/filter/FilterTest.java |  25 ++--
 .../graph/traversal/step/filter/HasNotTest.java |   4 +-
 .../graph/traversal/step/filter/HasTest.java    |  28 ++--
 .../graph/traversal/step/filter/IsTest.java     |  10 +-
 .../graph/traversal/step/filter/OrTest.java     |   4 +-
 .../graph/traversal/step/filter/RetainTest.java |   8 +-
 .../graph/traversal/step/filter/SampleTest.java |  14 +-
 .../traversal/step/filter/SimplePathTest.java   |   4 +-
 .../graph/traversal/step/filter/WhereTest.java  |   8 +-
 .../graph/traversal/step/map/BackTest.java      |  18 +--
 .../graph/traversal/step/map/CoalesceTest.java  |  10 +-
 .../graph/traversal/step/map/CountTest.java     |  16 ++-
 .../graph/traversal/step/map/FoldTest.java      |   6 +-
 .../graph/traversal/step/map/MapTest.java       |  13 +-
 .../graph/traversal/step/map/MaxTest.java       |   6 +-
 .../graph/traversal/step/map/MeanTest.java      |   4 +-
 .../graph/traversal/step/map/MinTest.java       |  10 +-
 .../graph/traversal/step/map/OrderTest.java     |  20 ++-
 .../graph/traversal/step/map/PathTest.java      |   4 +-
 .../traversal/step/map/PropertiesTest.java      |   4 +-
 .../graph/traversal/step/map/SelectTest.java    |  20 ++-
 .../graph/traversal/step/map/SumTest.java       |   4 +-
 .../graph/traversal/step/map/UnfoldTest.java    |   6 +-
 .../graph/traversal/step/map/ValueMapTest.java  |   9 +-
 .../graph/traversal/step/map/VertexTest.java    |  50 +++----
 .../step/sideEffect/AggregateTest.java          |   6 +-
 .../step/sideEffect/GroupCountTest.java         |  12 +-
 .../traversal/step/sideEffect/GroupTest.java    |  10 +-
 .../traversal/step/sideEffect/InjectTest.java   |   4 +-
 .../traversal/step/sideEffect/ProfileTest.java  |   4 +-
 .../traversal/step/sideEffect/SackTest.java     |   8 +-
 .../step/sideEffect/SideEffectCapTest.java      |   4 +-
 .../traversal/step/sideEffect/StoreTest.java    |   8 +-
 .../traversal/step/sideEffect/TreeTest.java     |   6 +-
 .../strategy/RangeByIsCountStrategyTest.java    |   4 +-
 .../TraversalVerificationStrategyTest.java      |  21 +--
 .../process/traversal/CoreTraversalTest.java    | 100 ++++++++++++++
 .../process/traversal/DefaultTraversalTest.java |   4 +-
 .../structure/GraphConstructionTest.java        |   1 +
 .../process/TraversalStrategiesTest.java        |   2 +-
 .../process/util/TraversalHelperTest.java       |   9 +-
 .../groovy/plugin/HadoopRemoteAcceptor.java     |   4 +-
 .../strategy/HadoopElementStepStrategy.java     |   4 +-
 .../gremlin/hadoop/structure/HadoopGraph.java   |  21 ++-
 .../structure/hdfs/HadoopElementIterator.java   |   6 +
 .../strategy/Neo4jGraphStepStrategy.java        |   2 +-
 .../gremlin/neo4j/structure/Neo4jGraph.java     |  19 ++-
 pom.xml                                         |  37 +++++
 .../strategy/TinkerElementStepStrategy.java     |   4 +-
 .../strategy/TinkerGraphStepStrategy.java       |   5 +-
 .../tinkergraph/structure/TinkerFactory.java    |   2 +-
 .../tinkergraph/structure/TinkerGraph.java      |  21 ++-
 .../tinkergraph/TinkerGraphGraphProvider.java   |   3 +-
 .../tinkergraph/structure/TinkerGraphTest.java  |  27 ++--
 175 files changed, 1960 insertions(+), 601 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 33a381d,8a32d56..a8a48bd
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -9,9 -25,12 +25,13 @@@ image::http://www.tinkerpop.com/docs/cu
  TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
 +* Added `dedup(local)` and `sample(local)`.
+ * `TraversalStrategy.apply(traversal)` is the new method signature as the `TraversalEngine` can be retrieved from the `Traversal`.
+ * `TraversalEngine` is now an interface and provided by the graph to the traversal at construction. `Graph` methods added to set the desired traversal engine to use.
  * 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)`.
+ * Added Apache Rat plugin to detect the proper inclusion of license headers in files.
+ * A `Traversal` now respects thread interruption during iteration, throwing a `TraversalInterruptionException` if it encounters interruption on the current thread.
  * Apache refactoring: `com.tinkerpop` -> `org.apache.tinkerpop`.
  * `Traversal` is now `Serializable` and with 99% of queries no longer needing lambdas, Gremlin-Java works over the wire.
  * Added `VertexProperty.Cardinality` with `list`, `set`, and `single`. No more `Vertex.singleProperty()` method.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
----------------------------------------------------------------------
diff --cc gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
index 3e69814,8ef306f..a756cc8
--- 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,15 -18,12 +18,16 @@@
   */
  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.process.traversal.engine.StandardTraversalEngine
  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)
@@@ -48,35 -45,22 +49,38 @@@ 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() {
-             g.V.both.dedup.name // TODO
 -            ComputerTestHelper.compute("g.V.both.dedup.name", g);
++            g.engine(StandardTraversalEngine.instance()) // TODO
++            g.V.both.dedup.name
 +            //ComputerTestHelper.compute("g.V.both.dedup.name", g);
          }
  
          @Override
          public Traversal<Vertex, String> get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name() {
-             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);
++            g.engine(StandardTraversalEngine.instance()) // TODO
++            g.V.both.has(T.label, 'software').dedup.by('lang').name
 +            //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() {
-             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);
++            g.engine(StandardTraversalEngine.instance()) // TODO
++            g.V().both().properties('name').order.by { a, b -> a.value() <=> b.value() }.dedup.value
 +            //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/962150e7/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
----------------------------------------------------------------------
diff --cc gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
index 801a527,06a691f..6f829f0
--- 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,11 -18,11 +18,12 @@@
   */
  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.process.traversal.engine.StandardTraversalEngine
  import org.apache.tinkerpop.gremlin.structure.Edge
  import org.apache.tinkerpop.gremlin.structure.Vertex
  

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
index 234a182,7b82f7a..9e9b1f0
--- 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,11 -18,10 +18,12 @@@
   */
  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.process.traversal.engine.StandardTraversalEngine;
  import org.apache.tinkerpop.gremlin.structure.Vertex;
  import org.apache.tinkerpop.gremlin.util.StreamFactory;
  import org.junit.Test;
@@@ -129,37 -104,5 +130,40 @@@ public abstract class DedupTest extend
          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
++            g.engine(StandardTraversalEngine.instance()); // TODO
++            return super.get_g_V_both_dedup_name();
 +        }
 +
 +        @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
++            g.engine(StandardTraversalEngine.instance()); // TODO
++            return super.get_g_V_both_hasXlabel_softwareX_dedup_byXlangX_name();
 +        }
 +
 +        @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
++            g.engine(StandardTraversalEngine.instance()); // TODO
++            return super.get_g_V_both_propertiesXnameX_orderXa_bX_dedup_value();
 +        }
 +
 +        @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());
++            return super.get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap();
 +        }
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
index bcd2724,ce3bfe6..e761d66
--- 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,9 -20,8 +20,10 @@@ package org.apache.tinkerpop.gremlin.pr
  
  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.process.traversal.engine.StandardTraversalEngine;
  import org.apache.tinkerpop.gremlin.structure.Edge;
  import org.apache.tinkerpop.gremlin.structure.Vertex;
  import org.junit.Test;
@@@ -150,27 -103,19 +151,30 @@@ public abstract class SampleTest extend
  
          @Override
          public Traversal<Edge, Edge> get_g_E_sampleX1X() {
-             return super.get_g_E_sampleX1X();   // TODO: makes no sense when its global
+             g.engine(StandardTraversalEngine.instance()); // TODO
 -            return g.E().sample(1);
++            return super.get_g_E_sampleX1X();
          }
  
          @Override
          public Traversal<Edge, Edge> get_g_E_sampleX2X_byXweightX() {
-             return super.get_g_E_sampleX2X_byXweightX(); // TODO: makes no sense when its global
+             g.engine(StandardTraversalEngine.instance()); // TODO
 -            return g.E().sample(2).by("weight");
++            return super.get_g_E_sampleX2X_byXweightX();
          }
  
          @Override
          public Traversal<Vertex, Edge> get_g_V_localXoutE_sampleX1X_byXweightXX() {
-             return super.get_g_V_localXoutE_sampleX1X_byXweightXX().submit(g.compute());
 -            return g.V().local(outE().sample(1).by("weight"));
++            g.engine(StandardTraversalEngine.instance()); // TODO
++            return super.get_g_V_localXoutE_sampleX1X_byXweightXX();
 +        }
 +
 +        @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());
++            return super.get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX();
 +        }
 +
 +        @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());
++            return super.get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX();
          }
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
index f2370c1,38bac12..0807a64
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
@@@ -96,13 -74,7 +96,13 @@@ public abstract class MaxTest extends A
  
          @Override
          public Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_max() {
-             return g.V().repeat(both()).times(5).values("age").<Integer>max().submit(g.compute());
+             return g.V().repeat(both()).times(5).values("age").<Integer>max();
          }
 +
 +        @Override
 +        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
 +            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
-                     by(max(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
++                    by(max(Scope.local)).<Map<String, Number>>cap();
 +        }
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
index 8fe5267,d061ad4..408df98
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
@@@ -86,13 -65,8 +86,13 @@@ public abstract class MeanTest extends 
  
          @Override
          public Traversal<Vertex, Double> get_g_V_age_mean() {
-             return g.V().values("age").mean().submit(g.compute());
+             return g.V().values("age").mean();
          }
  
 +        @Override
 +        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
 +            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
-                     by(mean(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
++                    by(mean(Scope.local)).<Map<String, Number>>cap();
 +        }
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
index 982c7bd,5fb65a1..000db05
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
@@@ -31,9 -29,6 +31,7 @@@ 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.assertEquals;
- import static org.junit.Assert.assertFalse;
- import static org.junit.Assert.assertTrue;
++import static org.junit.Assert.*;
  
  /**
   * @author Marko A. Rodriguez (http://markorodriguez.com)
@@@ -98,13 -74,7 +96,13 @@@ public abstract class MinTest extends A
  
          @Override
          public Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_min() {
-             return g.V().repeat(both()).times(5).values("age").<Integer>min().submit(g.compute());
+             return g.V().repeat(both()).times(5).values("age").<Integer>min();
          }
 +
 +        @Override
 +        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
 +            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
-                     by(min(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
++                    by(min(Scope.local)).<Map<String, Number>>cap();
 +        }
      }
  }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
----------------------------------------------------------------------
diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
index bc66621,0000000..3da3143
mode 100644,000000..100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
@@@ -1,93 -1,0 +1,93 @@@
 +/*
 + * 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.LoadGraphWith;
 +import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 +import org.apache.tinkerpop.gremlin.process.Scope;
 +import org.apache.tinkerpop.gremlin.process.Traversal;
 +import org.apache.tinkerpop.gremlin.structure.Vertex;
 +import org.junit.Test;
 +
 +import java.util.Map;
 +
 +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.__.sum;
 +import static org.junit.Assert.*;
 +
 +/**
 + * @author Daniel Kuppitz (http://gremlin.guru)
 + */
 +public abstract class SumTest extends AbstractGremlinProcessTest {
 +
 +    public abstract Traversal<Vertex, Double> get_g_V_valuesXageX_sum();
 +
 +    public abstract Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX();
 +
 +    @Test
 +    @LoadGraphWith(MODERN)
 +    public void g_V_valuesXageX_sum() {
 +        final Traversal<Vertex, Double> traversal = get_g_V_valuesXageX_sum();
 +        printTraversalForm(traversal);
 +        final Number sum = traversal.next();
 +        assertEquals(123.0, sum);
 +        assertFalse(traversal.hasNext());
 +    }
 +
 +    @Test
 +    @LoadGraphWith(MODERN)
 +    public void g_V_hasLabelXsoftwareX_group_byXnameX_byXin_valuesXageX_foldX_byXsumXlocalXX() {
 +        final Traversal<Vertex, Map<String, Number>> traversal = get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX();
 +        printTraversalForm(traversal);
 +        assertTrue(traversal.hasNext());
 +        final Map<String, Number> map = traversal.next();
 +        assertFalse(traversal.hasNext());
 +        assertEquals(2, map.size());
 +        assertEquals(1.0, map.get("ripple"));
 +        assertEquals(1.0, map.get("lop"));
 +    }
 +
 +    public static class StandardTest extends SumTest {
 +
 +        @Override
 +        public Traversal<Vertex, Double> get_g_V_valuesXageX_sum() {
 +            return g.V().values("age").sum();
 +        }
 +
 +        @Override
 +        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
 +            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(sum(Scope.local)).cap();
 +        }
 +    }
 +
 +    public static class ComputerTest extends SumTest {
 +
 +        @Override
 +        public Traversal<Vertex, Double> get_g_V_valuesXageX_sum() {
-             return g.V().values("age").sum().submit(g.compute());
++            return g.V().values("age").sum();
 +        }
 +
 +        @Override
 +        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
 +            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
-                     by(sum(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
++                    by(sum(Scope.local)).<Map<String, Number>>cap();
 +        }
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/962150e7/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --cc tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 5186eb7,ee04e8c..ada9914
--- 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
@@@ -20,18 -20,19 +20,12 @@@ package org.apache.tinkerpop.gremlin.ti
  
  import org.apache.commons.io.FileUtils;
  import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+ 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.strategy.RangeByIsCountStrategy;
--import org.apache.tinkerpop.gremlin.process.traversal.DefaultTraversal;
- import org.apache.tinkerpop.gremlin.process.util.metric.TraversalMetrics;
- import org.apache.tinkerpop.gremlin.structure.Direction;
- import org.apache.tinkerpop.gremlin.structure.Edge;
- import org.apache.tinkerpop.gremlin.structure.Graph;
- import org.apache.tinkerpop.gremlin.structure.Operator;
- import org.apache.tinkerpop.gremlin.structure.Order;
- import org.apache.tinkerpop.gremlin.structure.Vertex;
+ import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
 -import org.apache.tinkerpop.gremlin.process.util.metric.TraversalMetrics;
 -import org.apache.tinkerpop.gremlin.structure.Direction;
 -import org.apache.tinkerpop.gremlin.structure.Edge;
 -import org.apache.tinkerpop.gremlin.structure.Graph;
 -import org.apache.tinkerpop.gremlin.structure.Operator;
 -import org.apache.tinkerpop.gremlin.structure.Order;
 -import org.apache.tinkerpop.gremlin.structure.Vertex;
++import org.apache.tinkerpop.gremlin.structure.*;
  import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
  import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLWriter;
  import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
@@@ -43,13 -44,13 +37,8 @@@ import org.junit.BeforeClass
  import org.junit.Ignore;
  import org.junit.Test;
  
--import java.io.File;
--import java.io.FileOutputStream;
--import java.io.IOException;
--import java.io.InputStream;
--import java.io.OutputStream;
++import java.io.*;
  import java.util.Arrays;
--import java.util.Comparator;
  import java.util.List;
  import java.util.Set;
  import java.util.function.Supplier;


[7/8] incubator-tinkerpop git commit: Merge branch 'local' of https://github.com/dkuppitz/incubator-tinkerpop

Posted by ok...@apache.org.
Merge branch 'local' of https://github.com/dkuppitz/incubator-tinkerpop


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4083888e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4083888e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4083888e

Branch: refs/heads/master
Commit: 4083888e6a6f1813555034912d45fbaec751f1e5
Parents: 446df04 962150e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Feb 13 15:40:19 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Feb 13 15:40:19 2015 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../graph/traversal/ElementTraversal.java       | 29 +++---
 .../process/graph/traversal/GraphTraversal.java | 42 +++------
 .../gremlin/process/graph/traversal/__.java     | 23 +++--
 .../traversal/step/map/CountLocalStep.java      | 21 +----
 .../traversal/step/map/DedupLocalStep.java      | 40 +++++++++
 .../traversal/step/map/LocalBarrierStep.java    | 53 +++++++++++
 .../graph/traversal/step/map/MaxLocalStep.java  | 27 +-----
 .../graph/traversal/step/map/MeanLocalStep.java | 28 +-----
 .../graph/traversal/step/map/MinLocalStep.java  | 27 +-----
 .../traversal/step/map/SampleLocalStep.java     | 49 +++++++++++
 .../graph/traversal/step/map/SumLocalStep.java  | 24 +----
 .../step/filter/GroovyDedupTest.groovy          | 32 +++++--
 .../step/filter/GroovySampleTest.groovy         | 28 +++++-
 .../traversal/step/map/GroovyMaxTest.groovy     | 16 +++-
 .../traversal/step/map/GroovyMeanTest.groovy    | 16 +++-
 .../traversal/step/map/GroovyMinTest.groovy     | 16 +++-
 .../traversal/step/map/GroovySumTest.groovy     | 59 +++++++++++++
 .../process/GroovyProcessComputerSuite.java     |  2 +-
 .../gremlin/process/ProcessComputerSuite.java   | 13 +--
 .../gremlin/process/ProcessStandardSuite.java   |  2 +
 .../graph/traversal/step/filter/DedupTest.java  | 67 +++++++++++++-
 .../graph/traversal/step/filter/SampleTest.java | 67 +++++++++++++-
 .../graph/traversal/step/map/MaxTest.java       | 28 ++++++
 .../graph/traversal/step/map/MeanTest.java      | 30 ++++++-
 .../graph/traversal/step/map/MinTest.java       | 28 ++++++
 .../graph/traversal/step/map/SumTest.java       | 93 ++++++++++++++++++++
 .../tinkergraph/structure/TinkerGraphTest.java  | 41 +++------
 28 files changed, 668 insertions(+), 234 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4083888e/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 85e4362,a8a48bd..5bdd704
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -25,8 -25,9 +25,9 @@@ image::http://www.tinkerpop.com/docs/cu
  TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
+ * Added `dedup(local)` and `sample(local)`.
  * `TraversalStrategy.apply(traversal)` is the new method signature as the `TraversalEngine` can be retrieved from the `Traversal`.
 -* `TraversalEngine` is now an interface and provided by the graph to the traversal at construction. `Graph` methods added to set the desired traversal engine to use.
 +* `TraversalEngine` is now an interface and provided to the traversal by the graph. `Graph` methods added to set the desired traversal engine to use.
  * 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)`.
  * Added Apache Rat plugin to detect the proper inclusion of license headers in files.


[8/8] incubator-tinkerpop git commit: tweaked CHANGELOG.

Posted by ok...@apache.org.
tweaked CHANGELOG.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4172c3a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4172c3a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4172c3a2

Branch: refs/heads/master
Commit: 4172c3a2df7d8f5eb0573da72b2031a7b39e54f5
Parents: 4083888
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Feb 13 15:41:07 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Feb 13 15:41:07 2015 -0700

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4172c3a2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5bdd704..6037dd3 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,10 +25,9 @@ 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)`.
 * `TraversalStrategy.apply(traversal)` is the new method signature as the `TraversalEngine` can be retrieved from the `Traversal`.
 * `TraversalEngine` is now an interface and provided to the traversal by the graph. `Graph` methods added to set the desired traversal engine to use.
-* Added `count(local)`, `sum(local)`, `max(local)`, `min(local)`, and `mean(local)` operating on the local object (e.g. collection, map, etc.)
+* Added `count(local)`, `sum(local)`, `max(local)`, `min(local)`, `mean(local)`, `dedup(local)`, and `sample(local)` for operating on the local object (e.g. collection, map, etc.).
 * `TraversalComparator` exists which allows for `order().by(outE().count(),decr)`.
 * Added Apache Rat plugin to detect the proper inclusion of license headers in files.
 * A `Traversal` now respects thread interruption during iteration, throwing a `TraversalInterruptionException` if it encounters interruption on the current thread.


[3/8] incubator-tinkerpop git commit: added tests for `min(local)`, `max(local)`, `mean(local)` and `sum(local)`

Posted by ok...@apache.org.
added tests for `min(local)`, `max(local)`, `mean(local)` and `sum(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/3d4335b1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/3d4335b1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/3d4335b1

Branch: refs/heads/master
Commit: 3d4335b15734f0ecd33a07006a8b88b1987e3598
Parents: 2f679ab
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri Feb 13 18:59:47 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri Feb 13 18:59:47 2015 +0100

----------------------------------------------------------------------
 .../traversal/step/map/GroovyMaxTest.groovy     | 15 +++-
 .../traversal/step/map/GroovyMeanTest.groovy    | 16 +++-
 .../traversal/step/map/GroovyMinTest.groovy     | 16 +++-
 .../traversal/step/map/GroovySumTest.groovy     | 59 +++++++++++++
 .../gremlin/process/ProcessComputerSuite.java   | 10 ++-
 .../gremlin/process/ProcessStandardSuite.java   |  2 +
 .../graph/traversal/step/map/MaxTest.java       | 28 ++++++
 .../graph/traversal/step/map/MeanTest.java      | 30 ++++++-
 .../graph/traversal/step/map/MinTest.java       | 30 +++++++
 .../graph/traversal/step/map/SumTest.java       | 93 ++++++++++++++++++++
 .../tinkergraph/structure/TinkerGraphTest.java  | 18 +---
 11 files changed, 290 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
index 05f8b03..8469834 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
@@ -18,12 +18,14 @@
  */
 package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map
 
+import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.Scope
 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.map.MaxTest
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.*
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -41,6 +43,10 @@ public abstract class GroovyMaxTest {
             g.V.repeat(__.both).times(5).age.max
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
+            g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local)).cap()
+        }
     }
 
     public static class ComputerTest extends MaxTest {
@@ -54,5 +60,10 @@ public abstract class GroovyMaxTest {
         public Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_max() {
             ComputerTestHelper.compute("g.V.repeat(__.both).times(5).age.max", g)
         }
+
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
+            ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local)).cap()", g)
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
index 9fef567..9bd3d10 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
@@ -18,11 +18,14 @@
  */
 package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map
 
-import org.apache.tinkerpop.gremlin.process.Traversal
 import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.MeanTest
+import org.apache.tinkerpop.gremlin.process.Scope
+import org.apache.tinkerpop.gremlin.process.Traversal
 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.__.mean
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -35,6 +38,10 @@ public abstract class GroovyMeanTest {
             g.V.age.mean
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
+            g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local)).cap()
+        }
     }
 
     public static class ComputerTest extends MeanTest {
@@ -43,5 +50,10 @@ public abstract class GroovyMeanTest {
         public Traversal<Vertex, Double> get_g_V_age_mean() {
             ComputerTestHelper.compute("g.V.age.mean", g)
         }
+
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
+            ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local)).cap()", g)
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
index 4066660..6f4c4fe 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
@@ -18,12 +18,15 @@
  */
 package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map
 
+import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.Scope
 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.map.MinTest
 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.__.min
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -41,6 +44,10 @@ public abstract class GroovyMinTest {
             g.V.repeat(__.both).times(5).age.min
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
+            g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local)).cap()
+        }
     }
 
     public static class ComputerTest extends MinTest {
@@ -54,5 +61,10 @@ public abstract class GroovyMinTest {
         public Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_min() {
             ComputerTestHelper.compute("g.V.repeat(__.both).times(5).age.min", g)
         }
+
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
+            ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local)).cap()", g)
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
new file mode 100644
index 0000000..f039363
--- /dev/null
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
@@ -0,0 +1,59 @@
+/*
+ * 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.ComputerTestHelper
+import org.apache.tinkerpop.gremlin.process.Scope
+import org.apache.tinkerpop.gremlin.process.Traversal
+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.__.sum
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class GroovySumTest {
+
+    public static class StandardTest extends SumTest {
+
+        @Override
+        public Traversal<Vertex, Double> get_g_V_valuesXageX_sum() {
+            g.V().values('age').sum()
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
+            g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local)).cap()
+        }
+    }
+
+    public static class ComputerTest extends SumTest {
+
+        @Override
+        public Traversal<Vertex, Double> get_g_V_valuesXageX_sum() {
+            ComputerTestHelper.compute("g.V.age.mean", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Integer>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
+            ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local)).cap()", g)
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/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 f351049..cf03949 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
@@ -26,8 +26,8 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.branch.*;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.*;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.*;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.*;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.TraversalVerificationStrategyTest;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.RangeByIsCountStrategyTest;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.TraversalVerificationStrategyTest;
 import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.RunnerBuilder;
 
@@ -47,6 +47,8 @@ import java.util.stream.Stream;
  * (note that the "Suite" implements ProcessComputerStandardSuite.GraphProvider as a convenience only. It could be
  * implemented in a separate class file):
  * <code>
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
  * @RunWith(ProcessComputerSuite.class)
  * @ProcessComputerSuite.GraphProviderClass(TinkerGraphProcessComputerTest.class) public class TinkerGraphProcessComputerTest implements GraphProvider {
  * }
@@ -56,8 +58,6 @@ import java.util.stream.Stream;
  * inject into tests in the suite.  The {@code ProcessComputerStandardSuite} will utilized Features defined in the
  * suite to determine which tests will be executed.
  * <br/>
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class ProcessComputerSuite extends AbstractGremlinSuite {
 
@@ -70,7 +70,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
     private static final Class<?>[] allTests = new Class<?>[]{
 
             // basic api semantics testing
-           // GraphComputerTest.ComputerTest.class,   // todo: not sure this should be here as it forces retest of GraphComputer without an "implementation"
+            // GraphComputerTest.ComputerTest.class,   // todo: not sure this should be here as it forces retest of GraphComputer without an "implementation"
 
             // branch
             BranchTest.ComputerTest.class,
@@ -104,6 +104,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
             MaxTest.ComputerTest.class,
             MeanTest.ComputerTest.class,
             MinTest.ComputerTest.class,
+            SumTest.ComputerTest.class,
             // TODO: MatchTest.ComputerTest.class,
             OrderTest.ComputerTest.class,
             PathTest.ComputerTest.class,
@@ -179,6 +180,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
             MaxTest.class,
             MeanTest.class,
             MinTest.class,
+            SumTest.class,
             // MatchTest.class,
             OrderTest.class,
             PathTest.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
index 23e7266..197fc89 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
@@ -101,6 +101,7 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
             MaxTest.StandardTest.class,
             MeanTest.StandardTest.class,
             MinTest.StandardTest.class,
+            SumTest.StandardTest.class,
             OrderTest.StandardTest.class,
             org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.PathTest.StandardTest.class,
             PropertiesTest.StandardTest.class,
@@ -176,6 +177,7 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
             MaxTest.class,
             MeanTest.class,
             MinTest.class,
+            SumTest.class,
             OrderTest.class,
             org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.PathTest.class,
             SelectTest.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
index d46eeae..f2370c1 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
@@ -20,15 +20,18 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
 
 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.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.List;
+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.*;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -39,6 +42,8 @@ public abstract class MaxTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_max();
 
+    public abstract Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_age_max() {
@@ -51,6 +56,19 @@ public abstract class MaxTest extends AbstractGremlinProcessTest {
         });
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXsoftwareX_group_byXnameX_byXin_valuesXageX_foldX_byXmaxXlocalXX() {
+        final Traversal<Vertex, Map<String, Number>> traversal = get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX();
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        final Map<String, Number> map = traversal.next();
+        assertFalse(traversal.hasNext());
+        assertEquals(2, map.size());
+        assertEquals(1.0, map.get("ripple"));
+        assertEquals(0.4, map.get("lop"));
+    }
+
     public static class StandardTest extends MaxTest {
 
         @Override
@@ -63,6 +81,10 @@ public abstract class MaxTest extends AbstractGremlinProcessTest {
             return g.V().repeat(both()).times(5).values("age").max();
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(max(Scope.local)).cap();
+        }
     }
 
     public static class ComputerTest extends MaxTest {
@@ -76,5 +98,11 @@ public abstract class MaxTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_max() {
             return g.V().repeat(both()).times(5).values("age").<Integer>max().submit(g.compute());
         }
+
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
+                    by(max(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
index aec8eff..8fe5267 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
@@ -20,16 +20,19 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
 
 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.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.bothE;
+import static org.apache.tinkerpop.gremlin.process.graph.traversal.__.mean;
+import static org.junit.Assert.*;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -38,6 +41,7 @@ public abstract class MeanTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Double> get_g_V_age_mean();
 
+    public abstract Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX();
 
     @Test
     @LoadGraphWith(MODERN)
@@ -52,6 +56,19 @@ public abstract class MeanTest extends AbstractGremlinProcessTest {
         });
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXsoftwareX_group_byXnameX_byXin_valuesXageX_foldX_byXmeanXlocalXX() {
+        final Traversal<Vertex, Map<String, Number>> traversal = get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX();
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        final Map<String, Number> map = traversal.next();
+        assertFalse(traversal.hasNext());
+        assertEquals(2, map.size());
+        assertEquals(1.0, map.get("ripple"));
+        assertEquals(1.0 / 3, map.get("lop"));
+    }
+
     public static class StandardTest extends MeanTest {
 
         @Override
@@ -59,6 +76,10 @@ public abstract class MeanTest extends AbstractGremlinProcessTest {
             return g.V().values("age").mean();
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(mean(Scope.local)).cap();
+        }
     }
 
     public static class ComputerTest extends MeanTest {
@@ -68,5 +89,10 @@ public abstract class MeanTest extends AbstractGremlinProcessTest {
             return g.V().values("age").mean().submit(g.compute());
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
+                    by(mean(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
index 007351d..982c7bd 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
@@ -20,15 +20,20 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
 
 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.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.List;
+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.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -39,6 +44,8 @@ public abstract class MinTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_min();
 
+    public abstract Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_age_min() {
@@ -51,6 +58,19 @@ public abstract class MinTest extends AbstractGremlinProcessTest {
         });
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXsoftwareX_group_byXnameX_byXin_valuesXageX_foldX_byXminXlocalXX() {
+        final Traversal<Vertex, Map<String, Number>> traversal = get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX();
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        final Map<String, Number> map = traversal.next();
+        assertFalse(traversal.hasNext());
+        assertEquals(2, map.size());
+        assertEquals(1.0, map.get("ripple"));
+        assertEquals(0.2, map.get("lop"));
+    }
+
     public static class StandardTest extends MinTest {
 
         @Override
@@ -63,6 +83,10 @@ public abstract class MinTest extends AbstractGremlinProcessTest {
             return g.V().repeat(both()).times(5).values("age").min();
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(min(Scope.local)).cap();
+        }
     }
 
     public static class ComputerTest extends MinTest {
@@ -76,5 +100,11 @@ public abstract class MinTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Integer> get_g_V_repeatXbothX_timesX5X_age_min() {
             return g.V().repeat(both()).times(5).values("age").<Integer>min().submit(g.compute());
         }
+
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
+                    by(min(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
new file mode 100644
index 0000000..bc66621
--- /dev/null
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.Scope;
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.Map;
+
+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.__.sum;
+import static org.junit.Assert.*;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class SumTest extends AbstractGremlinProcessTest {
+
+    public abstract Traversal<Vertex, Double> get_g_V_valuesXageX_sum();
+
+    public abstract Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX();
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valuesXageX_sum() {
+        final Traversal<Vertex, Double> traversal = get_g_V_valuesXageX_sum();
+        printTraversalForm(traversal);
+        final Number sum = traversal.next();
+        assertEquals(123.0, sum);
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXsoftwareX_group_byXnameX_byXin_valuesXageX_foldX_byXsumXlocalXX() {
+        final Traversal<Vertex, Map<String, Number>> traversal = get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX();
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        final Map<String, Number> map = traversal.next();
+        assertFalse(traversal.hasNext());
+        assertEquals(2, map.size());
+        assertEquals(1.0, map.get("ripple"));
+        assertEquals(1.0, map.get("lop"));
+    }
+
+    public static class StandardTest extends SumTest {
+
+        @Override
+        public Traversal<Vertex, Double> get_g_V_valuesXageX_sum() {
+            return g.V().values("age").sum();
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(sum(Scope.local)).cap();
+        }
+    }
+
+    public static class ComputerTest extends SumTest {
+
+        @Override
+        public Traversal<Vertex, Double> get_g_V_valuesXageX_sum() {
+            return g.V().values("age").sum().submit(g.compute());
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
+            return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).
+                    by(sum(Scope.local)).<Map<String, Number>>cap().submit(g.compute());
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3d4335b1/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 ee60b3b..0684723 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
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+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.strategy.RangeByIsCountStrategy;
@@ -188,22 +189,9 @@ public class TinkerGraphTest {
     public void testPlayDK() throws Exception {
 
         Graph g = TinkerFactory.createModern();
-        Traversal t = g.V().count().is(0l).profile().cap(TraversalMetrics.METRICS_KEY);
+        Traversal t = g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).cap();
         System.out.println(t.toString());
-        t.iterate();
-        System.out.println(t.toString());
-        System.out.println("--");
-
-        t = g.V().count().is(0l).profile().cap(TraversalMetrics.METRICS_KEY);
-        ((DefaultTraversal) t).getStrategies().removeStrategies(RangeByIsCountStrategy.class);
-        System.out.println(t.toString());
-        t.iterate();
-        System.out.println(t.toString());
-        System.out.println("--");
-
-        t = g.V().count().is(0l).profile().cap(TraversalMetrics.METRICS_KEY);
-        System.out.println(t.toString());
-        t.iterate();
+        t.forEachRemaining(System.out::println);
         System.out.println(t.toString());
     }