XenoAmess commented on a change in pull request #82:
URL: https://github.com/apache/commons-numbers/pull/82#discussion_r476660387



##########
File path: 
commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/CommonsLangPortedFractionTest.java
##########
@@ -0,0 +1,1110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.numbers.fraction;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Test cases for the {@link Fraction} class
+ */
+public class CommonsLangPortedFractionTest {
+
+    private static final int SKIP = 500;  //53
+
+    
//--------------------------------------------------------------------------
+    @Test
+    public void testConstants() {
+        assertEquals(0, Fraction.ZERO.getNumerator());
+        assertEquals(1, Fraction.ZERO.getDenominator());
+
+        assertEquals(1, Fraction.ONE.getNumerator());
+        assertEquals(1, Fraction.ONE.getDenominator());
+
+//        assertEquals(1, Fraction.ONE_HALF.getNumerator());
+//        assertEquals(2, Fraction.ONE_HALF.getDenominator());
+//
+//        assertEquals(1, Fraction.ONE_THIRD.getNumerator());
+//        assertEquals(3, Fraction.ONE_THIRD.getDenominator());
+//
+//        assertEquals(2, Fraction.TWO_THIRDS.getNumerator());
+//        assertEquals(3, Fraction.TWO_THIRDS.getDenominator());
+//
+//        assertEquals(1, Fraction.ONE_QUARTER.getNumerator());
+//        assertEquals(4, Fraction.ONE_QUARTER.getDenominator());
+//
+//        assertEquals(1, Fraction.TWO_QUARTERS.getNumerator());
+//        assertEquals(2, Fraction.TWO_QUARTERS.getDenominator());
+//
+//        assertEquals(3, Fraction.THREE_QUARTERS.getNumerator());
+//        assertEquals(4, Fraction.THREE_QUARTERS.getDenominator());
+//
+//        assertEquals(1, Fraction.ONE_FIFTH.getNumerator());
+//        assertEquals(5, Fraction.ONE_FIFTH.getDenominator());
+//
+//        assertEquals(2, Fraction.TWO_FIFTHS.getNumerator());
+//        assertEquals(5, Fraction.TWO_FIFTHS.getDenominator());
+//
+//        assertEquals(3, Fraction.THREE_FIFTHS.getNumerator());
+//        assertEquals(5, Fraction.THREE_FIFTHS.getDenominator());
+//
+//        assertEquals(4, Fraction.FOUR_FIFTHS.getNumerator());
+//        assertEquals(5, Fraction.FOUR_FIFTHS.getDenominator());
+    }
+
+    @Test
+    public void testFactory_int_int() {
+        Fraction f = null;
+
+        // zero
+        f = Fraction.of(0, 1);
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(0, 2);
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        // normal
+        f = Fraction.of(1, 1);
+        assertEquals(1, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(2, 1);
+        assertEquals(2, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(23, 345);
+        assertEquals(1, f.getNumerator());
+        assertEquals(15, f.getDenominator());
+
+        // improper
+        f = Fraction.of(22, 7);
+        assertEquals(22, f.getNumerator());
+        assertEquals(7, f.getDenominator());
+
+        // negatives
+        f = Fraction.of(-6, 10);
+        assertEquals(-3, f.getNumerator());
+        assertEquals(5, f.getDenominator());
+
+        f = Fraction.of(6, -10);
+        assertEquals(3, f.getNumerator());
+        assertEquals(-5, f.getDenominator());
+
+        f = Fraction.of(-6, -10);
+        assertEquals(-3, f.getNumerator());
+        assertEquals(-5, f.getDenominator());
+
+        // zero denominator
+        assertThrows(ArithmeticException.class, () -> Fraction.of(1, 0));
+        assertThrows(ArithmeticException.class, () -> Fraction.of(2, 0));
+        assertThrows(ArithmeticException.class, () -> Fraction.of(-3, 0));
+
+        // very large: can't represent as unsimplified fraction, although
+        Fraction.of(4, Integer.MIN_VALUE);
+        Fraction.of(1, Integer.MIN_VALUE);
+    }
+
+//    @Test
+//    public void testFactory_int_int_int() {
+//        Fraction f = null;
+//
+//        // zero
+//        f = Fraction.of(0, 0, 2);
+//        assertEquals(0, f.getNumerator());
+//        assertEquals(1, f.getDenominator());
+//
+//        f = Fraction.of(2, 0, 2);
+//        assertEquals(2, f.getNumerator());
+//        assertEquals(1, f.getDenominator());
+//
+//        f = Fraction.of(0, 1, 2);
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        // normal
+//        f = Fraction.of(1, 1, 2);
+//        assertEquals(3, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        // negatives
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(1, -6, 
-10));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(1, -6, 
-10));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(1, -6, 
-10));
+//
+//        // negative whole
+//        f = Fraction.of(-1, 6, 10);
+//        assertEquals(-8, f.getNumerator());
+//        assertEquals(5, f.getDenominator());
+//
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(-1, -6, 
10));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(-1, 6, 
-10));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(-1, -6, 
-10));
+//
+//        // zero denominator
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(0, 1, 0));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(1, 2, 0));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(-1, -3, 
0));
+//        assertThrows(ArithmeticException.class, () -> 
Fraction.of(Integer.MAX_VALUE, 1, 2));
+//        assertThrows(ArithmeticException.class, () -> 
Fraction.of(-Integer.MAX_VALUE, 1, 2));
+//
+//        // very large
+//        f = Fraction.of(-1, 0, Integer.MAX_VALUE);
+//        assertEquals(-1, f.getNumerator());
+//        assertEquals(1, f.getDenominator());
+//
+//        // negative denominators not allowed in this constructor.
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(0, 4, 
Integer.MIN_VALUE));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(1, 1, 
Integer.MAX_VALUE));
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(-1, 2, 
Integer.MAX_VALUE));
+//    }
+
+    @Test
+    public void testReducedFactory_int_int() {
+        Fraction f = null;
+
+        // zero
+        f = Fraction.of(0, 1);
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        // normal
+        f = Fraction.of(1, 1);
+        assertEquals(1, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(2, 1);
+        assertEquals(2, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        // improper
+        f = Fraction.of(22, 7);
+        assertEquals(22, f.getNumerator());
+        assertEquals(7, f.getDenominator());
+
+        // negatives
+        f = Fraction.of(-6, 10);
+        assertEquals(-3, f.getNumerator());
+        assertEquals(5, f.getDenominator());
+
+        f = Fraction.of(6, -10);
+        assertEquals(3, f.getNumerator());
+        assertEquals(-5, f.getDenominator());
+
+        f = Fraction.of(-6, -10);
+        assertEquals(-3, f.getNumerator());
+        assertEquals(-5, f.getDenominator());
+
+        // zero denominator
+        assertThrows(ArithmeticException.class, () -> Fraction.of(1, 0));
+        assertThrows(ArithmeticException.class, () -> Fraction.of(2, 0));
+        assertThrows(ArithmeticException.class, () -> Fraction.of(-3, 0));
+
+        // reduced
+        f = Fraction.of(0, 2);
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(2, 2);
+        assertEquals(1, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(2, 4);
+        assertEquals(1, f.getNumerator());
+        assertEquals(2, f.getDenominator());
+
+        f = Fraction.of(15, 10);
+        assertEquals(3, f.getNumerator());
+        assertEquals(2, f.getDenominator());
+
+        f = Fraction.of(121, 22);
+        assertEquals(11, f.getNumerator());
+        assertEquals(2, f.getDenominator());
+
+        // Extreme values
+        // OK, can reduce before negating
+        f = Fraction.of(-2, Integer.MIN_VALUE);
+        assertEquals(-1, f.getNumerator());
+        assertEquals(Integer.MIN_VALUE / 2, f.getDenominator());
+
+        // Can't reduce, negation will throw
+        Fraction.of(-7, Integer.MIN_VALUE);
+
+        // LANG-662
+        f = Fraction.of(Integer.MIN_VALUE, 2);
+        assertEquals(Integer.MIN_VALUE / 2, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+    }
+
+    @Test
+    public void testFactory_double() {
+        assertThrows(IllegalArgumentException.class, () -> 
Fraction.from(Double.NaN));
+        assertThrows(IllegalArgumentException.class, () -> 
Fraction.from(Double.POSITIVE_INFINITY));
+        assertThrows(IllegalArgumentException.class, () -> 
Fraction.from(Double.NEGATIVE_INFINITY));
+        Fraction.from((double) Integer.MAX_VALUE + 1);
+
+        // zero
+        Fraction f = Fraction.from(0.0d);
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        // one
+        f = Fraction.from(1.0d);
+        assertEquals(1, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        // one half
+        f = Fraction.from(0.5d);
+        assertEquals(1, f.getNumerator());
+        assertEquals(2, f.getDenominator());
+
+        // negative
+        f = Fraction.from(-0.875d);
+        assertEquals(-7, f.getNumerator());
+        assertEquals(8, f.getDenominator());
+
+        // over 1
+        f = Fraction.from(1.25d);
+        assertEquals(5, f.getNumerator());
+        assertEquals(4, f.getDenominator());
+
+        // two thirds
+        f = Fraction.from(0.66666d);
+        assertEquals(2, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        // small
+        f = Fraction.from(1.0d / 10001d);
+        assertEquals(1, f.getNumerator());
+        assertEquals(10001, f.getDenominator());
+
+        // normal
+        Fraction f2 = null;
+        for (int i = 1; i <= 100; i++) {  // denominator
+            for (int j = 1; j <= i; j++) {  // numerator
+                f = Fraction.from((double) j / (double) i);
+
+                f2 = Fraction.of(j, i);
+                assertEquals(f2.getNumerator(), f.getNumerator());
+                assertEquals(f2.getDenominator(), f.getDenominator());
+            }
+        }
+        // save time by skipping some tests!  (
+        for (int i = 1001; i <= 10000; i += SKIP) {  // denominator
+            for (int j = 1; j <= i; j++) {  // numerator
+                f = Fraction.from((double) j / (double) i, 1e-8, 100);
+                f2 = Fraction.of(j, i);
+                assertEquals(f2.getNumerator(), f.getNumerator());
+                assertEquals(f2.getDenominator(), f.getDenominator());
+            }
+        }
+    }
+
+//    @Test
+//    public void testFactory_String() {
+//        assertThrows(NullPointerException.class, () -> Fraction.from(null));
+//    }
+
+
+//    @Test
+//    public void testFactory_String_double() {
+//        Fraction f = null;
+//
+//        f = Fraction.from("0.0");
+//        assertEquals(0, f.getNumerator());
+//        assertEquals(1, f.getDenominator());
+//
+//        f = Fraction.from("0.2");
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(5, f.getDenominator());
+//
+//        f = Fraction.from("0.5");
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        f = Fraction.from("0.66666");
+//        assertEquals(2, f.getNumerator());
+//        assertEquals(3, f.getDenominator());
+//
+//        assertThrows(NumberFormatException.class, () -> 
Fraction.from("2.3R"));
+//        assertThrows(NumberFormatException.class, () -> 
Fraction.from("2147483648")); // too big
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("."));
+//    }
+
+//    @Test
+//    public void testFactory_String_proper() {
+//        Fraction f = null;
+//
+//        f = Fraction.from("0 0/1");
+//        assertEquals(0, f.getNumerator());
+//        assertEquals(1, f.getDenominator());
+//
+//        f = Fraction.from("1 1/5");
+//        assertEquals(6, f.getNumerator());
+//        assertEquals(5, f.getDenominator());
+//
+//        f = Fraction.from("7 1/2");
+//        assertEquals(15, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        f = Fraction.from("1 2/4");
+//        assertEquals(3, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        f = Fraction.from("-7 1/2");
+//        assertEquals(-15, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        f = Fraction.from("-1 2/4");
+//        assertEquals(-3, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("2 
3"));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("a 
3"));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("2 
b/4"));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("2 "));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from(" 3"));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from(" "));
+//    }
+
+//    @Test
+//    public void testFactory_String_improper() {
+//        Fraction f = null;
+//
+//        f = Fraction.from("0/1");
+//        assertEquals(0, f.getNumerator());
+//        assertEquals(1, f.getDenominator());
+//
+//        f = Fraction.from("1/5");
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(5, f.getDenominator());
+//
+//        f = Fraction.from("1/2");
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        f = Fraction.from("2/3");
+//        assertEquals(2, f.getNumerator());
+//        assertEquals(3, f.getDenominator());
+//
+//        f = Fraction.from("7/3");
+//        assertEquals(7, f.getNumerator());
+//        assertEquals(3, f.getDenominator());
+//
+//        f = Fraction.from("2/4");
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        assertThrows(NumberFormatException.class, () -> 
Fraction.from("2/d"));
+//        assertThrows(NumberFormatException.class, () -> 
Fraction.from("2e/3"));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("2/"));
+//        assertThrows(NumberFormatException.class, () -> Fraction.from("/"));
+//    }
+
+//    @Test
+//    public void testGets() {
+//        Fraction f = null;
+//
+//        f = Fraction.of(3, 5, 6);
+//        assertEquals(23, f.getNumerator());
+//        assertEquals(3, f.getProperWhole());
+//        assertEquals(5, f.getProperNumerator());
+//        assertEquals(6, f.getDenominator());
+//
+//        f = Fraction.of(-3, 5, 6);
+//        assertEquals(-23, f.getNumerator());
+//        assertEquals(-3, f.getProperWhole());
+//        assertEquals(5, f.getProperNumerator());
+//        assertEquals(6, f.getDenominator());
+//
+//        f = Fraction.of(Integer.MIN_VALUE, 0, 1);
+//        assertEquals(Integer.MIN_VALUE, f.getNumerator());
+//        assertEquals(Integer.MIN_VALUE, f.getProperWhole());
+//        assertEquals(0, f.getProperNumerator());
+//        assertEquals(1, f.getDenominator());
+//    }
+
+//    @Test
+//    public void testConversions() {
+//        Fraction f = null;
+//
+//        f = Fraction.of(3, 7, 8);
+//        assertEquals(3, f.intValue());
+//        assertEquals(3L, f.longValue());
+//        assertEquals(3.875f, f.floatValue(), 0.00001f);
+//        assertEquals(3.875d, f.doubleValue(), 0.00001d);
+//    }
+
+//    @Test
+//    public void testReduce() {
+//        Fraction f = null;
+//
+//        f = Fraction.of(50, 75);
+//        Fraction result = f.reduce();
+//        assertEquals(2, result.getNumerator());
+//        assertEquals(3, result.getDenominator());
+//
+//        f = Fraction.of(-2, -3);
+//        result = f.reduce();
+//        assertEquals(2, result.getNumerator());
+//        assertEquals(3, result.getDenominator());
+//
+//        f = Fraction.of(2, -3);
+//        result = f.reduce();
+//        assertEquals(-2, result.getNumerator());
+//        assertEquals(3, result.getDenominator());
+//
+//        f = Fraction.of(-2, 3);
+//        result = f.reduce();
+//        assertEquals(-2, result.getNumerator());
+//        assertEquals(3, result.getDenominator());
+//        assertSame(f, result);
+//
+//        f = Fraction.of(2, 3);
+//        result = f.reduce();
+//        assertEquals(2, result.getNumerator());
+//        assertEquals(3, result.getDenominator());
+//        assertSame(f, result);
+//
+//        f = Fraction.of(0, 1);
+//        result = f.reduce();
+//        assertEquals(0, result.getNumerator());
+//        assertEquals(1, result.getDenominator());
+//        assertSame(f, result);
+//
+//        f = Fraction.of(0, 100);
+//        result = f.reduce();
+//        assertEquals(0, result.getNumerator());
+//        assertEquals(1, result.getDenominator());
+//        assertSame(result, Fraction.ZERO);
+//
+//        f = Fraction.of(Integer.MIN_VALUE, 2);
+//        result = f.reduce();
+//        assertEquals(Integer.MIN_VALUE / 2, result.getNumerator());
+//        assertEquals(1, result.getDenominator());
+//    }
+
+//    @Test
+//    public void testreciprocal() {
+//        Fraction f = null;
+//
+//        f = Fraction.of(50, 75);
+//        f = f.reciprocal();
+//        assertEquals(3, f.getNumerator());
+//        assertEquals(2, f.getDenominator());
+//
+//        f = Fraction.of(4, 3);
+//        f = f.reciprocal();
+//        assertEquals(3, f.getNumerator());
+//        assertEquals(4, f.getDenominator());
+//
+//        f = Fraction.of(-15, 47);
+//        f = f.reciprocal();
+//        assertEquals(47, f.getNumerator());
+//        assertEquals(-15, f.getDenominator());
+//
+//        assertThrows(ArithmeticException.class, () -> Fraction.of(0, 
3).reciprocal());
+//        Fraction.of(Integer.MIN_VALUE, 1).reciprocal();
+//
+//        f = Fraction.of(Integer.MAX_VALUE, 1);
+//        f = f.reciprocal();
+//        assertEquals(1, f.getNumerator());
+//        assertEquals(Integer.MAX_VALUE, f.getDenominator());
+//    }
+
+    @Test
+    public void testNegate() {
+        Fraction f = null;
+
+        f = Fraction.of(50, 75);
+        f = f.negate();
+        assertEquals(-2, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        f = Fraction.of(-50, 75);
+        f = f.negate();
+        assertEquals(2, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        // large values
+        f = Fraction.of(Integer.MAX_VALUE - 1, Integer.MAX_VALUE);
+        f = f.negate();
+        assertEquals(Integer.MIN_VALUE + 2, f.getNumerator());
+        assertEquals(Integer.MAX_VALUE, f.getDenominator());
+
+        Fraction.of(Integer.MIN_VALUE, 1).negate();
+    }
+
+    @Test
+    public void testAbs() {
+        Fraction f = null;
+
+        f = Fraction.of(50, 75);
+        f = f.abs();
+        assertEquals(2, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        f = Fraction.of(-50, 75);
+        f = f.abs();
+        assertEquals(2, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        f = Fraction.of(Integer.MAX_VALUE, 1);
+        f = f.abs();
+        assertEquals(Integer.MAX_VALUE, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        f = Fraction.of(Integer.MAX_VALUE, -1);
+        f = f.abs();
+        assertEquals(-Integer.MAX_VALUE, f.getNumerator());
+        assertEquals(-1, f.getDenominator());
+
+        Fraction.of(Integer.MIN_VALUE, 1).abs();
+    }
+
+    @Test
+    public void testPow() {
+        Fraction f = null;
+
+        f = Fraction.of(3, 5);
+        assertEquals(Fraction.ONE, f.pow(0));
+
+        f = Fraction.of(3, 5);
+        assertEquals(f, f.pow(1));
+        assertEquals(f, f.pow(1));
+
+        f = Fraction.of(3, 5);
+        f = f.pow(2);
+        assertEquals(9, f.getNumerator());
+        assertEquals(25, f.getDenominator());
+
+        f = Fraction.of(3, 5);
+        f = f.pow(3);
+        assertEquals(27, f.getNumerator());
+        assertEquals(125, f.getDenominator());
+
+        f = Fraction.of(3, 5);
+        f = f.pow(-1);
+        assertEquals(5, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        f = Fraction.of(3, 5);
+        f = f.pow(-2);
+        assertEquals(25, f.getNumerator());
+        assertEquals(9, f.getDenominator());
+
+        // check unreduced fractions stay that way.
+        f = Fraction.of(6, 10);
+        assertEquals(Fraction.ONE, f.pow(0));
+
+        f = Fraction.of(6, 10);
+        assertEquals(f, f.pow(1));
+        assertEquals(f.pow(1), Fraction.of(3, 5));
+
+        f = Fraction.of(6, 10);
+        f = f.pow(2);
+        assertEquals(9, f.getNumerator());
+        assertEquals(25, f.getDenominator());
+
+        f = Fraction.of(6, 10);
+        f = f.pow(3);
+        assertEquals(27, f.getNumerator());
+        assertEquals(125, f.getDenominator());
+
+        f = Fraction.of(6, 10);
+        f = f.pow(-1);
+        assertEquals(5, f.getNumerator());
+        assertEquals(3, f.getDenominator());
+
+        f = Fraction.of(6, 10);
+        f = f.pow(-2);
+        assertEquals(25, f.getNumerator());
+        assertEquals(9, f.getDenominator());
+
+        // zero to any positive power is still zero.
+        f = Fraction.of(0, 1231);
+        f = f.pow(1);
+        assertEquals(0, f.compareTo(Fraction.ZERO));
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+        f = f.pow(2);
+        assertEquals(0, f.compareTo(Fraction.ZERO));
+        assertEquals(0, f.getNumerator());
+        assertEquals(1, f.getDenominator());
+
+        // zero to negative powers should throw an exception
+        final Fraction fr = f;
+        assertThrows(ArithmeticException.class, () -> fr.pow(-1));

Review comment:
       @aherbert So, we should change this test to non-throw, and do not throw 
in this situation in Fractions and BigFractions, and add some comments for this 
"feature". If I understand correctly?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to