Author: sebb
Date: Thu Sep  8 15:59:11 2011
New Revision: 1166771

URL: http://svn.apache.org/viewvc?rev=1166771&view=rev
Log:
MATH-658 Dead code in FastMath.pow(double, double) and some improvement in test 
coverage

Modified:
    
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
    commons/proper/math/trunk/src/site/xdoc/changes.xml
    
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/FastMathTest.java

Modified: 
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java?rev=1166771&r1=1166770&r2=1166771&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
 (original)
+++ 
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
 Thu Sep  8 15:59:11 2011
@@ -7876,10 +7876,6 @@ public class FastMath {
                     return Double.NEGATIVE_INFINITY;
                 }
 
-                if (y < 0 && y == yi && (yi & 1) == 1) {
-                    return -0.0;
-                }
-
                 if (y > 0 && y == yi && (yi & 1) == 1) {
                     return -0.0;
                 }

Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=1166771&r1=1166770&r2=1166771&view=diff
==============================================================================
--- commons/proper/math/trunk/src/site/xdoc/changes.xml (original)
+++ commons/proper/math/trunk/src/site/xdoc/changes.xml Thu Sep  8 15:59:11 2011
@@ -52,6 +52,9 @@ The <action> type attribute can be add,u
     If the output is not quite correct, check for invisible trailing spaces!
      -->
     <release version="3.0" date="TBD" description="TBD">
+      <action dev="sebb" type="fix" issue="MATH-658" due-to="Yannick TANGUY">
+        Dead code in FastMath.pow(double, double) and some improvement in test 
coverage.
+      </action>
       <action dev="erans" type="fix" issue="MATH-663">
         Removed "getData()" method from "RealVector" as it was redundant with
         "toArray()".

Modified: 
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/FastMathTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/FastMathTest.java?rev=1166771&r1=1166770&r2=1166771&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/FastMathTest.java
 (original)
+++ 
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/FastMathTest.java
 Thu Sep  8 15:59:11 2011
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.math.util;
 
+import static org.junit.Assert.*;
+
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
@@ -252,6 +254,15 @@ public class FastMathTest {
     }
 
     @Test
+    public void testLog1pSpecialCases() {
+        double x;
+
+       x = FastMath.log1p(-1.0);
+        if (x != Double.NEGATIVE_INFINITY)
+            throw new RuntimeException("Log1p of -1 should be -infinity");
+    }
+
+    @Test
     public void testLogSpecialCases() {
         double x;
 
@@ -399,6 +410,45 @@ public class FastMathTest {
         x = FastMath.pow(-2.0, 3.5);
         if (x == x)
             throw new RuntimeException("pow(-2.0, 3.5) should be NaN");
+
+        // Added tests for a 100% coverage
+
+        x = FastMath.pow(Double.POSITIVE_INFINITY, Double.NaN);
+        if (x == x)
+            throw new RuntimeException("pow(+Inf, NaN) should be NaN");
+
+        x = FastMath.pow(Double.POSITIVE_INFINITY, Double.NaN);
+        if (x == x)
+            throw new RuntimeException("pow(+Inf, NaN) should be NaN");
+
+        x = FastMath.pow(1.0, Double.POSITIVE_INFINITY);
+        if (x == x)
+            throw new RuntimeException("pow(1.0, +Inf) should be NaN");
+
+        x = FastMath.pow(Double.NEGATIVE_INFINITY, Double.NaN);
+        if (x == x)
+            throw new RuntimeException("pow(-Inf, NaN) should be NaN");
+
+        x = FastMath.pow(Double.NEGATIVE_INFINITY, -1.0);
+        if (x != -0.0)
+            throw new RuntimeException("pow(-Inf, -1.0) should be 0.0");
+
+        x = FastMath.pow(Double.NEGATIVE_INFINITY, -2.0);
+        if (x != 0.0)
+            throw new RuntimeException("pow(-Inf, -2.0) should be 0.0");
+
+        x = FastMath.pow(Double.NEGATIVE_INFINITY, 1.0);
+        if (x != Double.NEGATIVE_INFINITY)
+            throw new RuntimeException("pow(-Inf, 1.0) should be -Inf");
+
+        x = FastMath.pow(Double.NEGATIVE_INFINITY, 2.0);
+        if (x != Double.POSITIVE_INFINITY)
+            throw new RuntimeException("pow(-Inf, 2.0) should be +Inf");
+
+        x = FastMath.pow(1.0, Double.NEGATIVE_INFINITY);
+        if (x == x)
+            throw new RuntimeException("pow(1.0, -Inf) should be NaN");
+
     }
 
     @Test
@@ -793,6 +843,58 @@ public class FastMathTest {
         Assert.assertTrue("acos() had errors in excess of " + MAX_ERROR_ULP + 
" ULP", maxerrulp < MAX_ERROR_ULP);
     }
 
+    /**
+     * Added tests for a 100% coverage of acos().
+     */
+    @Test
+    public void testAcosSpecialCases() {
+       double x;
+
+       x = FastMath.acos(Double.NaN);
+       if (x == x)
+               throw new RuntimeException("acos(NaN) should NaN");
+
+       x = FastMath.acos(-1.1);
+       if (x == x)
+               throw new RuntimeException("acos(-1.1) should NaN");
+       
+       x = FastMath.acos(1.1);
+       if (x == x)
+               throw new RuntimeException("acos(-1.1) should NaN");
+
+       assertEquals(FastMath.acos(-1.0), FastMath.PI, Double.MIN_VALUE);
+
+       assertEquals(FastMath.acos(1.0), 0.0, Double.MIN_VALUE);
+
+       assertEquals(FastMath.acos(0.0), FastMath.PI / 2.0, Double.MIN_VALUE);
+    }
+
+    /**
+     * Added tests for a 100% coverage of asin().
+     */
+    @Test
+    public void testAsinSpecialCases() {
+       double x;
+
+       x = FastMath.asin(Double.NaN);
+       if (x == x)
+               throw new RuntimeException("asin(NaN) should NaN");
+
+       x = FastMath.asin(-1.1);
+       if (x == x)
+               throw new RuntimeException("asin(-1.1) should NaN");
+       
+       x = FastMath.asin(1.1);
+       if (x == x)
+               throw new RuntimeException("asin(-1.1) should NaN");
+
+       assertEquals(FastMath.asin(1.0), FastMath.PI / 2.0, Double.MIN_VALUE);
+
+       assertEquals(FastMath.asin(-1.0), -FastMath.PI / 2.0, Double.MIN_VALUE);
+
+       assertEquals(FastMath.asin(0.0), 0.0, Double.MIN_VALUE);
+    }
+
     private Dfp cosh(Dfp x) {
       return DfpMath.exp(x).add(DfpMath.exp(x.negate())).divide(2);
     }


Reply via email to