You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2015/10/22 20:02:13 UTC

[1/9] incubator-tinkerpop git commit: added mixed type tests (failing for now)

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 436dbd99b -> 53dd9aad7


added mixed type tests (failing for now)


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

Branch: refs/heads/master
Commit: 66a765e593985edc96268115b3d0bc2450c65b90
Parents: 4fa22d8
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Oct 21 02:02:03 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Oct 21 02:02:03 2015 +0200

----------------------------------------------------------------------
 .../gremlin/process/traversal/OperatorTest.java | 38 +++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/66a765e5/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
index dbcbd7d..b57f5ce 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
@@ -39,6 +39,12 @@ public class OperatorTest {
                 {Operator.div, 10l, 2l, 5l},
                 {Operator.div, 10f, 2f, 5f},
                 {Operator.div, 10d, 2d, 5d},
+                {Operator.div, 10, 2d, 5d},
+                {Operator.div, 10, 2f, 5f},
+                {Operator.div, 10d, 2, 5d},
+                {Operator.div, 10f, 2d, 5d},
+                {Operator.div, 10f, 2l, 5d},
+                {Operator.div, 10f, 2, 5f},
                 {Operator.max, 10, 2, 10},
                 {Operator.max, 10l, 2l, 10l},
                 {Operator.max, 10f, 2f, 10f},
@@ -47,6 +53,12 @@ public class OperatorTest {
                 {Operator.max, 2l, 10l, 10l},
                 {Operator.max, 2f, 10f, 10f},
                 {Operator.max, 2d, 10d, 10d},
+                {Operator.max, 10, 2d, 10d},
+                {Operator.max, 10, 2f, 10f},
+                {Operator.max, 10d, 2, 10d},
+                {Operator.max, 10f, 2d, 10d},
+                {Operator.max, 10f, 2l, 10d},
+                {Operator.max, 10f, 2, 10f},
                 {Operator.min, 10, 2, 2},
                 {Operator.min, 10l, 2l, 2l},
                 {Operator.min, 10f, 2f, 2f},
@@ -55,18 +67,42 @@ public class OperatorTest {
                 {Operator.min, 2l, 10l, 2l},
                 {Operator.min, 2f, 10f, 2f},
                 {Operator.min, 2d, 10d, 2d},
+                {Operator.min, 10, 2d, 2d},
+                {Operator.min, 10, 2f, 2f},
+                {Operator.min, 10d, 2, 2d},
+                {Operator.min, 10f, 2d, 2d},
+                {Operator.min, 10f, 2l, 2d},
+                {Operator.min, 10f, 2, 2f},
                 {Operator.minus, 10, 2, 8},
                 {Operator.minus, 10l, 2l, 8l},
                 {Operator.minus, 10f, 2f, 8f},
                 {Operator.minus, 10d, 2d, 8d},
+                {Operator.minus, 10, 2d, 8d},
+                {Operator.minus, 10, 2f, 8f},
+                {Operator.minus, 10d, 2, 8d},
+                {Operator.minus, 10f, 2d, 8d},
+                {Operator.minus, 10f, 2l, 8d},
+                {Operator.minus, 10f, 2, 8f},
                 {Operator.mult, 5, 4, 20},
                 {Operator.mult, 5l, 4l, 20l},
                 {Operator.mult, 5f, 4f, 20f},
                 {Operator.mult, 5d, 4d, 20d},
+                {Operator.mult, 5, 4d, 20d},
+                {Operator.mult, 5, 4f, 20f},
+                {Operator.mult, 5d, 4, 20d},
+                {Operator.mult, 5f, 4d, 20d},
+                {Operator.mult, 5f, 4l, 20d},
+                {Operator.mult, 5f, 4, 20f},
                 {Operator.sum, 7, 3, 10},
                 {Operator.sum, 7l, 3l, 10l},
                 {Operator.sum, 7f, 3f, 10f},
-                {Operator.sum, 7d, 3d, 10d}
+                {Operator.sum, 7d, 3d, 10d},
+                {Operator.sum, 7, 3d, 10d},
+                {Operator.sum, 7, 3f, 10f},
+                {Operator.sum, 7d, 3, 10d},
+                {Operator.sum, 7f, 3d, 10d},
+                {Operator.sum, 7f, 3l, 10d},
+                {Operator.sum, 7f, 3, 10f}
         }));
     }
 


[6/9] incubator-tinkerpop git commit: fixed number types in (Groovy)SackTest

Posted by dk...@apache.org.
fixed number types in (Groovy)SackTest


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

Branch: refs/heads/master
Commit: af1f2a82d4b6c2f8bff61a98a1efe01b43499697
Parents: 47363c8
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Oct 21 18:12:16 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Oct 21 18:12:16 2015 +0200

----------------------------------------------------------------------
 .../step/sideEffect/GroovySackTest.groovy       |  4 ++--
 .../traversal/step/sideEffect/SackTest.java     | 20 +++++++++++---------
 2 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/af1f2a82/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
index 8d7013f..2eab85d 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
@@ -40,7 +40,7 @@ public abstract class GroovySackTest {
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
             TraversalScriptHelper.compute("g.withSack(0.0f).V.repeat(__.outE.sack(sum).by('weight').inV).times(2).sack()", g)
         }
 
@@ -50,7 +50,7 @@ public abstract class GroovySackTest {
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
             TraversalScriptHelper.compute("g.withSack(0.0f).V.repeat(__.outE.sack(sum, 'weight').inV).times(2).sack", g)
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/af1f2a82/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
index 8e30e5d..c88ea19 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
@@ -36,7 +36,9 @@ import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
-import static org.junit.Assert.*;
+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)
@@ -48,13 +50,13 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsumX_byXweightX_inV_sack_sum();
 
