package Rational; public class RationalTest { public static void main(String[] args) { System.out.println("=== Testing Rational Operations ===\n"); // Create some rational numbers Rational r1 = new Rational(1, 2); // 1/2 Rational r2 = new Rational(1, 3); // 1/3 Rational r3 = new Rational(3, 4); // 3/4 Rational r4 = new Rational(2, 5); // 2/5 Rational r5 = new Rational(5, 1); // 5 (integer) System.out.println("Created rational numbers:"); System.out.println("r1 = " + r1); System.out.println("r2 = " + r2); System.out.println("r3 = " + r3); System.out.println("r4 = " + r4); System.out.println("r5 = " + r5); System.out.println(); // Test ADDITION System.out.println("=== ADDITION ==="); System.out.println("Instance method - r1 + r2 = " + r1.add(r2)); System.out.println("Static method - Rational.add(r1, r2) = " + Rational.add(r1, r2)); System.out.println("Expected: 1/2 + 1/3 = 5/6"); System.out.println("Decimal: " + r1.add(r2).toDouble()); System.out.println(); // Test SUBTRACTION System.out.println("=== SUBTRACTION ==="); System.out.println("Instance method - r1 - r2 = " + r1.subtract(r2)); System.out.println("Static method - Rational.subtract(r1, r2) = " + Rational.subtract(r1, r2)); System.out.println("Expected: 1/2 - 1/3 = 1/6"); System.out.println("Decimal: " + r1.subtract(r2).toDouble()); System.out.println(); // Test MULTIPLICATION System.out.println("=== MULTIPLICATION ==="); System.out.println("Instance method - r1 * r3 = " + r1.multiply(r3)); System.out.println("Static method - Rational.multiply(r1, r3) = " + Rational.multiply(r1, r3)); System.out.println("Expected: 1/2 * 3/4 = 3/8"); System.out.println("Decimal: " + r1.multiply(r3).toDouble()); System.out.println(); // Test DIVISION System.out.println("=== DIVISION ==="); System.out.println("Instance method - r1 ÷ r2 = " + r1.divide(r2)); System.out.println("Static method - Rational.divide(r1, r2) = " + Rational.divide(r1, r2)); System.out.println("Expected: 1/2 ÷ 1/3 = 3/2"); System.out.println("Decimal: " + r1.divide(r2).toDouble()); System.out.println(); // Test with negative numbers System.out.println("=== NEGATIVE NUMBERS ==="); Rational neg1 = new Rational(-2, 3); Rational neg2 = new Rational(4, -5); System.out.println("neg1 = " + neg1); // Should show -2/3 System.out.println("neg2 = " + neg2); // Should show -4/5 System.out.println("neg1 + neg2 = " + neg1.add(neg2)); System.out.println("-2/3 + -4/5 = (-10/15 + -12/15) = -22/15"); System.out.println("neg1 * neg2 = " + neg1.multiply(neg2)); System.out.println("(-2/3) * (-4/5) = 8/15"); System.out.println(); // Test simplification System.out.println("=== SIMPLIFICATION ==="); Rational r6 = new Rational(6, 8); Rational r7 = new Rational(10, 25); Rational r8 = new Rational(18, -24); System.out.println("6/8 simplified = " + r6); System.out.println("10/25 simplified = " + r7); System.out.println("18/-24 simplified = " + r8); System.out.println(); // Test chaining operations System.out.println("=== CHAINING OPERATIONS ==="); Rational result = r1.add(r2).multiply(r3).divide(r4); System.out.println("((r1 + r2) * r3) ÷ r4 = " + result); System.out.println("((1/2 + 1/3) * 3/4) ÷ 2/5 = (5/6 * 3/4) ÷ 2/5 = (15/24) ÷ 2/5 = 15/24 * 5/2 = 75/48 = 25/16"); System.out.println("Decimal: " + result.toDouble()); System.out.println(); // Test integer handling System.out.println("=== INTEGER HANDLING ==="); System.out.println("r5 = " + r5); // Should show 5, not 5/1 System.out.println("r5 + r1 = " + r5.add(r1)); System.out.println("5 + 1/2 = 11/2"); System.out.println("r1 * r5 = " + r1.multiply(r5)); System.out.println("1/2 * 5 = 5/2"); System.out.println(); // Test exception handling System.out.println("=== EXCEPTION TEST ==="); try { Rational invalid = new Rational(1, 0); } catch (IllegalArgumentException e) { System.out.println("Caught exception: " + e.getMessage()); } try { Rational zero = new Rational(0, 1); Rational divisionByZero = r1.divide(zero); } catch (ArithmeticException e) { System.out.println("Caught division by zero: " + e.getMessage()); } } }