This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/fraction-dev by this push:
     new fb71f89  NUMBERS-75: Fraction passes all FractionTests after updating
fb71f89 is described below

commit fb71f89470600abab9bb427783d67353f076e7e1
Author: Eric Barnhill <[email protected]>
AuthorDate: Thu Dec 27 11:59:28 2018 -0800

    NUMBERS-75: Fraction passes all FractionTests after updating
    
    FractionTest methods to factory methods.
---
 .../apache/commons/numbers/fraction/Fraction.java  | 17 ++++++++------
 .../commons/numbers/fraction/FractionTest.java     | 26 +++++++++++-----------
 2 files changed, 23 insertions(+), 20 deletions(-)

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 baf15b7..012e950 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
@@ -478,13 +478,16 @@ public class Fraction
             return this;
         }
         // t = u(v'/gcd) +/- v(u'/gcd)
-        int gcd = ArithmeticUtils.gcd(denominator, fraction.denominator);
-        int uvp = ArithmeticUtils.mulAndCheck(numerator, fraction.denominator 
/ gcd);
-        int upv = ArithmeticUtils.mulAndCheck(fraction.numerator, denominator 
/ gcd);
-        return new Fraction
-            (isAdd ? ArithmeticUtils.addAndCheck(uvp, upv) :
-             ArithmeticUtils.subAndCheck(uvp, upv),
-             ArithmeticUtils.mulAndCheck(denominator, fraction.denominator));
+        int d1 = ArithmeticUtils.gcd(denominator, fraction.denominator);
+        int uvp = ArithmeticUtils.mulAndCheck(numerator, fraction.denominator 
/ d1);
+        int upv = ArithmeticUtils.mulAndCheck(fraction.numerator, denominator 
/ d1);
+        int t = isAdd ? ArithmeticUtils.addAndCheck(uvp, upv) : 
ArithmeticUtils.subAndCheck(uvp, upv);
+        int tmodd1 = t % d1;
+        int d2 = (tmodd1==0)?d1:ArithmeticUtils.gcd(tmodd1, d1);
+        // result is (t/d2) / (u'/d1)(v'/d2)
+        int w = t / d2;
+        return new Fraction (w, ArithmeticUtils.mulAndCheck(denominator/d1,
+                        fraction.denominator/d2));
     }
 
     /**
diff --git 
a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
 
b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
index d689de0..e0cb2f2 100644
--- 
a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
+++ 
b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
@@ -162,9 +162,9 @@ public class FractionTest {
 
     @Test
     public void testCompareTo() {
-        Fraction first = Fraction.ofDouble(1, 2);
-        Fraction second = Fraction.ofDouble(1, 3);
-        Fraction third = Fraction.ofDouble(1, 2);
+        Fraction first = Fraction.ofInt(1, 2);
+        Fraction second = Fraction.ofInt(1, 3);
+        Fraction third = Fraction.ofInt(1, 2);
 
         Assert.assertEquals(0, first.compareTo(first));
         Assert.assertEquals(0, first.compareTo(third));
@@ -174,8 +174,8 @@ public class FractionTest {
         // these two values are different approximations of PI
         // the first  one is approximately PI - 3.07e-18
         // the second one is approximately PI + 1.936e-17
-        Fraction pi1 = Fraction.ofDouble(1068966896, 340262731);
-        Fraction pi2 = Fraction.ofDouble( 411557987, 131002976);
+        Fraction pi1 = Fraction.ofInt(1068966896, 340262731);
+        Fraction pi2 = Fraction.ofInt( 411557987, 131002976);
         Assert.assertEquals(-1, pi1.compareTo(pi2));
         Assert.assertEquals( 1, pi2.compareTo(pi1));
         Assert.assertEquals(0.0, pi1.doubleValue() - pi2.doubleValue(), 
1.0e-20);
@@ -183,8 +183,8 @@ public class FractionTest {
 
     @Test
     public void testDoubleValue() {
-        Fraction first = Fraction.ofDouble(1, 2);
-        Fraction second = Fraction.ofDouble(1, 3);
+        Fraction first = Fraction.ofInt(1, 2);
+        Fraction second = Fraction.ofInt(1, 3);
 
         Assert.assertEquals(0.5, first.doubleValue(), 0.0);
         Assert.assertEquals(1.0 / 3.0, second.doubleValue(), 0.0);
@@ -192,8 +192,8 @@ public class FractionTest {
 
     @Test
     public void testFloatValue() {
-        Fraction first = Fraction.ofDouble(1, 2);
-        Fraction second = Fraction.ofDouble(1, 3);
+        Fraction first = Fraction.ofInt(1, 2);
+        Fraction second = Fraction.ofInt(1, 3);
 
         Assert.assertEquals(0.5f, first.floatValue(), 0.0f);
         Assert.assertEquals((float)(1.0 / 3.0), second.floatValue(), 0.0f);
@@ -201,8 +201,8 @@ public class FractionTest {
 
     @Test
     public void testIntValue() {
-        Fraction first = Fraction.ofDouble(1, 2);
-        Fraction second = Fraction.ofDouble(3, 2);
+        Fraction first = Fraction.ofInt(1, 2);
+        Fraction second = Fraction.ofInt(3, 2);
 
         Assert.assertEquals(0, first.intValue());
         Assert.assertEquals(1, second.intValue());
@@ -210,8 +210,8 @@ public class FractionTest {
 
     @Test
     public void testLongValue() {
-        Fraction first = Fraction.ofDouble(1, 2);
-        Fraction second = Fraction.ofDouble(3, 2);
+        Fraction first = Fraction.ofInt(1, 2);
+        Fraction second = Fraction.ofInt(3, 2);
 
         Assert.assertEquals(0L, first.longValue());
         Assert.assertEquals(1L, second.longValue());

Reply via email to