You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by st...@apache.org on 2017/08/29 11:09:47 UTC

johnzon git commit: JOHNZON-123 align JsonNumber hash calculation with the spec

Repository: johnzon
Updated Branches:
  refs/heads/master c8b6c1fe0 -> 8c30a68fb


JOHNZON-123 align JsonNumber hash calculation with the spec

Txs to Svetlin Zarev for the report!


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/8c30a68f
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/8c30a68f
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/8c30a68f

Branch: refs/heads/master
Commit: 8c30a68fb646b3e0aff0804e405a2b19c1d20820
Parents: c8b6c1f
Author: Mark Struberg <st...@apache.org>
Authored: Tue Aug 29 13:08:39 2017 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Tue Aug 29 13:08:39 2017 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/johnzon/core/JsonDoubleImpl.java   | 8 +++++++-
 .../src/main/java/org/apache/johnzon/core/JsonLongImpl.java | 6 +++++-
 .../test/java/org/apache/johnzon/core/JsonNumberTest.java   | 9 +++++++++
 3 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/8c30a68f/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java
index daa7b57..3c467e4 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java
@@ -27,6 +27,8 @@ import java.util.Objects;
 final class JsonDoubleImpl implements JsonNumber, Serializable {
     private final double value;
 
+    private Integer hashCode = null;
+
     JsonDoubleImpl(final double value) {
         
         if(Double.isInfinite(value) || Double.isNaN(value)) {
@@ -100,7 +102,11 @@ final class JsonDoubleImpl implements JsonNumber, Serializable {
 
     @Override
     public int hashCode() {
-        return Double.valueOf(value).hashCode();
+        if (hashCode == null) {
+            hashCode = bigDecimalValue().hashCode();
+        }
+
+        return hashCode;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/johnzon/blob/8c30a68f/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java
index 0719a3f..5428a87 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java
@@ -25,6 +25,7 @@ import java.math.BigInteger;
 
 public final class JsonLongImpl implements JsonNumber, Serializable {
     private final long value;
+    private Integer hashCode = null;
 
     JsonLongImpl(final long value) {
         this.value = value;
@@ -92,7 +93,10 @@ public final class JsonLongImpl implements JsonNumber, Serializable {
 
     @Override
     public int hashCode() {
-        return (int) value;
+        if (hashCode == null) {
+            hashCode = bigDecimalValue().hashCode();
+        }
+        return hashCode;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/johnzon/blob/8c30a68f/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
index f994444..2a2a12d 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java
@@ -86,4 +86,13 @@ public class JsonNumberTest {
         final JsonNumber jsonNumber = Json.createReader(new StringReader(asJson)).readObject().getJsonNumber("value");
         Assert.assertEquals(new BigInteger("10002000000000000000"), jsonNumber.bigIntegerValue());
     }
+
+    @Test
+    public void testHashCode() {
+        JsonNumber a = Json.createObjectBuilder().add("a", 1).build().getJsonNumber("a");
+        JsonNumber b = Json.createObjectBuilder().add("b", 1.1).build().getJsonNumber("b");
+
+        Assert.assertEquals(a.hashCode(), a.bigDecimalValue().hashCode());
+        Assert.assertEquals(b.hashCode(), b.bigDecimalValue().hashCode());
+    }
 }