You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/05/11 17:14:06 UTC

[2/3] incubator-tinkerpop git commit: fixed a bug in BulkSet.equals() which caused the aggregate().cap() bug. Added hashCode() and equals() tests to BulkSetTest and added the exposing traversal to AggregateTest -- Fixed TINKERPOP-1215. CTR.

fixed a bug in BulkSet.equals() which caused the aggregate().cap() bug. Added hashCode() and equals() tests to BulkSetTest and added the exposing traversal to AggregateTest -- Fixed TINKERPOP-1215. CTR.


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

Branch: refs/heads/TINKERPOP-1300
Commit: 5165d0d94a6717aa4a57e70f4e4818be2699f0b1
Parents: bce3347
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed May 11 09:24:54 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed May 11 09:24:54 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  3 +-
 .../process/traversal/step/util/BulkSet.java    |  2 +-
 .../gremlin/process/util/BulkSetTest.java       | 25 ++++++++++++++
 .../step/sideEffect/GroovyAggregateTest.groovy  |  7 +++-
 .../step/sideEffect/AggregateTest.java          | 34 ++++++++++++++++++--
 5 files changed, 66 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5165d0d9/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4f0b923..e447eee 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a bug in `BulkSet.equals()` which made itself apparent when using `store()` and `aggregate()` with labeled `cap()`.
 * Fixed bug in `gremlin-driver` where certain channel-level errors would not allow the driver to reconnect.
 * Bumped SLF4J to 1.7.21 as previous versions suffered from a memory leak.
 * Fixed a bug in `Neo4jGraphStepStrategy` where it wasn't defined properly as a `ProviderOptimizationStrategy`.
@@ -40,7 +41,7 @@ TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 * Fixed bug in `:uninstall` command if the default `/ext` directory was not used.
 * Added support to Gremlin Driver to allow either plain text or GSSAPI SASL authentication allowing the client to pass the SASL mechanism in the request.
 * Improved dryRun functionality for the docs processor. It's now possible to dry run (or full run) only specific files.
-* Added precompile of ScriptInputFormat scripts to ScriptRecordReader to improve performance.
+* Added precompile of `ScriptInputFormat` scripts to `ScriptRecordReader` to improve performance.
 
 [[release-3-1-2-incubating]]
 TinkerPop 3.1.2 (Release Date: April 8, 2016)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5165d0d9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSet.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSet.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSet.java
