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/10/07 23:14:10 UTC

[06/19] incubator-tinkerpop git commit: Figured out how to do by('name') by wrapping in a map(ElementValueFunction). I'm done for the day. Tomorrow I will finish up the conversion as well as include GroupStepV3d0 test cases and we will have the new group

Figured out how to do by('name') by wrapping in a map(ElementValueFunction). I'm done for the day. Tomorrow I will finish up the conversion as well as include GroupStepV3d0 test cases and we will have the new group()-lazy reduction model complete.


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

Branch: refs/heads/master
Commit: 60b19ed8a71fb1da29accc3e38638759d9c921c5
Parents: da2477b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Oct 5 17:20:09 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Oct 5 17:20:09 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/step/map/GroupStep.java   | 24 ++++++++-------
 .../traversal/step/map/GroupStepV3d0.java       |  1 +
 .../traversal/step/map/MeanGlobalStep.java      |  1 +
 .../step/sideEffect/GroupSideEffectStep.java    | 21 +++++++------
 .../step/sideEffect/SideEffectCapStep.java      | 13 +++-----
 .../process/traversal/step/util/FinalGet.java   | 32 ++++++++++++++++++++
 .../step/util/ReducingBarrierStep.java          | 12 --------
 .../traversal/step/sideEffect/GroupTest.java    |  5 ++-
 8 files changed, 66 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index a06e251..0b04cfb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -26,9 +26,11 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