-    public abstract Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack();
+    public abstract Traversal<Vertex, Double> get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack();
 
     @Deprecated
     public abstract Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum();
 
     @Deprecated
-    public abstract Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
+    public abstract Traversal<Vertex, Double> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
 
     public abstract Traversal<Vertex, Map> get_g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack();
 
@@ -91,18 +93,18 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
-        final Traversal<Vertex, Float> traversal = get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack();
+        final Traversal<Vertex, Double> traversal = get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack();
         printTraversalForm(traversal);
-        checkResults(Arrays.asList(2.0f, 1.4f), traversal);
+        checkResults(Arrays.asList(2.0d, 1.4d), traversal);
     }
 
     @Test
     @LoadGraphWith(MODERN)
     @Deprecated
     public void g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-        final Traversal<Vertex, Float> traversal = get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
+        final Traversal<Vertex, Double> traversal = get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
         printTraversalForm(traversal);
-        checkResults(Arrays.asList(2.0f, 1.4f), traversal);
+        checkResults(Arrays.asList(2.0d, 1.4d), traversal);
     }
 
     @Test
@@ -150,7 +152,7 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_repeatXoutE_sackXsumX_byXweightX_inVX_timesX2X_sack() {
             return g.withSack(0.0f).V().repeat(outE().sack(Operator.sum).by("weight").inV()).times(2).sack();
         }
 
@@ -160,7 +162,7 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
             return g.withSack(0.0f).V().repeat(outE().sack(Operator.sum, "weight").inV()).times(2).sack();
         }
 


[8/9] incubator-tinkerpop git commit: updated CHANGELOG and upgrade docs

Posted by dk...@apache.org.
updated CHANGELOG and upgrade docs


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

Branch: refs/heads/master
Commit: cb3c1b7da353eed5151e3ebcfaeeb0c61cdbfbd0
Parents: 6d42525
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Oct 22 15:07:54 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Oct 22 15:07:54 2015 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                 | 1 +
 docs/src/upgrade-release-3.1.x-incubating.asciidoc | 5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cb3c1b7d/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4d5c8eb..1be7c77 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.0 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed `Number` handling in `Operator` enums. Prior this change a lot of operations on mixed `Number` types returned a wrong result (wrong data type).
 * Fixed a bug in Gremlin Server/Driver serializer where empty buffers were getting returned in certain cases.
 * Renamed `ConjunctionX` to `ConnectiveX` because "conjunction" is assumed "and" (disjunction "or"), where "connective" is the parent concept.
 * Removed `PathIdentityStep` as it was a hack that is now solved by `Traversal.Admin.addTraverserRequirement()`.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/cb3c1b7d/docs/src/upgrade-release-3.1.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade-release-3.1.x-incubating.asciidoc b/docs/src/upgrade-release-3.1.x-incubating.asciidoc
index c2425a3..efbc15d 100644
--- a/docs/src/upgrade-release-3.1.x-incubating.asciidoc
+++ b/docs/src/upgrade-release-3.1.x-incubating.asciidoc
@@ -35,7 +35,8 @@ Additional upgrade information can be found here:
 Important Changes
 ~~~~~~~~~~~~~~~~~
 
-* The Gephi Plugin has improved integration with Gephi, where manually inserting {{store}} steps to visualize a running traversal is no longer required.
+* The data type of `Operator` enums will now always be the highest common data type of the two given numbers, rather than the data type of the first number, as it's been before.
+* The Gephi Plugin has improved integration with Gephi, where manually inserting `store` steps to visualize a running traversal is no longer required.
 * Entire TinkerGraph instances can be serialized over Gryo.
 * Hadoop1 support has been dropped. Hadoop2 is now supported. Giraph 1.1.0 is now supported and Spark of Hadoop2 YARN.
 * The implementation and semantics of `GraphTraversal.group()` has changed. The previous model is deprecated and renamed to `groupV3d0()`.
@@ -113,4 +114,4 @@ See link:https://issues.apache.org/jira/browse/TINKERPOP3-805[TINKERPOP3-805] fo
 Graph Traversal Updates
 +++++++++++++++++++++++
 
-There were numerous changes to the `GraphTraversal` API. Nearly all changes are backwards compatible with respective "deprecated" annotations. Please review the respective updates specified in the "Graph System Users" section.
\ No newline at end of file
+There were numerous changes to the `GraphTraversal` API. Nearly all changes are backwards compatible with respective "deprecated" annotations. Please review the respective updates specified in the "Graph System Users" section.


[4/9] incubator-tinkerpop git commit: verified, that Operator/NumberHelper can handle any type that extends the base class Number

Posted by dk...@apache.org.
verified, that Operator/NumberHelper can handle any type that extends the base class Number


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

Branch: refs/heads/master
Commit: 78a0e3d58da45fe5c836845a9e643240f24d369f
Parents: 209ef1a
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Oct 21 03:40:55 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Oct 21 03:40:55 2015 +0200

----------------------------------------------------------------------
 .../gremlin/process/traversal/NumberHelper.java |  2 +-
 .../traversal/OperatorExceptionTest.java        | 39 +++++++++--------
 .../gremlin/process/traversal/OperatorTest.java | 44 +++++++++++++++++++-
 3 files changed, 63 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/78a0e3d5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
