Repository: commons-math
Updated Branches:
  refs/heads/MATH_3_X 9e1b0acab -> cf462bc5d


Fixed equals/hashcode contract failure for Dfp.

JIRA: MATH-1118

Thanks to Cyrille Artho.

Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/12a69814
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/12a69814
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/12a69814

Branch: refs/heads/MATH_3_X
Commit: 12a69814b0195caa90628a8ffa70cb887fbcc00d
Parents: 9e1b0ac
Author: Luc Maisonobe <l...@apache.org>
Authored: Thu May 7 16:33:19 2015 +0200
Committer: Luc Maisonobe <l...@apache.org>
Committed: Thu May 7 16:33:19 2015 +0200

----------------------------------------------------------------------
 src/changes/changes.xml                                 |  3 +++
 src/main/java/org/apache/commons/math3/dfp/Dfp.java     |  2 +-
 src/test/java/org/apache/commons/math3/dfp/DfpTest.java | 10 ++++++++++
 3 files changed, 14 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-math/blob/12a69814/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4501eee..f8749e8 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -51,6 +51,9 @@ If the output is not quite correct, check for invisible 
trailing spaces!
   </properties>
   <body>
     <release version="3.6" date="XXXX-XX-XX" description="">
+      <action dev="luc" type="fix" issue="MATH-1218" >
+        Fixed equals/hashcode contract failure for Dfp.
+      </action>
       <action dev="luc" type="fix" issue="MATH-1223" >
        Fixed wrong splitting of huge number in extended accuracy algorithms.
       </action>

http://git-wip-us.apache.org/repos/asf/commons-math/blob/12a69814/src/main/java/org/apache/commons/math3/dfp/Dfp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math3/dfp/Dfp.java 
b/src/main/java/org/apache/commons/math3/dfp/Dfp.java
index 19d79a8..bc1545b 100644
--- a/src/main/java/org/apache/commons/math3/dfp/Dfp.java
+++ b/src/main/java/org/apache/commons/math3/dfp/Dfp.java
@@ -922,7 +922,7 @@ public class Dfp implements RealFieldElement<Dfp> {
      */
     @Override
     public int hashCode() {
-        return 17 + (sign << 8) + (nans << 16) + exp + Arrays.hashCode(mant);
+        return 17 + (isZero() ? 0 : (sign << 8)) + (nans << 16) + exp + 
Arrays.hashCode(mant);
     }
 
     /** Check if instance is not equal to x.

http://git-wip-us.apache.org/repos/asf/commons-math/blob/12a69814/src/test/java/org/apache/commons/math3/dfp/DfpTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math3/dfp/DfpTest.java 
b/src/test/java/org/apache/commons/math3/dfp/DfpTest.java
index 236dd79..49bee1a 100644
--- a/src/test/java/org/apache/commons/math3/dfp/DfpTest.java
+++ b/src/test/java/org/apache/commons/math3/dfp/DfpTest.java
@@ -1650,4 +1650,14 @@ public class DfpTest extends 
ExtendedFieldElementAbstractTest<Dfp> {
         Assert.assertTrue(field.newDfp("NaN").isNaN());
     }
 
+    @Test
+    public void testEqualsHashcodeContract() {
+        DfpField var1 = new DfpField(1);
+        Dfp var6 = var1.newDfp(-0.0d);
+        Dfp var5 = var1.newDfp(0L);
+
+        // Checks the contract:  equals-hashcode on var5 and var6
+        Assert.assertTrue(var5.equals(var6) ? var5.hashCode() == 
var6.hashCode() : true);
+    }
+
 }

Reply via email to