index ce29b5a..cf0c550 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSet.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/BulkSet.java
@@ -137,7 +137,7 @@ public final class BulkSet<S> extends AbstractSet<S> implements Set<S>, Serializ
 
     @Override
     public boolean equals(final Object object) {
-        return this.map.equals(object);
+        return object instanceof BulkSet && this.map.equals(((BulkSet) object).map);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5165d0d9/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
index f340383..df1c54f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/util/BulkSetTest.java
@@ -26,6 +26,9 @@ import java.util.Random;
 import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -33,6 +36,28 @@ import static org.junit.Assert.assertEquals;
 public class BulkSetTest {
 
     @Test
+    public void shouldHaveProperHashAndEquality() {
+        final BulkSet<String> a = new BulkSet<>();
+        final BulkSet<String> b = new BulkSet<>();
+        a.add("stephen", 12);
+        a.add("marko", 32);
+        a.add("daniel", 74);
+        b.add("stephen", 12);
+        b.add("marko", 32);
+        b.add("daniel", 74);
+        assertEquals(a, b);
+        assertTrue(a.equals(b));
+        assertEquals(a.hashCode(), b.hashCode());
+        assertTrue(a.hashCode() == b.hashCode());
+        assertEquals(12, a.get("stephen"));
+        assertEquals(12, b.get("stephen"));
+        a.add("matthias", 99);
+        assertFalse(a.equals(b));
+        assertFalse(a.hashCode() == b.hashCode());
+        assertNotEquals(a.hashCode(), b.hashCode());
+    }
+
+    @Test
     public void shouldHaveProperCountAndNotOutOfMemoryException() {
         final Set<Boolean> list = new BulkSet<>();
         final Random random = new Random();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5165d0d9/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyAggregateTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyAggregateTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyAggregateTest.groovy
index a2743e9..0211f05 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyAggregateTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyAggregateTest.groovy
@@ -18,9 +18,9 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect
 
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper
 import org.apache.tinkerpop.gremlin.process.traversal.Path
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
 /**
@@ -44,5 +44,10 @@ public abstract class GroovyAggregateTest {
         public Traversal<Vertex, Path> get_g_V_out_aggregateXaX_path() {
             TraversalScriptHelper.compute("g.V.out.aggregate('a').path", g)
         }
+
+        @Override
+        public Traversal<Vertex, Collection<Integer>> get_g_V_hasLabelXpersonX_aggregateXxX_byXageX_capXxX_asXyX_selectXyX() {
+            TraversalScriptHelper.compute("g.V.hasLabel('person').aggregate('x').by('age').cap('x').as('y').select('y')", g);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5165d0d9/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateTest.java
index 74fc56b..0793794 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateTest.java
@@ -23,7 +23,7 @@ import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 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.process.traversal.step.util.BulkSet;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -36,7 +36,10 @@ import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -51,6 +54,8 @@ public abstract class AggregateTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Path> get_g_V_out_aggregateXaX_path();
 
+    public abstract Traversal<Vertex, Collection<Integer>> get_g_V_hasLabelXpersonX_aggregateXxX_byXageX_capXxX_asXyX_selectXyX();
+
     //public abstract Traversal<Vertex, Path> get_g_v1_asXxX_bothE_asXeX_valueXweightX_exceptXwX_aggregateXwX_backXeX_otherV_jumpXx_true_trueX_path(final Object v1Id);
 
     @Test
@@ -110,6 +115,26 @@ public abstract class AggregateTest extends AbstractGremlinProcessTest {
         assertTrue(secondStepCounts.values().contains(1l));
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasLabelXpersonX_aggregateXxX_byXageX_capXxX_asXyX_selectXyX() {
+        final Traversal<Vertex, Collection<Integer>> traversal = get_g_V_hasLabelXpersonX_aggregateXxX_byXageX_capXxX_asXyX_selectXyX();
+        final Collection<Integer> ages = traversal.next();
+        assertTrue(ages instanceof BulkSet);
+        assertEquals(4, ages.size());
+        assertTrue(ages.contains(29));
+        assertTrue(ages.contains(27));
+        assertTrue(ages.contains(32));
+        assertTrue(ages.contains(35));
+        final BulkSet<Integer> bulkSet = new BulkSet<>();
+        bulkSet.add(29);
+        bulkSet.add(27);
+        bulkSet.add(32);
+        bulkSet.add(35);
+        assertEquals(bulkSet, ages); // ensure bulk set equality
+        assertFalse(traversal.hasNext());
+    }
+
     /*@Test
     @LoadGraphWith(CLASSIC)
     public void g_v1_asXxX_bothE_asXeX_valueXweightX_exceptXwX_aggregateXwX_backXeX_otherV_jumpXx_true_trueX_path() {
@@ -142,6 +167,11 @@ public abstract class AggregateTest extends AbstractGremlinProcessTest {
             return g.V().out().aggregate("a").path();
         }
 
+        @Override
+        public Traversal<Vertex, Collection<Integer>> get_g_V_hasLabelXpersonX_aggregateXxX_byXageX_capXxX_asXyX_selectXyX() {
+            return g.V().hasLabel("person").aggregate("x").by("age").cap("x").as("y").select("y");
+        }
+
         /*public Traversal<Vertex, Path> get_g_v1_asXxX_bothE_asXeX_valueXweightX_exceptXwX_aggregateXwX_backXeX_otherV_jumpXx_true_trueX_path(final Object v1Id) {
             return g.V(1).as("x").bothE().as("e").value("weight").except("w").aggregate("w").back("e").otherV().jump("x", t -> true, t -> true).path();
         }*/