This is an automated email from the ASF dual-hosted git repository. erans pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-numbers.git
commit c45802dc9c202c50e014e64522e98e5dbba08e23 Author: Schamschi <heinrich.bo...@gmx.at> AuthorDate: Fri Jun 21 13:28:49 2019 +0200 NUMBERS-118: Extract common subtract-fraction test cases --- .../commons/numbers/fraction/BigFractionTest.java | 33 ++--------- .../commons/numbers/fraction/CommonTestCases.java | 67 +++++++++++++++++++++- .../commons/numbers/fraction/FractionTest.java | 39 ++----------- 3 files changed, 76 insertions(+), 63 deletions(-) diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java index 26fc8a1..0990357 100644 --- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java +++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java @@ -421,13 +421,11 @@ public class BigFractionTest { @Test public void testSubtract() { - BigFraction a = BigFraction.of(1, 2); - BigFraction b = BigFraction.of(2, 3); - - assertFraction(0, 1, a.subtract(a)); - assertFraction(-1, 6, a.subtract(b)); - assertFraction(1, 6, b.subtract(a)); - assertFraction(0, 1, b.subtract(b)); + for (CommonTestCases.BinaryOperatorTestCase testCase : CommonTestCases.subtractFractionTestCases()) { + BigFraction f1 = BigFraction.of(testCase.firstOperandNumerator, testCase.firstOperandDenominator); + BigFraction f2 = BigFraction.of(testCase.secondOperandNumerator, testCase.secondOperandDenominator); + assertFraction(testCase.expectedNumerator, testCase.expectedDenominator, f1.subtract(f2)); + } BigFraction f = BigFraction.of(1, 1); try { @@ -435,27 +433,6 @@ public class BigFractionTest { Assertions.fail("expecting NullPointerException"); } catch (NullPointerException ex) { } - - // if this fraction is subtracted naively, it will overflow. - // check that it doesn't. - BigFraction f1 = BigFraction.of(1, 32768 * 3); - BigFraction f2 = BigFraction.of(1, 59049); - f = f1.subtract(f2); - Assertions.assertEquals(-13085, f.getNumeratorAsInt()); - Assertions.assertEquals(1934917632, f.getDenominatorAsInt()); - - f1 = BigFraction.of(Integer.MIN_VALUE, 3); - f2 = BigFraction.of(1, 3).negate(); - f = f1.subtract(f2); - Assertions.assertEquals(Integer.MIN_VALUE + 1, f.getNumeratorAsInt()); - Assertions.assertEquals(3, f.getDenominatorAsInt()); - - f1 = BigFraction.of(Integer.MAX_VALUE, 1); - f2 = BigFraction.ONE; - f = f1.subtract(f2); - Assertions.assertEquals(Integer.MAX_VALUE - 1, f.getNumeratorAsInt()); - Assertions.assertEquals(1, f.getDenominatorAsInt()); - } @Test 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 be19fdb..c35b018 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 @@ -51,6 +51,11 @@ class CommonTestCases { */ private static final List<BinaryOperatorTestCase> multiplyByFractionTestCasesList; + /** + * See {@link #subtractFractionTestCases()} + */ + private static final List<BinaryOperatorTestCase> subtractFractionTestCasesList; + static { numDenConstructorTestCasesList = collectNumDenConstructorTestCases(); doubleConstructorTestCasesList = collectDoubleConstructorTestCases(); @@ -60,6 +65,7 @@ class CommonTestCases { addFractionTestCasesList = collectAddFractionTestCases(); divideByFractionTestCasesList = collectDivideByFractionTestCases(); multiplyByFractionTestCasesList = collectMultiplyByFractionTestCases(); + subtractFractionTestCasesList = collectSubtractFractionTestCases(); } /** @@ -253,6 +259,11 @@ class CommonTestCases { return testCases; } + /** + * Defines test cases as described in {@link #multiplyByFractionTestCases()} and collects + * them into a {@code List}. + * @return a list of test cases as described above + */ private static List<BinaryOperatorTestCase> collectMultiplyByFractionTestCases() { List<BinaryOperatorTestCase> testCases = new ArrayList<>(); @@ -270,6 +281,41 @@ class CommonTestCases { } /** + * Defines test cases as described in {@link #subtractFractionTestCases()} and collects + * them into a {@code List}. + * @return a list of test cases as described above + */ + private static List<BinaryOperatorTestCase> collectSubtractFractionTestCases() { + List<BinaryOperatorTestCase> testCases = new ArrayList<>(); + + testCases.add(new BinaryOperatorTestCase(1, 2, 1, 2, 0, 1)); + testCases.add(new BinaryOperatorTestCase(1, 2, 2, 3, -1, 6)); + testCases.add(new BinaryOperatorTestCase(2, 3, 1, 2, 1, 6)); + testCases.add(new BinaryOperatorTestCase(2, 3, 2, 3, 0, 1)); + + // if this fraction is subtracted naively, it will overflow. + // check that it doesn't. + testCases.add(new BinaryOperatorTestCase( + 1, 32768 * 3, + 1, 59049, + -13085, 1934917632)); + + testCases.add(new BinaryOperatorTestCase( + Integer.MIN_VALUE, 3, + -1, 3, + Integer.MIN_VALUE + 1, 3 + )); + + testCases.add(new BinaryOperatorTestCase( + Integer.MAX_VALUE, 1, + 1, 1, + Integer.MAX_VALUE-1, 1 + )); + + return testCases; + } + + /** * Provides a list of test cases where a fraction should be created from a specified * numerator and denominator, both in the {@code int} range, and the expected * numerator and denominator of the created fraction are also in the {@code int} range. @@ -333,10 +379,13 @@ class CommonTestCases { } /** - * Provides a list of test cases where a fraction, created from a specified numerator and denominator + * <p>Provides a list of test cases where a fraction, created from a specified numerator and denominator * in the {@code int} range, should be divided by another fraction, also created from a specified numerator and denominator * in the {@code int} range, and the expected numerator and denominator of the resulting fraction - * are in the {@code int} range as well. + * are in the {@code int} range as well.</p> + * + * <p>The first operand in each test case is the dividend and the second operand is the divisor.</p> + * * @return a list of test cases as described above */ static List<BinaryOperatorTestCase> divideByFractionTestCases() { @@ -355,6 +404,20 @@ class CommonTestCases { } /** + * <p>Provides a list of test cases where a fraction, created from a specified numerator and denominator + * in the {@code int} range, should be subtracted from another fraction, also created from a specified numerator and denominator + * in the {@code int} range, and the expected numerator and denominator of the resulting fraction + * are in the {@code int} range as well.</p> + * + * <p>The first operand in each test case is the minuend and the second operand is the subtrahend.</p> + * + * @return a list of test cases as described above + */ + static List<BinaryOperatorTestCase> subtractFractionTestCases() { + return Collections.unmodifiableList(subtractFractionTestCasesList); + } + + /** * Represents a test case where a unary operation should be performed on a specified combination * of numerator and denominator, both in the {@code int} range, and the numerator and * denominator of the expected result are also in the {@code int} range. 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 977e702..42c1b35 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 @@ -401,14 +401,10 @@ public class FractionTest { @Test public void testSubtract() { - { - Fraction a = Fraction.of(1, 2); - Fraction b = Fraction.of(2, 3); - - assertFraction(0, 1, a.subtract(a)); - assertFraction(-1, 6, a.subtract(b)); - assertFraction(1, 6, b.subtract(a)); - assertFraction(0, 1, b.subtract(b)); + for (CommonTestCases.BinaryOperatorTestCase testCase : CommonTestCases.subtractFractionTestCases()) { + Fraction f1 = Fraction.of(testCase.firstOperandNumerator, testCase.firstOperandDenominator); + Fraction f2 = Fraction.of(testCase.secondOperandNumerator, testCase.secondOperandDenominator); + assertFraction(testCase.expectedNumerator, testCase.expectedDenominator, f1.subtract(f2)); } { @@ -419,32 +415,9 @@ public class FractionTest { } { - // if this fraction is subtracted naively, it will overflow. - // check that it doesn't. - Fraction f1 = Fraction.of(1, 32768 * 3); - Fraction f2 = Fraction.of(1, 59049); - Fraction f = f1.subtract(f2); - assertFraction(-13085, 1934917632, f); - } - - { - Fraction f1 = Fraction.of(Integer.MIN_VALUE, 3); - Fraction f2 = Fraction.of(1, 3).negate(); - Fraction f = f1.subtract(f2); - assertFraction(Integer.MIN_VALUE + 1, 3, f); - } - - { Fraction f1 = Fraction.of(Integer.MAX_VALUE, 1); - { - Fraction f2 = Fraction.ONE; - Fraction f = f1.subtract(f2); - assertFraction(Integer.MAX_VALUE-1, 1, f); - } - { - Fraction f = f1.subtract(1); - assertFraction(Integer.MAX_VALUE-1, 1, f); - } + Fraction f = f1.subtract(1); + assertFraction(Integer.MAX_VALUE-1, 1, f); } {