commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aherb...@apache.org
Subject [commons-numbers] 01/03: Remove odd/even edge cases.
Date Thu, 05 Dec 2019 02:31:53 GMT
This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-numbers.git

commit 8950a68339b4d96172a53a736ba422cff5a09e98
Author: Alex Herbert <aherbert@apache.org>
AuthorDate: Thu Dec 5 01:43:09 2019 +0000

    Remove odd/even edge cases.
    
    The C99 reference states that the sign of the parts is undefined for
    some edge cases. These should be tested separately.
    
    Fix testCosh for cis check using the even property of the function and
    the conjugate equality.
---
 .../commons/numbers/complex/CStandardTest.java      | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
b/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
index 4bbb80b..141448f 100644
--- a/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
+++ b/commons-numbers-complex/src/test/java/org/apache/commons/numbers/complex/CStandardTest.java
@@ -200,8 +200,9 @@ public class CStandardTest {
      */
     private static void assertOddOrEven(UnaryOperator<Complex> operation, boolean odd)
{
         // Edge cases
-        final double[] parts = {Double.NEGATIVE_INFINITY, -1, -0.0, 0.0, 1,
-                                Double.POSITIVE_INFINITY, Double.NaN};
+        //final double[] parts = {Double.NEGATIVE_INFINITY, -1, -0.0, 0.0, 1,
+        //                        Double.POSITIVE_INFINITY, Double.NaN};
+        final double[] parts = {-2, -1, -0.0, 0.0, 1, 2};
         for (final double x : parts) {
             for (final double y : parts) {
                 assertOddOrEven(x, y, operation, odd);
@@ -244,6 +245,10 @@ public class CStandardTest {
             c2 = c2.negate();
         }
 
+        // Note: It is not possible to satisfy the conjugate equality
+        // and be an even function with regard to zero.
+        
+        
         // Test for binary equality
         if (!equals(c1.getReal(), c2.getReal()) ||
             !equals(c1.getImaginary(), c2.getImaginary())) {
@@ -616,7 +621,7 @@ public class CStandardTest {
     @Test
     public void testAsinh() {
         assertConjugateEquality(Complex::asinh);
-        //assertOddOrEven(Complex::asinh, ODD);
+        assertOddOrEven(Complex::asinh, ODD);
         assertComplex(Complex.ZERO, Complex::asinh, Complex.ZERO);
         assertComplex(negZeroZero, Complex::asinh, negZeroZero);
         assertComplex(zeroNaN, Complex::asinh, NAN);
@@ -642,7 +647,7 @@ public class CStandardTest {
     @Test
     public void testAtanh() {
         assertConjugateEquality(Complex::atanh);
-        //assertOddOrEven(Complex::atanh, ODD);
+        assertOddOrEven(Complex::atanh, ODD);
         assertComplex(Complex.ZERO, Complex::atanh, Complex.ZERO);
         assertComplex(negZeroZero, Complex::atanh, negZeroZero);
         assertComplex(zeroNaN, Complex::atanh, zeroNaN);
@@ -669,7 +674,7 @@ public class CStandardTest {
     @Test
     public void testCosh() {
         assertConjugateEquality(Complex::cosh);
-        //assertOddOrEven(Complex::cosh, EVEN);
+        assertOddOrEven(Complex::cosh, EVEN);
         assertComplex(Complex.ZERO, Complex::cosh, Complex.ONE);
         assertComplex(negZeroZero, Complex::cosh, oneNegZero);
         assertComplex(zeroInf, Complex::cosh, nanZero);
@@ -688,9 +693,9 @@ public class CStandardTest {
         for (int i = 1; i < 10; i++) {
             final double y = i * 0.5;
             assertComplex(complex(inf, y), Complex::cosh, Complex.ofCis(y).multiply(inf));
+            assertComplex(complex(-inf, -y), Complex::cosh, Complex.ofCis(y).multiply(inf));
             assertComplex(complex(inf, -y), Complex::cosh, Complex.ofCis(-y).multiply(inf));
-            assertComplex(complex(-inf, y), Complex::cosh, Complex.ofCis(y).multiply(-inf));
-            assertComplex(complex(-inf, -y), Complex::cosh, Complex.ofCis(-y).multiply(-inf));
+            assertComplex(complex(-inf, y), Complex::cosh, Complex.ofCis(-y).multiply(inf));
         }
         assertComplex(negInfInf, Complex::cosh, infNaN);
         assertComplex(infInf, Complex::cosh, infNaN);
@@ -708,7 +713,7 @@ public class CStandardTest {
     @Test
     public void testSinh() {
         assertConjugateEquality(Complex::sinh);
-        //assertOddOrEven(Complex::sinh, ODD);
+        assertOddOrEven(Complex::sinh, ODD);
         assertComplex(Complex.ZERO, Complex::sinh, Complex.ZERO);
         assertComplex(negZeroZero, Complex::sinh, negZeroZero);
         assertComplex(zeroInf, Complex::sinh, zeroNaN);


Mime
View raw message