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/06/18 23:34:42 UTC

incubator-tinkerpop git commit: damm --- there is a bug in ConjunctionStrategy... added a WhereTest that exposes it and also something fishy with that same where test in GraphComputer. Jeez.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 6749c2001 -> ab0d2f242


damm --- there is a bug in ConjunctionStrategy... added a WhereTest that exposes it and also something fishy with that same where test in GraphComputer. Jeez.


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

Branch: refs/heads/master
Commit: ab0d2f24275f4aab66a31dcc60c62b0c7564ef69
Parents: 6749c20
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 18 15:34:37 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 18 15:34:37 2015 -0600

----------------------------------------------------------------------
 .../traversal/step/filter/WhereStep.java        | 84 +++++++++++++-----
 .../decoration/ConjunctionStrategyTest.java     |  6 ++
 .../step/filter/GroovyWhereTest.groovy          | 17 ++--
 .../traversal/step/filter/WhereTest.java        | 89 ++++++++++----------
 4 files changed, 125 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 6299cd9..fe11135 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -52,18 +52,18 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
     protected String startKey;
     protected List<String> selectKeys;
     protected P<Object> predicate;
-    protected Traversal.Admin<?, ?> traversal;
+    protected Traversal.Admin<?, ?> whereTraversal;
     protected Scope scope;
     protected final Set<String> scopeKeys = new HashSet<>();
 
