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/09/03 19:51:56 UTC

[29/50] [abbrv] incubator-tinkerpop git commit: TINKERPOP3-750: Test large number comparison

TINKERPOP3-750: Test large number comparison

Repro for comparisons that are sensitive to loss of precision when converting Number to double.


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

Branch: refs/heads/blvp
Commit: e1917173d8a44b97799ecffb405948e0549af6d6
Parents: a20d060
Author: mhfrantz <mf...@redsealnetworks.com>
Authored: Mon Aug 31 11:42:35 2015 -0700
Committer: mhfrantz <mf...@redsealnetworks.com>
Committed: Mon Aug 31 13:26:05 2015 -0700

----------------------------------------------------------------------
 .../gremlin/process/traversal/CompareTest.java  | 49 ++++++++++++++++----
 1 file changed, 40 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e1917173/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
index 6184c94..a7d8e1b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/CompareTest.java
@@ -32,13 +32,13 @@ import static org.junit.Assert.assertEquals;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @author Matt Frantz (http://github.com/mhfrantz)
  */
 @RunWith(Parameterized.class)
 public class CompareTest {
 
     @Parameterized.Parameters(name = "{0}.test({1},{2}) = {3}")
     public static Iterable<Object[]> data() {
-        final List<Object> one = Arrays.asList(1, 1l, 1d, 1f, BigDecimal.ONE, BigInteger.ONE);
         final List<Object[]> testCases = new ArrayList<>(Arrays.asList(new Object[][]{
                 {Compare.eq, null, null, true},
                 {Compare.eq, null, 1, false},
@@ -89,16 +89,47 @@ public class CompareTest {
                 {Compare.lte, "z", "a", false},
                 {Compare.lte, "a", "z", true}
         }));
-        for (int i = 0; i < one.size(); i++) {
-            for (int j = 0; j < one.size(); j++) {
-                testCases.add(new Object[]{Compare.eq, one.get(i), one.get(j), true});
-                testCases.add(new Object[]{Compare.neq, one.get(i), one.get(j), false});
-                testCases.add(new Object[]{Compare.gt, one.get(i), one.get(j), false});
-                testCases.add(new Object[]{Compare.lt, one.get(i), one.get(j), false});
-                testCases.add(new Object[]{Compare.gte, one.get(i), one.get(j), true});
-                testCases.add(new Object[]{Compare.lte, one.get(i), one.get(j), true});
+        // Compare Numbers of mixed types.
+        final List<Object> one = Arrays.asList(1, 1l, 1d, 1f, BigDecimal.ONE, BigInteger.ONE);
+        for (Object i : one) {
+            for (Object j : one) {
+                testCases.addAll(Arrays.asList(new Object[][]{
+                            {Compare.eq, i, j, true},
+                            {Compare.neq, i, j, false},
+                            {Compare.gt, i, j, false},
+                            {Compare.lt, i, j, false},
+                            {Compare.gte, i, j, true},
+                            {Compare.lte, i, j, true},
+                        }));
             }
         }
+        // Compare large numbers of different types that cannot convert to doubles losslessly.
+        final BigInteger big1 = new BigInteger("123456789012345678901234567890");
+        final BigDecimal big1d = new BigDecimal("123456789012345678901234567890");
+        final BigDecimal big2 = new BigDecimal(big1.add(BigInteger.ONE));
+        testCases.addAll(Arrays.asList(new Object[][]{
+                    // big1 == big1d
+                    {Compare.eq, big1, big1d, true},
+                    {Compare.neq, big1, big1d, false},
+                    {Compare.gt, big1, big1d, false},
+                    {Compare.lt, big1, big1d, false},
+                    {Compare.gte, big1, big1d, true},
+                    {Compare.lte, big1, big1d, true},
+                    // big1 < big2
+                    {Compare.eq, big1, big2, false},
+                    {Compare.neq, big1, big2, true},
+                    {Compare.gt, big1, big2, false},
+                    {Compare.lt, big1, big2, true},
+                    {Compare.gte, big1, big2, false},
+                    {Compare.lte, big1, big2, true},
+                    // Reverse the operands for symmetric test coverage (big2 > big1)
+                    {Compare.eq, big2, big1, false},
+                    {Compare.neq, big2, big1, true},
+                    {Compare.gt, big2, big1, true},
+                    {Compare.lt, big2, big1, false},
+                    {Compare.gte, big2, big1, true},
+                    {Compare.lte, big2, big1, false},
+                }));
         return testCases;
     }