//import junit.framework.TestCase;
import java.math.BigInteger;

/**
 * Tests BigRational.
 * 
 * @author Kyle Harris. Created Mar 14, 2008.
 */
public class BigRationalTest extends TestCase {

	/**
	 * Test method for
	 * {@link BigRational#BigRational(java.math.BigInteger, java.math.BigInteger)}.
	 */
	public void testBigRationalBigIntegerBigInteger() {
		BigRational num = new BigRational(new BigInteger("2"), new BigInteger(
				"3"));
		assertEquals("2/3", num.toString());
	}

	/**
	 * Test method for
	 * {@link BigRational#BigRational(java.lang.String, java.lang.String)}.
	 */
	public void testBigRationalStringString() {
		BigRational num = new BigRational("1", "4");
		assertEquals("1/4", num.toString());
	}

	/**
	 * Test method for {@link BigRational#abs()}.
	 */
	public void testAbs() {
		BigRational num = new BigRational("-1", "5");
		BigRational num1 = new BigRational("2", "10");
		assertEquals("1/5", (num.abs()).toString());
		assertEquals("1/5", (num1.abs()).toString());
	}

	/**
	 * Test method for {@link BigRational#add(java.lang.Object)}.
	 */
	public void testAdd() {
		BigRational num = new BigRational("4", "5");
		BigRational num1 = new BigRational("5", "6");
		BigRational num2 = new BigRational("3", "7");
		BigRational num3 = new BigRational("9999999999999999999999999",
				"1000000000000000000000000");
		BigRational num4 = new BigRational("1", "1000000000000000000000000");
		assertEquals("43/35", (num.add(num2)).toString());
		assertEquals("53/42", (num2.add(num1)).toString());
		assertEquals("10/1", (num3.add(num4)).toString());
	}

	/**
	 * Test method for {@link BigRational#divide(java.lang.Object)}.
	 */
	public void testDivide() {
		BigRational num = new BigRational("4", "5");
		BigRational num2 = new BigRational("3", "7");
		BigRational num3 = new BigRational("4", "9");
		assertEquals("28/15", (num.divide(num2)).toString());
		assertEquals("27/28", (num2.divide(num3)).toString());
	}

	/**
	 * Test method for {@link BigRational#multiply(java.lang.Object)}.
	 */
	public void testMultiply() {
		BigRational num = new BigRational("4", "5");
		BigRational num1 = new BigRational("5", "6");
		BigRational num2 = new BigRational("3", "2");
		assertEquals("2/3", (num.multiply(num1)).toString());
		assertEquals("5/4", (num1.multiply(num2)).toString());
	}

	/**
	 * Test method for {@link BigRational#negate()}.
	 */
	public void testNegate() {
		BigRational num = new BigRational("4", "3");
		BigRational num1 = new BigRational("-4", "3");
		assertEquals("-4/3", (num.negate()).toString());
		assertEquals("4/3", (num1.negate()).toString());
	}

	/**
	 * Test method for {@link BigRational#subtract(java.lang.Object)}.
	 */
	public void testSubtract() {
		BigRational num = new BigRational("4", "3");
		BigRational num1 = new BigRational("2", "3");
		BigRational num2 = new BigRational("1", "3");
		assertEquals("2/3", (num.subtract(num1)).toString());
		assertEquals("1/3", (num1.subtract(num2)).toString());
	}

	/**
	 * Test method for {@link BigRational#compareTo(java.lang.Object)}.
	 */
	public void testCompareTo() {
		BigRational num = new BigRational("4", "3");
		BigRational num1 = new BigRational("-4", "3");
		assertEquals(1, num.compareTo(num1));
		assertEquals(-1, num1.compareTo(num));
		assertEquals(0, num.compareTo(num1.negate()));
	}
}