@@ -41,7 +43,6 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -83,7 +84,7 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
             this.keyTraversal = this.integrateChild(kvrTraversal);
             this.state = 'v';
         } else if ('v' == this.state) {
-            this.valueTraversal = this.integrateChild(kvrTraversal);
+            this.valueTraversal = this.integrateChild(kvrTraversal instanceof ElementValueTraversal ? ((Traversal.Admin) __.map(kvrTraversal).fold()) : kvrTraversal);
             this.state = 'x';
         } else {
             throw new IllegalStateException("The key and value traversals for group()-step have already been set: " + this);
@@ -124,7 +125,9 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
     public Traverser<Map<K, V>> processNextStart() {
         if (this.byPass) {
             final Traverser.Admin<S> traverser = this.starts.next();
-            final Object[] kvPair = new Object[]{TraversalUtil.applyNullable(traverser, (Traversal.Admin<S, Map>) this.keyTraversal), traverser.get()};
+            final Traverser.Admin<S> traverserSplit = traverser.split();
+            traverserSplit.setBulk(1l);
+            final Object[] kvPair = new Object[]{TraversalUtil.applyNullable(traverser, (Traversal.Admin<S, Map>) this.keyTraversal), traverserSplit};
             return traverser.asAdmin().split(kvPair, (Step) this);
         } else {
             return super.processNextStart();
@@ -185,7 +188,7 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
 
     ///////////
 
-    public static final class GroupMapReduce<S, K, V> implements MapReduce<K, S, K, V, Map<K, V>> {
+    public static final class GroupMapReduce<S, K, V> implements MapReduce<K, Traverser<S>, K, V, Map<K, V>> {
 
         public static final String GROUP_BY_STEP_STEP_ID = "gremlin.groupStep.stepId";
 
@@ -219,19 +222,18 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
         }
 
         @Override
-        public void map(final Vertex vertex, final MapEmitter<K, S> emitter) {
+        public void map(final Vertex vertex, final MapEmitter<K, Traverser<S>> emitter) {
             vertex.<TraverserSet<Object[]>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(traverser -> {
                 final Object[] objects = traverser.get();
-                emitter.emit((K) objects[0], (S) objects[1]);
-
+                emitter.emit((K) objects[0], (Traverser<S>) objects[1]);
             }));
         }
 
         @Override
-        public void reduce(final K key, final Iterator<S> values, final ReduceEmitter<K, V> emitter) {
-            Traversal.Admin<S, V> reduceTraversalClone = this.valueTraversal.clone();
-            reduceTraversalClone.addStarts(reduceTraversalClone.getTraverserGenerator().generateIterator((Iterator)values, reduceTraversalClone.getStartStep(), 1l));
-            emitter.emit(key, reduceTraversalClone.next());
+        public void reduce(final K key, final Iterator<Traverser<S>> values, final ReduceEmitter<K, V> emitter) {
+            Traversal.Admin<S, V> valueTraversalClone = this.valueTraversal.clone();
+            valueTraversalClone.addStarts(values);
+            emitter.emit(key, valueTraversalClone.next());
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
index 8313916..0c338eb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
@@ -32,6 +32,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMatrix;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
index 7f2b39d..66092a5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
@@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierS
 import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.function.MeanNumberSupplier;
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
index 7f90db7..0701b82 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -27,13 +27,14 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
 import org.apache.tinkerpop.gremlin.process.traversal.step.SideEffectCapable;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMatrix;
@@ -63,12 +64,12 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
     private Traversal.Admin<S, V> valueTraversal = this.integrateChild((Traversal.Admin) __.<V>fold().asAdmin());
     private String sideEffectKey;
     private boolean onGraphComputer = false;
+    private FinalGroupMap<S, K, V> finalGroupMap;
 
     public GroupSideEffectStep(final Traversal.Admin traversal, final String sideEffectKey) {
         super(traversal);
         this.sideEffectKey = sideEffectKey;
-        final FinalGroupMap<S, K, V> finalGroupMap = new FinalGroupMap<>(new HashMap<>());
-        this.traversal.asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, () -> finalGroupMap); // HashMapSupplier.instance());
+        this.traversal.asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, HashMapSupplier.instance());
     }
 
     @Override
@@ -83,8 +84,12 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
             }
             values.add(traverser);
         } else {
-            final FinalGroupMap<S, K, V> finalGroupMap = traverser.sideEffects(this.sideEffectKey); // for nested traversals and not !starts.hasNext()
-            final Map<K, Traversal.Admin<S, V>> groupMap = finalGroupMap.get();
+            if (null == this.finalGroupMap) {
+                final Object object = traverser.sideEffects(this.sideEffectKey);
+                if (!(object instanceof FinalGroupMap))
+                    traverser.sideEffects(this.sideEffectKey, this.finalGroupMap = new FinalGroupMap<>((Map) object));
+            }
+            final Map<K, Traversal.Admin<S, V>> groupMap = this.finalGroupMap.get();
             final K key = TraversalUtil.applyNullable(traverser, this.keyTraversal);
             Traversal.Admin<S, V> traversal = groupMap.get(key);
             if (null == traversal) {
@@ -106,8 +111,6 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
     @Override
     public void onEngine(final TraversalEngine traversalEngine) {
         this.onGraphComputer = traversalEngine.isComputer();
-        if (this.onGraphComputer)
-            this.traversal.asAdmin().getSideEffects().registerSupplier(this.sideEffectKey, HashMapSupplier.instance());
     }
 
     @Override
@@ -136,7 +139,7 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
             this.keyTraversal = this.integrateChild(kvrTraversal);
             this.state = 'v';
         } else if ('v' == this.state) {
-            this.valueTraversal = this.integrateChild(kvrTraversal);
+            this.valueTraversal = this.integrateChild(kvrTraversal instanceof ElementValueTraversal ? ((Traversal.Admin) __.map(kvrTraversal).fold()) : kvrTraversal);
             this.state = 'x';
         } else {
             throw new IllegalStateException("The key and value traversals for group()-step have already been set");
@@ -168,7 +171,7 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
 
     ///////////
 
-    public static class FinalGroupMap<S, K, V> implements ReducingBarrierStep.FinalGet<Map<K, V>>, Serializable {
+    public static class FinalGroupMap<S, K, V> implements FinalGet<Map<K, V>>, Serializable {
 
         private final Map<K, Traversal.Admin<S, V>> mapTraversal;
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
index e80bae2..a784bfd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
@@ -19,9 +19,9 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.SupplyingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.ArrayList;
@@ -72,18 +72,15 @@ public final class SideEffectCapStep<S, E> extends SupplyingBarrierStep<S, E> {
 
     @Override
     protected E supply() {
-        if (this.sideEffectKeys.size() == 1) {
-            final Object object = this.getTraversal().getSideEffects().<E>get(this.sideEffectKeys.get(0)).get();
-            return (E) (object instanceof ReducingBarrierStep.FinalGet ? ((ReducingBarrierStep.FinalGet) object).getFinal() : object);
-        } else {
-            return (E) this.getMapOfSideEffects();
-        }
+        return this.sideEffectKeys.size() == 1 ?
+                FinalGet.tryFinalGet(this.getTraversal().asAdmin().getSideEffects().<E>get(this.sideEffectKeys.get(0)).get()) :
+                (E) this.getMapOfSideEffects();
     }
 
     public Map<String, Object> getMapOfSideEffects() {
         final Map<String, Object> sideEffects = new HashMap<>();
         for (final String sideEffectKey : this.sideEffectKeys) {
-            this.getTraversal().asAdmin().getSideEffects().get(sideEffectKey).ifPresent(value -> sideEffects.put(sideEffectKey, value instanceof ReducingBarrierStep.FinalGet ? ((ReducingBarrierStep.FinalGet) value).getFinal() : value));
+            this.getTraversal().asAdmin().getSideEffects().get(sideEffectKey).ifPresent(value -> sideEffects.put(sideEffectKey, FinalGet.tryFinalGet(value)));
         }
         return sideEffects;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/FinalGet.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/FinalGet.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/FinalGet.java
new file mode 100644
index 0000000..2d0efbe
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/FinalGet.java
@@ -0,0 +1,32 @@
+/*
+ * 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.traversal.step.util;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public interface FinalGet<A> {
+
+    public A getFinal();
+
+    public static <A> A tryFinalGet(final Object object) {
+        return object instanceof FinalGet ? ((FinalGet<A>) object).getFinal() : (A) object;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
index ce3bc4c..bb7d523 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
@@ -177,16 +177,4 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
             emitter.emit(FinalGet.tryFinalGet(mutatingSeed));
         }
     }
-
-    /////
-
-    public interface FinalGet<A> {
-
-        public A getFinal();
-
-        public static <A> A tryFinalGet(final Object object) {
-            return object instanceof FinalGet ? ((FinalGet<A>) object).getFinal() : (A) object;
-        }
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/60b19ed8/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
index e36745f..45b3a11 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -162,7 +161,7 @@ public abstract class GroupTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Collection<String>>> get_g_V_hasXlangX_groupXaX_byXlangX_byXnameX_out_capXaX() {
-            return g.V().has("lang").group("a").by("lang").by(values("name").fold()).out().cap("a");
+            return g.V().has("lang").group("a").by("lang").by("name").out().cap("a");
         }
 
         @Override
@@ -177,7 +176,7 @@ public abstract class GroupTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<Long, Collection<String>>> get_g_V_group_byXoutE_countX_byXnameX() {
-            return g.V().<Long, Collection<String>>group().by(outE().count()).by(values("name").fold());
+            return g.V().<Long, Collection<String>>group().by(outE().count()).by("name");
         }
     }
 }