-    public WhereStep(final Traversal.Admin traversal, final Scope scope, final Optional<String> startKey, final P<?> predicate) {
-        super(traversal);
+    public WhereStep(final Traversal.Admin whereTraversal, final Scope scope, final Optional<String> startKey, final P<?> predicate) {
+        super(whereTraversal);
         this.scope = scope;
         this.startKey = startKey.orElse(null);
         if(null != this.startKey) this.scopeKeys.add(this.startKey);
         this.predicate = (P) predicate;
         this.selectKeys = new ArrayList<>();
-        this.traversal = null;
+        this.whereTraversal = null;
         this.configurePredicates(this.predicate);
     }
 
@@ -73,9 +73,9 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
         this.startKey = null;
         this.predicate = null;
         this.selectKeys = null;
-        this.traversal = whereTraversal.asAdmin();
-        this.configureStartAndEndSteps(this.traversal);
-        this.traversal = this.integrateChild(this.traversal);
+        this.whereTraversal = whereTraversal.asAdmin();
+        this.configureStartAndEndSteps(this.whereTraversal);
+        this.whereTraversal = this.integrateChild(this.whereTraversal);
     }
 
     private void configureStartAndEndSteps(final Traversal.Admin<?, ?> whereTraversal) {
@@ -124,8 +124,8 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
     @Override
     protected boolean filter(final Traverser.Admin<S> traverser) {
-        if (null != this.traversal)
-            return TraversalUtil.test((Traverser.Admin) traverser, this.traversal);
+        if (null != this.whereTraversal)
+            return TraversalUtil.test((Traverser.Admin) traverser, this.whereTraversal);
         else {
             this.setPredicateValues(this.predicate, traverser, this.selectKeys.iterator());
             return this.predicate.test(null == this.startKey ? traverser.get() : this.getScopeValueByKey(Pop.last, this.startKey, traverser));
@@ -134,13 +134,13 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
     @Override
     public List<Traversal.Admin<?, ?>> getLocalChildren() {
-        return null == this.traversal ? Collections.emptyList() : Collections.singletonList(this.traversal);
+        return null == this.whereTraversal ? Collections.emptyList() : Collections.singletonList(this.whereTraversal);
     }
 
     @Override
     public String toString() {
         // TODO: revert the predicates to their string form?
-        return StringFactory.stepString(this, this.scope, this.startKey, this.predicate, this.traversal);
+        return StringFactory.stepString(this, this.scope, this.startKey, this.predicate, this.whereTraversal);
     }
 
     @Override
@@ -154,13 +154,13 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
         if (null != this.predicate)
             clone.predicate = this.predicate.clone();
         else
-            clone.traversal = clone.integrateChild(this.traversal.clone());
+            clone.whereTraversal = clone.integrateChild(this.whereTraversal.clone());
         return clone;
     }
 
     @Override
     public int hashCode() {
-        return super.hashCode() ^ this.scope.hashCode() ^ (null == this.predicate ? this.traversal.hashCode() : this.predicate.hashCode());
+        return super.hashCode() ^ this.scope.hashCode() ^ (null == this.predicate ? this.whereTraversal.hashCode() : this.predicate.hashCode());
     }
 
     @Override
@@ -187,9 +187,10 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
     //////////////////////////////
 
-    public class WhereStartStep extends MapStep<S, Object> {
+    public static class WhereStartStep<S> extends MapStep<S, Object> implements Scoping {
 
         private final String selectKey;
+        private Scope scope = Scope.global;
 
         public WhereStartStep(final Traversal.Admin traversal, final String selectKey) {
             super(traversal);
@@ -198,26 +199,47 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
         @Override
         protected Object map(final Traverser.Admin<S> traverser) {
-            if (this.traversal.getEndStep() instanceof WhereStep.WhereEndStep)
-                ((WhereEndStep) this.traversal.getEndStep()).processStartTraverser(traverser);
-            return null == this.selectKey ? traverser.get() : WhereStep.this.getScopeValueByKey(Pop.last, this.selectKey, traverser);
+            if (this.getTraversal().getEndStep() instanceof WhereEndStep)
+                ((WhereEndStep) this.getTraversal().getEndStep()).processStartTraverser(traverser);
+            return null == this.selectKey ? traverser.get() : this.getScopeValueByKey(Pop.last, this.selectKey, traverser);
         }
 
         @Override
         public String toString() {
-            return StringFactory.stepString(this, this.selectKey);
+            return StringFactory.stepString(this, this.scope, this.selectKey);
         }
 
         @Override
         public int hashCode() {
             return super.hashCode() ^ (null == this.selectKey ? "null".hashCode() : this.selectKey.hashCode());
         }
+
+        @Override
+        public Scope getScope() {
+            return this.scope;
+        }
+
+        @Override
+        public Scope recommendNextScope() {
+            return this.scope;
+        }
+
+        @Override
+        public void setScope(Scope scope) {
+            this.scope = scope;
+        }
+
+        @Override
+        public Set<String> getScopeKeys() {
+            return null == this.selectKey ? Collections.emptySet() : Collections.singleton(this.selectKey);
+        }
     }
 
-    public class WhereEndStep extends FilterStep<Object> {
+    public static class WhereEndStep extends FilterStep<Object> implements Scoping {
 
         private final String matchKey;
         private Object matchValue = null;
+        private Scope scope = Scope.global;
 
         public WhereEndStep(final Traversal.Admin traversal, final String matchKey) {
             super(traversal);
@@ -226,7 +248,7 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
         public void processStartTraverser(final Traverser.Admin traverser) {
             if (null != this.matchKey)
-                this.matchValue = WhereStep.this.getScopeValueByKey(Pop.last, this.matchKey, traverser);
+                this.matchValue = this.getScopeValueByKey(Pop.last, this.matchKey, traverser);
         }
 
         @Override
@@ -236,13 +258,33 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
         @Override
         public String toString() {
-            return StringFactory.stepString(this, this.matchKey);
+            return StringFactory.stepString(this, this.scope, this.matchKey);
         }
 
         @Override
         public int hashCode() {
             return super.hashCode() ^ (null == this.matchKey ? "null".hashCode() : this.matchKey.hashCode());
         }
+
+        @Override
+        public Scope getScope() {
+            return this.scope;
+        }
+
+        @Override
+        public Scope recommendNextScope() {
+            return this.scope;
+        }
+
+        @Override
+        public void setScope(Scope scope) {
+            this.scope = scope;
+        }
+
+        @Override
+        public Set<String> getScopeKeys() {
+            return null == this.matchKey ? Collections.emptySet() : Collections.singleton(this.matchKey);
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
index 56a5611..89902ff 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ConjunctionStrategyTest.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
@@ -34,6 +35,8 @@ import org.junit.runners.Parameterized;
 
 import java.util.Arrays;
 
+import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -119,6 +122,9 @@ public class ConjunctionStrategyTest {
             return Arrays.asList(new Traversal[][]{
                     {__.has("name", "stephen").or().where(__.out("knows").has("name", "stephen")), __.or(__.has("name", "stephen"), __.where(__.out("knows").has("name", "stephen")))},
                     {__.out("a").out("b").and().out("c").or().out("d"), __.and(__.out("a").out("b"), __.or(__.out("c"), __.out("d")))},
+                    {__.as("1").out("a").out("b").as("2").and().as("3").out("c").as("4").or().as("5").out("d").as("6"), __.and(__.as("1").out("a").out("b").as("2"), __.or(__.as("3").out("c").as("4"), __.as("5").out("d").as("6")))},
+                    {__.as("1").out("a").out("b").and().as("3").out("c").or().as("5").out("d"), __.and(__.as("1").out("a").out("b"), __.or(__.as("3").out("c"), __.as("5").out("d")))},
+                   // {__.as("1").out("a").out("b").or().as("3").out("c").and().as("5").out("d"), __.or(__.as("1").out("a").out("b"), __.and(__.as("3").out("c"), __.as("5").out("d")))},
                     {__.as("a").out().as("b").and().as("c").in().as("d"), __.and(__.as("a").out().as("b"),__.as("c").in().as("d"))}
             });
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
index e6fbe34..a52fe4f 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
@@ -107,8 +107,8 @@ public abstract class GroovyWhereTest {
         // complex and/or functionality
 
         @Override
-        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX() {
-            TraversalScriptHelper.compute("g.V.as('a').out.as('b').where(and(__.as('a').out('knows').as('b'),or(__.as('b').out('created').has('name','ripple'),__.as('b').in('knows').count.is(not(eq(0)))))).select.by('name')", g)
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select() {
+            TraversalScriptHelper.compute("g.V.as('a').out.as('b').where(and(__.as('a').out('knows').as('b'),or(__.as('b').out('created').has('name','ripple'),__.as('b').in('knows').count.is(not(eq(0)))))).select", g)
         }
 
         @Override
@@ -117,14 +117,19 @@ public abstract class GroovyWhereTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX() {
-            TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').where(and(__.as('b').in,__.not(__.as('a').out('created').has('name','ripple')))).select.by('name')", g)
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select() {
+            TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').where(and(__.as('b').in,__.not(__.as('a').out('created').has('name','ripple')))).select", g)
         }
 
 
         @Override
-        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX() {
-            TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').in('created').as('c').both('knows').both('knows').as('d').where('c',not(eq('a').or(eq('d')))).select.by('name')", g)
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select() {
+            TraversalScriptHelper.compute("g.V.as('a').out('created').as('b').in('created').as('c').both('knows').both('knows').as('d').where('c',not(eq('a').or(eq('d')))).select", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select() {
+            TraversalScriptHelper.compute("g.V.as('a').out.as('b').where(__.as('b').in.count.is(eq(3)).or.where(__.as('b').out('created').and.as('b').has(label,'person'))).select", g)
         }
 
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ab0d2f24/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index 294010e..1803c5d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -83,13 +84,15 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     // complex and/or functionality
 
-    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX();
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select();
 
     public abstract Traversal<Vertex, String> get_g_V_whereXoutXcreatedX_and_outXknowsX_or_inXknowsXX_valuesXnameX();
 
-    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX();
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select();
 
-    public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX();
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select();
+
+    public abstract Traversal<Vertex, Map<String,Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select();
 
     // multi-labels
 
@@ -272,18 +275,12 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX() {
-        Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX();
+    public void g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select() {
+        Traversal<Vertex, Map<String, Object>> traversal = get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select();
         printTraversalForm(traversal);
-        int counter = 0;
-        while (traversal.hasNext()) {
-            final Map<String, String> map = traversal.next();
-            assertEquals(2, map.size());
-            assertEquals("marko", map.get("a"));
-            assertTrue(map.get("b").equals("josh") || map.get("b").equals("vadas"));
-            counter++;
-        }
-        assertEquals(2, counter);
+        checkResults(makeMapList(2,
+                "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "josh"),
+                "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "vadas")), traversal);
     }
 
     @Test
@@ -296,37 +293,35 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX() {
-        Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX();
+    public void g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select() {
+        Traversal<Vertex, Map<String, Object>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select();
         printTraversalForm(traversal);
-        int counter = 0;
-        while (traversal.hasNext()) {
-            final Map<String, String> map = traversal.next();
-            assertEquals(2, map.size());
-            assertTrue(map.get("a").equals("marko") || map.get("a").equals("peter"));
-            assertEquals("lop", map.get("b"));
-            counter++;
-        }
-        assertEquals(2, counter);
+        checkResults(makeMapList(2,
+                "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "lop"),
+                "a", convertToVertex(graph, "peter"), "b", convertToVertex(graph, "lop")), traversal);
     }
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX() {
-        Traversal<Vertex, Map<String, String>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX();
+    public void g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select() {
+        Traversal<Vertex, Map<String, Object>> traversal = get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select();
         printTraversalForm(traversal);
-        int counter = 0;
-        while (traversal.hasNext()) {
-            counter++;
-            final Map<String, String> map = traversal.next();
-            assertEquals(4, map.size());
-            assertTrue(map.get("a").equals("marko") || map.get("a").equals("peter"));
-            assertEquals("lop", map.get("b"));
-            assertEquals("josh", map.get("c"));
-            assertEquals("vadas", map.get("d"));
+        checkResults(makeMapList(4,
+                "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph, "lop"), "c", convertToVertex(graph, "josh"), "d", convertToVertex(graph, "vadas"),
+                "a", convertToVertex(graph, "peter"), "b", convertToVertex(graph, "lop"), "c", convertToVertex(graph, "josh"), "d", convertToVertex(graph, "vadas")), traversal);
+    }
 
-        }
-        assertEquals(2, counter);
+    @Test
+    @LoadGraphWith(MODERN)
+    @IgnoreEngine(TraversalEngine.Type.COMPUTER) // TODO --- something fishy here.
+    public void g_V_asXaX_out_asXbX_whereXasXbX_in_count_isXeqX3XX_or_whereXasXbX_outXcreatedX_and_asXbX_hasXlabel_personXXX_select()  {
+        final Traversal<Vertex, Map<String,Object>> traversal = get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(2,
+                "a",convertToVertex(graph,"marko"),"b",convertToVertex(graph,"josh"),
+                "a",convertToVertex(graph,"marko"),"b",convertToVertex(graph,"lop"),
+                "a",convertToVertex(graph,"peter"),"b",convertToVertex(graph,"lop"),
+                "a",convertToVertex(graph,"josh"),"b",convertToVertex(graph,"lop")),traversal);
     }
 
     public static class Traversals extends WhereTest {
@@ -402,8 +397,8 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
         // complex and/or functionality
 
         @Override
-        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select_byXnameX() {
-            return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).<String>select().by("name");
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_select() {
+            return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select();
         }
 
         @Override
@@ -412,13 +407,19 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select_byXnameX() {
-            return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).<String>select().by("name");
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_whereXandXasXbX_in__notXasXaX_outXcreatedX_hasXname_rippleXXX_select() {
+            return g.V().as("a").out("created").as("b").where(and(as("b").in(), not(as("a").out("created").has("name", "ripple")))).select();
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select() {
+            return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).select();
         }
 
         @Override
-        public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_bothXknowsX_bothXknowsX_asXdX_whereXc__notXeqXaX_orXeqXdXXXX_select_byXnameX() {
-            return g.V().as("a").out("created").as("b").in("created").as("c").both("knows").both("knows").as("d").where("c", P.not(P.eq("a").or(P.eq("d")))).<String>select().by("name");
+        public Traversal<Vertex, Map<String,Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_select() {
+            // TODO: if you put 'b' in the where() it selects from path and you can't get path object metadata...damn.
+            return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select();
         }
     }
 }
\ No newline at end of file