Fixed Fraction.compareTo

Since the sign can be in the numerator or denominator the signum must be
checked first before the magnitude can be tested.
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 0d145fb..d293252 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
@@ -992,10 +992,12 @@
         if (lhsSigNum != rhsSigNum) {
             return (lhsSigNum > rhsSigNum) ? 1 : -1;
         }
+        // Same sign.
+        // Avoid a multiply if both fractions are zero
         if (lhsSigNum == 0) {
             return 0;
         }
-
+        // Compare magnitude
         final BigInteger nOd = numerator.multiply(other.denominator);
         final BigInteger dOn = denominator.multiply(other.numerator);
         return nOd.compareTo(dOn);
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 c5a883d..99151f5 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
@@ -696,8 +696,16 @@
      */
     @Override
     public int compareTo(Fraction other) {
-        return Long.compare(((long) numerator) * other.denominator,
-                            ((long) denominator) * other.numerator);
+        final int lhsSigNum = signum();
+        final int rhsSigNum = other.signum();
+
+        if (lhsSigNum != rhsSigNum) {
+            return (lhsSigNum > rhsSigNum) ? 1 : -1;
+        }
+        // Same sign: compare magnitude
+        final long nOd = ((long) numerator) * other.denominator;
+        final long dOn = ((long) denominator) * other.numerator;
+        return Long.compare(nOd, dOn);
     }
 
     /**
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 d1916f6..584c28f 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
@@ -153,8 +153,8 @@
         Assertions.assertEquals(-1, b.compareTo(a));
         Assertions.assertEquals(-1, d.compareTo(a));
         Assertions.assertEquals(1, a.compareTo(d));
-//        Assertions.assertEquals(-1, e.compareTo(a));
-//        Assertions.assertEquals(1, a.compareTo(e));
+        Assertions.assertEquals(-1, e.compareTo(a));
+        Assertions.assertEquals(1, a.compareTo(e));
         Assertions.assertEquals(0, d.compareTo(e));
 
         Assertions.assertEquals(0, Fraction.of(0, 3).compareTo(Fraction.of(0, -2)));