index 3212da9..8dfd113 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
@@ -182,7 +182,7 @@ public class NumberHelper {
             } else if (clazz.equals(Double.class)) {
                 bits = bits < 64 ? 64 : bits;
                 fp = true;
-            } else if (clazz.equals(BigDecimal.class)) {
+            } else /*if (clazz.equals(BigDecimal.class))*/ {
                 bits = bits < 128 ? 128 : bits;
                 fp = true;
                 break; // maxed out, no need to check remaining numbers

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/78a0e3d5/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorExceptionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorExceptionTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorExceptionTest.java
index 7c8250d..9aa1339 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorExceptionTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorExceptionTest.java
@@ -20,39 +20,38 @@ package org.apache.tinkerpop.gremlin.process.traversal;
 
 import org.junit.Test;
 
-import java.math.BigInteger;
-
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class OperatorExceptionTest {
-    @Test(expected = IllegalArgumentException.class)
-    public void shouldThrowIfValueToDivIsNoExpectedType() {
-        Operator.div.apply(new BigInteger("1"), new BigInteger("1"));
+
+    @Test(expected = ClassCastException.class)
+    public void shouldThrowIfValueToDivIsNotNumeric() {
+        Operator.div.apply("1", "1");
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void shouldThrowIfValueToMaxIsNoExpectedType() {
-        Operator.max.apply(new BigInteger("1"), new BigInteger("1"));
+    @Test(expected = ClassCastException.class)
+    public void shouldThrowIfValueToMaxIsNotNumeric() {
+        Operator.max.apply("1", "1");
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void shouldThrowIfValueToMinIsNoExpectedType() {
-        Operator.min.apply(new BigInteger("1"), new BigInteger("1"));
+    @Test(expected = ClassCastException.class)
+    public void shouldThrowIfValueToMinIsNotNumeric() {
+        Operator.min.apply("1", "1");
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void shouldThrowIfValueToMinusIsNoExpectedType() {
-        Operator.minus.apply(new BigInteger("1"), new BigInteger("1"));
+    @Test(expected = ClassCastException.class)
+    public void shouldThrowIfValueToMinusIsNotNumeric() {
+        Operator.minus.apply("1", "1");
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void shouldThrowIfValueToMultIsNoExpectedType() {
-        Operator.mult.apply(new BigInteger("1"), new BigInteger("1"));
+    @Test(expected = ClassCastException.class)
+    public void shouldThrowIfValueToMultIsNotNumeric() {
+        Operator.mult.apply("1", "1");
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void shouldThrowIfValueToSumIsNoExpectedType() {
-        Operator.sum.apply(new BigInteger("1"), new BigInteger("1"));
+    @Test(expected = ClassCastException.class)
+    public void shouldThrowIfValueToSumIsNotNumeric() {
+        Operator.sum.apply("1", "1");
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/78a0e3d5/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
index c325375..38f7742 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
@@ -34,6 +34,42 @@ import static org.junit.Assert.assertEquals;
  */
 @RunWith(Parameterized.class)
 public class OperatorTest {
+
+    /**
+     * Required to verify that Operator can handle Number type, that it doesn't know explicitly.
+     */
+    static class CustomNumber extends Number {
+
+        public final static CustomNumber ONE = new CustomNumber(1);
+        public final static CustomNumber TEN = new CustomNumber(10);
+
+        private int n;
+
+        private CustomNumber(final int number) {
+            this.n = number;
+        }
+
+        @Override
+        public int intValue() {
+            return n;
+        }
+
+        @Override
+        public long longValue() {
+            return n;
+        }
+
+        @Override
+        public float floatValue() {
+            return n;
+        }
+
+        @Override
+        public double doubleValue() {
+            return n;
+        }
+    }
+
     @Parameterized.Parameters(name = "{0}({1},{2}) = {3}")
     public static Iterable<Object[]> data() {
         return new ArrayList<>(Arrays.asList(new Object[][]{
@@ -50,6 +86,7 @@ public class OperatorTest {
                 {Operator.div, BigInteger.TEN, 2, BigInteger.valueOf(5l)},
                 {Operator.div, BigInteger.TEN, 2f, BigDecimal.valueOf(5l)},
                 {Operator.div, BigDecimal.TEN, 2, BigDecimal.valueOf(5l)},
+                {Operator.div, CustomNumber.TEN, 2, BigDecimal.valueOf(5l)},
                 {Operator.max, 10, 2, 10},
                 {Operator.max, 10l, 2l, 10l},
                 {Operator.max, 10f, 2f, 10f},
@@ -67,6 +104,7 @@ public class OperatorTest {
                 {Operator.max, BigInteger.TEN, 1, BigInteger.TEN},
                 {Operator.max, BigInteger.TEN, BigDecimal.ONE, BigDecimal.TEN},
                 {Operator.max, BigDecimal.TEN, 1, BigDecimal.TEN},
+                {Operator.max, 1, CustomNumber.TEN, BigDecimal.TEN},
                 {Operator.min, 10, 2, 2},
                 {Operator.min, 10l, 2l, 2l},
                 {Operator.min, 10f, 2f, 2f},
@@ -84,6 +122,7 @@ public class OperatorTest {
                 {Operator.min, BigInteger.TEN, 1, BigInteger.ONE},
                 {Operator.min, BigInteger.TEN, BigDecimal.ONE, BigDecimal.ONE},
                 {Operator.min, BigDecimal.TEN, 1, BigDecimal.ONE},
+                {Operator.min, 1, CustomNumber.TEN, BigDecimal.ONE},
                 {Operator.minus, 10, 2, 8},
                 {Operator.minus, 10l, 2l, 8l},
                 {Operator.minus, 10f, 2f, 8f},
@@ -97,6 +136,7 @@ public class OperatorTest {
                 {Operator.minus, BigInteger.TEN, 2, BigInteger.valueOf(8l)},
                 {Operator.minus, BigInteger.TEN, 2f, BigDecimal.valueOf(8d)},
                 {Operator.minus, BigDecimal.TEN, 2, BigDecimal.valueOf(8l)},
+                {Operator.minus, CustomNumber.TEN, 2, BigDecimal.valueOf(8l)},
                 {Operator.mult, 5, 4, 20},
                 {Operator.mult, 5l, 4l, 20l},
                 {Operator.mult, 5f, 4f, 20f},
@@ -110,6 +150,7 @@ public class OperatorTest {
                 {Operator.mult, BigInteger.valueOf(5l), 4, BigInteger.valueOf(20l)},
                 {Operator.mult, BigInteger.valueOf(5l), 4f, BigDecimal.valueOf(20d)},
                 {Operator.mult, BigDecimal.valueOf(5d), 4, BigDecimal.valueOf(20d)},
+                {Operator.mult, CustomNumber.TEN, 2f, BigDecimal.valueOf(20d)},
                 {Operator.sum, 7, 3, 10},
                 {Operator.sum, 7l, 3l, 10l},
                 {Operator.sum, 7f, 3f, 10f},
@@ -122,7 +163,8 @@ public class OperatorTest {
                 {Operator.sum, 7f, 3, 10f},
                 {Operator.sum, BigInteger.valueOf(7l), 3, BigInteger.TEN},
                 {Operator.sum, BigInteger.valueOf(7l), 3f, BigDecimal.valueOf(10d)},
-                {Operator.sum, BigDecimal.valueOf(7d), 3, BigDecimal.valueOf(10d)}
+                {Operator.sum, BigDecimal.valueOf(7d), 3, BigDecimal.valueOf(10d)},
+                {Operator.sum, CustomNumber.TEN, CustomNumber.ONE, BigDecimal.valueOf(11l)}
         }));
     }
 


[5/9] incubator-tinkerpop git commit: Merge branch 'master' into TINKERPOP3-861

Posted by dk...@apache.org.
Merge branch 'master' into TINKERPOP3-861


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

Branch: refs/heads/master
Commit: 47363c88716a40ddc50ccd9df520514c8d2903ca
Parents: 78a0e3d 17d4489
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Oct 21 13:27:16 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Oct 21 13:27:16 2015 +0200

----------------------------------------------------------------------
 .../jsr223/GremlinGroovyScriptEngineTimedInterruptTest.java    | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[2/9] incubator-tinkerpop git commit: implemented NumberHelper and fixed Number handling in Operator (also added a few more tests for BigInteger ad BigDecimal)

Posted by dk...@apache.org.
implemented NumberHelper and fixed Number handling in Operator (also added a few more tests for BigInteger ad BigDecimal)


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

Branch: refs/heads/master
Commit: e25af2990b387cf191c1fa3f9cb12a2f4318d5a7
Parents: 66a765e
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Oct 21 02:55:13 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Oct 21 02:55:13 2015 +0200

----------------------------------------------------------------------
 .../gremlin/process/traversal/NumberHelper.java | 280 +++++++++++++++++++
 .../gremlin/process/traversal/Operator.java     |  78 +-----
 .../gremlin/process/traversal/OperatorTest.java |  22 +-
 3 files changed, 307 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e25af299/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
new file mode 100644
index 0000000..3212da9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NumberHelper.java
@@ -0,0 +1,280 @@
+/*
+ * 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;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.function.BiFunction;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class NumberHelper {
+
+    static final NumberHelper BYTE_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> a.byteValue() + b.byteValue(),
+            (a, b) -> a.byteValue() - b.byteValue(),
+            (a, b) -> a.byteValue() * b.byteValue(),
+            (a, b) -> a.byteValue() / b.byteValue(),
+            (a, b) -> {
+                final byte x = a.byteValue(), y = b.byteValue();
+                return x <= y ? x : y;
+            },
+            (a, b) -> {
+                final byte x = a.byteValue(), y = b.byteValue();
+                return x >= y ? x : y;
+            });
+
+    static final NumberHelper SHORT_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> a.shortValue() + b.shortValue(),
+            (a, b) -> a.shortValue() - b.shortValue(),
+            (a, b) -> a.shortValue() * b.shortValue(),
+            (a, b) -> a.shortValue() / b.shortValue(),
+            (a, b) -> {
+                final short x = a.shortValue(), y = b.shortValue();
+                return x <= y ? x : y;
+            },
+            (a, b) -> {
+                final short x = a.shortValue(), y = b.shortValue();
+                return x >= y ? x : y;
+            });
+
+    static final NumberHelper INTEGER_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> a.intValue() + b.intValue(),
+            (a, b) -> a.intValue() - b.intValue(),
+            (a, b) -> a.intValue() * b.intValue(),
+            (a, b) -> a.intValue() / b.intValue(),
+            (a, b) -> {
+                final int x = a.intValue(), y = b.intValue();
+                return x <= y ? x : y;
+            },
+            (a, b) -> {
+                final int x = a.intValue(), y = b.intValue();
+                return x >= y ? x : y;
+            });
+
+    static final NumberHelper LONG_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> a.longValue() + b.longValue(),
+            (a, b) -> a.longValue() - b.longValue(),
+            (a, b) -> a.longValue() * b.longValue(),
+            (a, b) -> a.longValue() / b.longValue(),
+            (a, b) -> {
+                final long x = a.longValue(), y = b.longValue();
+                return x <= y ? x : y;
+            },
+            (a, b) -> {
+                final long x = a.longValue(), y = b.longValue();
+                return x >= y ? x : y;
+            });
+
+    static final NumberHelper BIG_INTEGER_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> bigIntegerValue(a).add(bigIntegerValue(b)),
+            (a, b) -> bigIntegerValue(a).subtract(bigIntegerValue(b)),
+            (a, b) -> bigIntegerValue(a).multiply(bigIntegerValue(b)),
+            (a, b) -> bigIntegerValue(a).divide(bigIntegerValue(b)),
+            (a, b) -> {
+                final BigInteger x = bigIntegerValue(a), y = bigIntegerValue(b);
+                return x.compareTo(y) <= 0 ? x : y;
+            },
+            (a, b) -> {
+                final BigInteger x = bigIntegerValue(a), y = bigIntegerValue(b);
+                return x.compareTo(y) >= 0 ? x : y;
+            });
+
+    static final NumberHelper FLOAT_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> a.floatValue() + b.floatValue(),
+            (a, b) -> a.floatValue() - b.floatValue(),
+            (a, b) -> a.floatValue() * b.floatValue(),
+            (a, b) -> a.floatValue() / b.floatValue(),
+            (a, b) -> {
+                final float x = a.floatValue(), y = b.floatValue();
+                return x <= y ? x : y;
+            },
+            (a, b) -> {
+                final float x = a.floatValue(), y = b.floatValue();
+                return x >= y ? x : y;
+            });
+
+    static final NumberHelper DOUBLE_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> a.doubleValue() + b.doubleValue(),
+            (a, b) -> a.doubleValue() - b.doubleValue(),
+            (a, b) -> a.doubleValue() * b.doubleValue(),
+            (a, b) -> a.doubleValue() / b.doubleValue(),
+            (a, b) -> {
+                final double x = a.doubleValue(), y = b.doubleValue();
+                return x <= y ? x : y;
+            },
+            (a, b) -> {
+                final double x = a.doubleValue(), y = b.doubleValue();
+                return x >= y ? x : y;
+            });
+
+    static final NumberHelper BIG_DECIMAL_NUMBER_HELPER = new NumberHelper(
+            (a, b) -> bigDecimalValue(a).add(bigDecimalValue(b)),
+            (a, b) -> bigDecimalValue(a).subtract(bigDecimalValue(b)),
+            (a, b) -> bigDecimalValue(a).multiply(bigDecimalValue(b)),
+            (a, b) -> bigDecimalValue(a).divide(bigDecimalValue(b)),
+            (a, b) -> {
+                final BigDecimal x = bigDecimalValue(a), y = bigDecimalValue(b);
+                return x.compareTo(y) <= 0 ? x : y;
+            },
+            (a, b) -> {
+                final BigDecimal x = bigDecimalValue(a), y = bigDecimalValue(b);
+                return x.compareTo(y) >= 0 ? x : y;
+            });
+
+    public final BiFunction<Number, Number, Number> add;
+    public final BiFunction<Number, Number, Number> sub;
+    public final BiFunction<Number, Number, Number> mul;
+    public final BiFunction<Number, Number, Number> div;
+    public final BiFunction<Number, Number, Number> min;
+    public final BiFunction<Number, Number, Number> max;
+
+    private NumberHelper(final BiFunction<Number, Number, Number> add,
+                         final BiFunction<Number, Number, Number> sub,
+                         final BiFunction<Number, Number, Number> mul,
+                         final BiFunction<Number, Number, Number> div,
+                         final BiFunction<Number, Number, Number> min,
+                         final BiFunction<Number, Number, Number> max
+    ) {
+        this.add = add;
+        this.sub = sub;
+        this.mul = mul;
+        this.div = div;
+        this.min = min;
+        this.max = max;
+    }
+
+    public static Class<? extends Number> getHighestCommonNumberClass(final Number... numbers) {
+        int bits = 8;
+        boolean fp = false;
+        for (final Number number : numbers) {
+            if (number == null) continue;
+            final Class<? extends Number> clazz = number.getClass();
+            if (clazz.equals(Byte.class)) continue;
+            if (clazz.equals(Short.class)) {
+                bits = bits < 16 ? 16 : bits;
+            } else if (clazz.equals(Integer.class)) {
+                bits = bits < 32 ? 32 : bits;
+            } else if (clazz.equals(Long.class)) {
+                bits = bits < 64 ? 64 : bits;
+            } else if (clazz.equals(BigInteger.class)) {
+                bits = bits < 128 ? 128 : bits;
+            } else if (clazz.equals(Float.class)) {
+                bits = bits < 32 ? 32 : bits;
+                fp = true;
+            } else if (clazz.equals(Double.class)) {
+                bits = bits < 64 ? 64 : bits;
+                fp = true;
+            } else if (clazz.equals(BigDecimal.class)) {
+                bits = bits < 128 ? 128 : bits;
+                fp = true;
+                break; // maxed out, no need to check remaining numbers
+            }
+        }
+        return determineNumberClass(bits, fp);
+    }
+
+    public static Number add(final Number a, final Number b) {
+        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, b);
+        return getHelper(clazz).add.apply(a, b);
+    }
+
+    public static Number sub(final Number a, final Number b) {
+        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, b);
+        return getHelper(clazz).sub.apply(a, b);
+    }
+
+    public static Number mul(final Number a, final Number b) {
+        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, b);
+        return getHelper(clazz).mul.apply(a, b);
+    }
+
+    public static Number div(final Number a, final Number b) {
+        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, b);
+        return getHelper(clazz).div.apply(a, b);
+    }
+
+    public static Number min(final Number a, final Number b) {
+        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, b);
+        return getHelper(clazz).min.apply(a, b);
+    }
+
+    public static Number max(final Number a, final Number b) {
+        final Class<? extends Number> clazz = getHighestCommonNumberClass(a, b);
+        return getHelper(clazz).max.apply(a, b);
+    }
+
+    private static NumberHelper getHelper(final Class<? extends Number> clazz) {
+        if (clazz.equals(Byte.class)) {
+            return BYTE_NUMBER_HELPER;
+        }
+        if (clazz.equals(Short.class)) {
+            return SHORT_NUMBER_HELPER;
+        }
+        if (clazz.equals(Integer.class)) {
+            return INTEGER_NUMBER_HELPER;
+        }
+        if (clazz.equals(Long.class)) {
+            return LONG_NUMBER_HELPER;
+        }
+        if (clazz.equals(BigInteger.class)) {
+            return BIG_INTEGER_NUMBER_HELPER;
+        }
+        if (clazz.equals(Float.class)) {
+            return FLOAT_NUMBER_HELPER;
+        }
+        if (clazz.equals(Double.class)) {
+            return DOUBLE_NUMBER_HELPER;
+        }
+        if (clazz.equals(BigDecimal.class)) {
+            return BIG_DECIMAL_NUMBER_HELPER;
+        }
+        throw new IllegalArgumentException("Unsupported numeric type: " + clazz);
+    }
+
+    private static BigInteger bigIntegerValue(final Number number) {
+        if (number == null) return null;
+        if (number instanceof BigInteger) return (BigInteger) number;
+        return BigInteger.valueOf(number.longValue());
+    }
+
+    private static BigDecimal bigDecimalValue(final Number number) {
+        if (number == null) return null;
+        if (number instanceof BigDecimal) return (BigDecimal) number;
+        if (number instanceof BigInteger) return new BigDecimal((BigInteger) number);
+        return (number instanceof Double || number instanceof Float)
+                ? BigDecimal.valueOf(number.doubleValue())
+                : BigDecimal.valueOf(number.longValue());
+    }
+
+    private static Class<? extends Number> determineNumberClass(final int bits, final boolean floatingPoint) {
+        if (floatingPoint) {
+            if (bits <= 32) return Float.class;
+            if (bits <= 64) return Double.class;
+            return BigDecimal.class;
+        } else {
+            if (bits <= 8) return Byte.class;
+            if (bits <= 16) return Short.class;
+            if (bits <= 32) return Integer.class;
+            if (bits <= 64) return Long.class;
+            return BigInteger.class;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e25af299/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java
index 56a6bd0..31c148c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Operator.java
@@ -28,98 +28,32 @@ public enum Operator implements BinaryOperator<Object> {
 
     sum {
         public Object apply(final Object a, Object b) {
-            final Class numberClass = a.getClass();
-            if (numberClass.equals(Integer.class)) {
-                return ((Number)a).intValue() + ((Number)b).intValue();
-            } else if (numberClass.equals(Long.class)) {
-                return ((Number)a).longValue() + ((Number)b).longValue();
-            } else if (numberClass.equals(Float.class)) {
-                return ((Number)a).floatValue() + ((Number)b).floatValue();
-            } else if (numberClass.equals(Double.class)) {
-                return ((Number)a).doubleValue() + ((Number)b).doubleValue();
-            } else {
-                throw new IllegalArgumentException("This operator only supports int, long, float, or double: " + numberClass);
-            }
+            return NumberHelper.add((Number) a, (Number) b);
         }
     },
     minus {
         public Object apply(final Object a, final Object b) {
-            final Class numberClass = a.getClass();
-            if (numberClass.equals(Integer.class)) {
-                return ((Number)a).intValue() - ((Number)b).intValue();
-            } else if (numberClass.equals(Long.class)) {
-                return ((Number)a).longValue() - ((Number)b).longValue();
-            } else if (numberClass.equals(Float.class)) {
-                return ((Number)a).floatValue() - ((Number)b).floatValue();
-            } else if (numberClass.equals(Double.class)) {
-                return ((Number)a).doubleValue() - ((Number)b).doubleValue();
-            } else {
-                throw new IllegalArgumentException("This operator only supports int, long, float, or double: " + numberClass);
-            }
+            return NumberHelper.sub((Number) a, (Number) b);
         }
     },
     mult {
         public Object apply(final Object a, final Object b) {
-            final Class numberClass = a.getClass();
-            if (numberClass.equals(Integer.class)) {
-                return ((Number)a).intValue() * ((Number)b).intValue();
-            } else if (numberClass.equals(Long.class)) {
-                return ((Number)a).longValue() * ((Number)b).longValue();
-            } else if (numberClass.equals(Float.class)) {
-                return ((Number)a).floatValue() * ((Number)b).floatValue();
-            } else if (numberClass.equals(Double.class)) {
-                return ((Number)a).doubleValue() * ((Number)b).doubleValue();
-            } else {
-                throw new IllegalArgumentException("This operator only supports int, long, float, or double: " + numberClass);
-            }
+            return NumberHelper.mul((Number) a, (Number) b);
         }
     },
     div {
         public Object apply(final Object a, final Object b) {
-            final Class numberClass = a.getClass();
-            if (numberClass.equals(Integer.class)) {
-                return ((Number)a).intValue() / ((Number)b).intValue();
-            } else if (numberClass.equals(Long.class)) {
-                return ((Number)a).longValue() / ((Number)b).longValue();
-            } else if (numberClass.equals(Float.class)) {
-                return ((Number)a).floatValue() / ((Number)b).floatValue();
-            } else if (numberClass.equals(Double.class)) {
-                return ((Number)a).doubleValue() / ((Number)b).doubleValue();
-            } else {
-                throw new IllegalArgumentException("This operator only supports int, long, float, or double: " + numberClass);
-            }
+            return NumberHelper.div((Number) a, (Number) b);
         }
     },
     min {
         public Object apply(final Object a, final Object b) {
-            final Class numberClass = a.getClass();
-            if (numberClass.equals(Integer.class)) {
-                return Math.min(((Number)a).intValue(), ((Number)b).intValue());
-            } else if (numberClass.equals(Long.class)) {
-                return Math.min(((Number)a).longValue(), ((Number)b).longValue());
-            } else if (numberClass.equals(Float.class)) {
-                return Math.min(((Number)a).floatValue(), ((Number)b).floatValue());
-            } else if (numberClass.equals(Double.class)) {
-                return Math.min(((Number)a).doubleValue(), ((Number)b).doubleValue());
-            } else {
-                throw new IllegalArgumentException("This operator only supports int, long, float, or double: " + numberClass);
-            }
+            return NumberHelper.min((Number) a, (Number) b);
         }
     },
     max {
         public Object apply(final Object a, final Object b) {
-            final Class numberClass = a.getClass();
-            if (numberClass.equals(Integer.class)) {
-                return Math.max(((Number)a).intValue(), ((Number)b).intValue());
-            } else if (numberClass.equals(Long.class)) {
-                return Math.max(((Number)a).longValue(), ((Number)b).longValue());
-            } else if (numberClass.equals(Float.class)) {
-                return Math.max(((Number)a).floatValue(), ((Number)b).floatValue());
-            } else if (numberClass.equals(Double.class)) {
-                return Math.max(((Number)a).doubleValue(), ((Number)b).doubleValue());
-            } else {
-                throw new IllegalArgumentException("This operator only supports int, long, float, or double: " + numberClass);
-            }
+            return NumberHelper.max((Number) a, (Number) b);
         }
     },
     assign {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e25af299/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
index b57f5ce..c325375 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/OperatorTest.java
@@ -22,6 +22,8 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Arrays;
 
@@ -45,6 +47,9 @@ public class OperatorTest {
                 {Operator.div, 10f, 2d, 5d},
                 {Operator.div, 10f, 2l, 5d},
                 {Operator.div, 10f, 2, 5f},
+                {Operator.div, BigInteger.TEN, 2, BigInteger.valueOf(5l)},
+                {Operator.div, BigInteger.TEN, 2f, BigDecimal.valueOf(5l)},
+                {Operator.div, BigDecimal.TEN, 2, BigDecimal.valueOf(5l)},
                 {Operator.max, 10, 2, 10},
                 {Operator.max, 10l, 2l, 10l},
                 {Operator.max, 10f, 2f, 10f},
@@ -59,6 +64,9 @@ public class OperatorTest {
                 {Operator.max, 10f, 2d, 10d},
                 {Operator.max, 10f, 2l, 10d},
                 {Operator.max, 10f, 2, 10f},
+                {Operator.max, BigInteger.TEN, 1, BigInteger.TEN},
+                {Operator.max, BigInteger.TEN, BigDecimal.ONE, BigDecimal.TEN},
+                {Operator.max, BigDecimal.TEN, 1, BigDecimal.TEN},
                 {Operator.min, 10, 2, 2},
                 {Operator.min, 10l, 2l, 2l},
                 {Operator.min, 10f, 2f, 2f},
@@ -73,6 +81,9 @@ public class OperatorTest {
                 {Operator.min, 10f, 2d, 2d},
                 {Operator.min, 10f, 2l, 2d},
                 {Operator.min, 10f, 2, 2f},
+                {Operator.min, BigInteger.TEN, 1, BigInteger.ONE},
+                {Operator.min, BigInteger.TEN, BigDecimal.ONE, BigDecimal.ONE},
+                {Operator.min, BigDecimal.TEN, 1, BigDecimal.ONE},
                 {Operator.minus, 10, 2, 8},
                 {Operator.minus, 10l, 2l, 8l},
                 {Operator.minus, 10f, 2f, 8f},
@@ -83,6 +94,9 @@ public class OperatorTest {
                 {Operator.minus, 10f, 2d, 8d},
                 {Operator.minus, 10f, 2l, 8d},
                 {Operator.minus, 10f, 2, 8f},
+                {Operator.minus, BigInteger.TEN, 2, BigInteger.valueOf(8l)},
+                {Operator.minus, BigInteger.TEN, 2f, BigDecimal.valueOf(8d)},
+                {Operator.minus, BigDecimal.TEN, 2, BigDecimal.valueOf(8l)},
                 {Operator.mult, 5, 4, 20},
                 {Operator.mult, 5l, 4l, 20l},
                 {Operator.mult, 5f, 4f, 20f},
@@ -93,6 +107,9 @@ public class OperatorTest {
                 {Operator.mult, 5f, 4d, 20d},
                 {Operator.mult, 5f, 4l, 20d},
                 {Operator.mult, 5f, 4, 20f},
+                {Operator.mult, BigInteger.valueOf(5l), 4, BigInteger.valueOf(20l)},
+                {Operator.mult, BigInteger.valueOf(5l), 4f, BigDecimal.valueOf(20d)},
+                {Operator.mult, BigDecimal.valueOf(5d), 4, BigDecimal.valueOf(20d)},
                 {Operator.sum, 7, 3, 10},
                 {Operator.sum, 7l, 3l, 10l},
                 {Operator.sum, 7f, 3f, 10f},
@@ -102,7 +119,10 @@ public class OperatorTest {
                 {Operator.sum, 7d, 3, 10d},
                 {Operator.sum, 7f, 3d, 10d},
                 {Operator.sum, 7f, 3l, 10d},
-                {Operator.sum, 7f, 3, 10f}
+                {Operator.sum, 7f, 3, 10f},
+                {Operator.sum, BigInteger.valueOf(7l), 3, BigInteger.TEN},
+                {Operator.sum, BigInteger.valueOf(7l), 3f, BigDecimal.valueOf(10d)},
+                {Operator.sum, BigDecimal.valueOf(7d), 3, BigDecimal.valueOf(10d)}
         }));
     }
 


[3/9] incubator-tinkerpop git commit: Merge branch 'master' into TINKERPOP3-861

Posted by dk...@apache.org.
Merge branch 'master' into TINKERPOP3-861


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

Branch: refs/heads/master
Commit: 209ef1a4cb6757d85fa44253ae83dbfd6e2098f4
Parents: e25af29 e8936f5
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Oct 21 02:56:15 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Oct 21 02:56:15 2015 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   5 +
 docs/src/the-traversal.asciidoc                 |   4 +-
 .../upgrade-release-3.1.x-incubating.asciidoc   |  41 +++++
 .../gremlin/process/traversal/Traversal.java    |  10 +
 .../process/traversal/TraversalStrategies.java  |   4 +-
 .../traversal/dsl/graph/GraphTraversal.java     |   4 +-
 .../dsl/graph/GraphTraversalSource.java         |  49 ++---
 .../lambda/AbstractLambdaTraversal.java         |   7 +
 .../process/traversal/step/filter/AndStep.java  |   2 +-
 .../traversal/step/filter/ConjunctionStep.java  |  81 --------
 .../traversal/step/filter/ConnectiveStep.java   |  81 ++++++++
 .../process/traversal/step/filter/OrStep.java   |   2 +-
 .../step/filter/WherePredicateStep.java         |  10 +-
 .../step/filter/WhereTraversalStep.java         |   6 +-
 .../process/traversal/step/map/MatchStep.java   |  40 ++--
 .../traversal/step/util/PathIdentityStep.java   |  48 -----
 .../decoration/ConjunctionStrategy.java         | 114 ------------
 .../strategy/decoration/ConnectiveStrategy.java | 114 ++++++++++++
 .../AdjacentToIncidentStrategy.java             |   4 +-
 .../optimization/RangeByIsCountStrategy.java    |   6 +-
 .../B_LP_O_P_S_SE_SL_TraverserGenerator.java    |   8 +-
 .../B_LP_O_S_SE_SL_TraverserGenerator.java      |   8 +-
 .../B_O_S_SE_SL_TraverserGenerator.java         |   8 +-
 .../traverser/B_O_TraverserGenerator.java       |   6 +-
 .../traverser/LP_O_OB_P_S_SE_SL_Traverser.java  |  98 ++++++++++
 .../LP_O_OB_P_S_SE_SL_TraverserGenerator.java   |  62 +++++++
 .../traverser/LP_O_OB_S_SE_SL_Traverser.java    |  99 ++++++++++
 .../LP_O_OB_S_SE_SL_TraverserGenerator.java     |  61 +++++++
 .../traverser/O_OB_S_SE_SL_Traverser.java       | 137 ++++++++++++++
 .../O_OB_S_SE_SL_TraverserGenerator.java        |  59 ++++++
 .../traverser/O_TraverserGenerator.java         |   2 +-
 .../traverser/TraverserRequirement.java         |   8 +-
 .../util/DefaultTraverserGeneratorFactory.java  |  34 +++-
 .../gremlin/process/traversal/util/AndP.java    |   3 +-
 .../process/traversal/util/ConjunctionP.java    | 117 ------------
 .../process/traversal/util/ConnectiveP.java     | 115 ++++++++++++
 .../traversal/util/DefaultTraversal.java        |  27 +++
 .../process/traversal/util/EmptyTraversal.java  |   5 +
 .../gremlin/process/traversal/util/OrP.java     |   2 +-
 .../process/traversal/util/TraversalHelper.java |   4 +-
 .../gremlin/structure/io/gryo/GryoMapper.java   |  10 +-
 .../traversal/step/map/MatchStepTest.java       |   6 +-
 .../decoration/ConjunctionStrategyTest.java     | 183 -------------------
 .../decoration/ConnectiveStrategyTest.java      | 183 +++++++++++++++++++
 .../DefaultTraverserGeneratorFactoryTest.java   |  85 +++++++++
 .../step/sideEffect/GroovySackTest.groovy       |   5 +
 .../traversal/step/sideEffect/SackTest.java     |  25 ++-
 .../TinkerGraphNoStrategyComputerProvider.java  |   4 +-
 .../process/TinkerGraphNoStrategyProvider.java  |   4 +-
 49 files changed, 1345 insertions(+), 655 deletions(-)
----------------------------------------------------------------------



[9/9] incubator-tinkerpop git commit: Merge branch 'TINKERPOP3-861'

Posted by dk...@apache.org.
Merge branch 'TINKERPOP3-861'


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

Branch: refs/heads/master
Commit: 53dd9aad7d3d5ed1138acb891ffe03edd259a9b9
Parents: 436dbd9 cb3c1b7
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Oct 22 20:01:28 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Oct 22 20:01:28 2015 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../upgrade-release-3.1.x-incubating.asciidoc   |   5 +-
 .../gremlin/process/traversal/NumberHelper.java | 280 +++++++++++++++++++
 .../gremlin/process/traversal/Operator.java     |  78 +-----
 .../traversal/OperatorExceptionTest.java        |  39 ++-
 .../gremlin/process/traversal/OperatorTest.java | 100 ++++++-
 .../step/sideEffect/GroovySackTest.groovy       |   4 +-
 .../traversal/step/sideEffect/SackTest.java     |  20 +-
 8 files changed, 421 insertions(+), 106 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/53dd9aad/CHANGELOG.asciidoc
----------------------------------------------------------------------


[7/9] incubator-tinkerpop git commit: Merge branch 'master' into TINKERPOP3-861

Posted by dk...@apache.org.
Merge branch 'master' into TINKERPOP3-861


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

Branch: refs/heads/master
Commit: 6d42525438a2c1117804f413e0c85210f038c38c
Parents: af1f2a8 db92afc
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Oct 22 14:50:57 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Oct 22 14:50:57 2015 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              | 29 ++++++++++-
 .../upgrade-release-3.0.x-incubating.asciidoc   |  4 +-
 .../driver/ser/GryoMessageSerializerV1d0.java   | 13 +++--
 .../ser/GryoMessageSerializerV1d0Test.java      | 55 ++++++++++++++++++++
 ...linGroovyScriptEngineTimedInterruptTest.java | 12 ++---
 5 files changed, 96 insertions(+), 17 deletions(-)
----------------------------------------------------------------------