You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2020/04/16 12:18:32 UTC

[commons-numbers] 17/26: Fraction: use factory constructor in add/subtract

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 5192e10a101ebf7d91706b7ce1b5d4321d664a18
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Tue Apr 14 22:26:10 2020 +0100

    Fraction: use factory constructor in add/subtract
    
    These can create zero if the denominator is 1.
    
    Added a case to the common test cases to check the canonical zero (0 /
    1) is returned.
---
 .../main/java/org/apache/commons/numbers/fraction/BigFraction.java  | 6 ++----
 .../src/main/java/org/apache/commons/numbers/fraction/Fraction.java | 6 ++----
 .../java/org/apache/commons/numbers/fraction/CommonTestCases.java   | 2 ++
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
index 6e1ea48..8e0a8cb 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
@@ -682,8 +682,7 @@ public final class BigFraction
             return of(value);
         }
 
-        // Direct constructor: cannot add an integer to a fraction to produce zero
-        return new BigFraction(numerator.add(denominator.multiply(value)), denominator);
+        return of(numerator.add(denominator.multiply(value)), denominator);
     }
 
     /**
@@ -757,8 +756,7 @@ public final class BigFraction
             return of(value.negate());
         }
 
-        // Direct constructor: cannot subtract an integer from a fraction to produce zero
-        return new BigFraction(numerator.subtract(denominator.multiply(value)), denominator);
+        return of(numerator.subtract(denominator.multiply(value)), denominator);
     }
 
     /**
diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
index 6702950..ce6954b 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
@@ -481,8 +481,7 @@ public final class Fraction
      * cannot be represented in an {@code int}.
      */
     public Fraction add(final int value) {
-        // Direct constructor: cannot add an integer to a fraction to produce zero
-        return new Fraction(numerator + value * denominator, denominator);
+        return of(numerator + value * denominator, denominator);
     }
 
     /**
@@ -509,8 +508,7 @@ public final class Fraction
      * cannot be represented in an {@code int}.
      */
     public Fraction subtract(final int value) {
-        // Direct constructor: cannot subtract an integer from a fraction to produce zero
-        return new Fraction(numerator - value * denominator, denominator);
+        return of(numerator - value * denominator, denominator);
     }
 
     /**
diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/CommonTestCases.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/CommonTestCases.java
index 5f7c9e7..c582de5 100644
--- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/CommonTestCases.java
+++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/CommonTestCases.java
@@ -322,6 +322,7 @@ final class CommonTestCases {
         testCases.add(new BinaryIntOperatorTestCase(-1, 3, 0, -1, 3));
         testCases.add(new BinaryIntOperatorTestCase(1, 3, 1, 4, 3));
         testCases.add(new BinaryIntOperatorTestCase(1, 3, -1, -2, 3));
+        testCases.add(new BinaryIntOperatorTestCase(2, -1, 2, 0, 1));
         testCases.add(new BinaryIntOperatorTestCase(Integer.MAX_VALUE - 1, 1, 1, Integer.MAX_VALUE, 1));
 
         return testCases;
@@ -474,6 +475,7 @@ final class CommonTestCases {
         testCases.add(new BinaryIntOperatorTestCase(0, 1, 3, -3, 1));
         testCases.add(new BinaryIntOperatorTestCase(2, 3, 3, -7, 3));
         testCases.add(new BinaryIntOperatorTestCase(2, 3, 0, 2, 3));
+        testCases.add(new BinaryIntOperatorTestCase(2, -1, -2, 0, 1));
 
         return testCases;
     }