/*
 * Created on 01.jan.2004
 * JUnit tests for DecimalNumber class
 */
package JUnitTestingClasses;

import junit.framework.TestCase;
import DecimalNumber;

/**
 * @author hallvors
 * JUnit tests for the methods in the DecimalNumber class
 */
public class DecimalNumberTest extends TestCase {
	public int numI ;
	public String numS;
	public String numSS;
	public int numNeg;
	public DecimalNumber dn;


	/**
	 * Constructor for DecimalNumberTest.
	 * @param arg0
	 */
	public DecimalNumberTest(String arg0) {
		super(arg0);
	}
	public static void main(String[] args) {
		junit.textui.TestRunner.run(DecimalNumberTest.class);
	}

	public void testCreateDecimalNumber(){
		DecimalNumber n = new DecimalNumber(209, 2);
		assertEquals("2.09", n.toString());
	}
	public void testCreateDecimalNumberInt(){
		DecimalNumber n = new DecimalNumber(209);
		assertEquals("209", n.toString());
	}
	
	public void testCreateDecimalNumberNeg(){
		try{DecimalNumber n = new DecimalNumber(209, -2);
			n.decPos=n.decPos;
			fail();
		}catch(IllegalArgumentException e){
			
		}
	}
	public void testCreateDecimalNumberFromString(){
		DecimalNumber n = new DecimalNumber("54.23");
		assertEquals("54.23", n.toString());
	}
	public void testCreateDecimalNumberLessThanOneFromString(){
		DecimalNumber n = new DecimalNumber("0.023");
		assertEquals("0.023", n.toString());
	}
	
	public void testAddDnDn(){
		DecimalNumber dy = new DecimalNumber(543, 1);
		dn.add(dy);
		assertEquals( "63.73", dn.toString());
	}
	public void testAddDnStr(){
		String dy = "54.3";
		dn.add(dy);
		assertEquals( "63.73", dn.toString());
	}
	public void testSubtractDnDn(){
		DecimalNumber dy = new DecimalNumber(21, 1);
		dn.subtract(dy);
		assertEquals( "7.33", dn.toString());
	}
	public void testSubtractDnStr(){
		String dy = "2.1";
		dn.subtract(dy);
		assertEquals( "7.33", dn.toString());
	}
	public void testSubtractNegDnDn(){
		String dy = "21";
		dn.subtract(dy);
		assertEquals( "-11.57", dn.toString());
	}	
	public void testmultiplyDnStr(){
		dn.multiply(numS);
		assertEquals( "472.443", dn.toString());
	}
	public void testMultiplyDnDn(){
		DecimalNumber dy = new DecimalNumber(21, 1);
		dn.multiply(dy);
		assertEquals( "19.803", dn.toString());
	}
	public void testMultiplyDnBigDn(){
		DecimalNumber dy = new DecimalNumber(10000, 1);
		dn.multiply(dy);
		assertEquals( "9430", dn.toString());
	}

	public void testDivideDnStr(){
		dn.divide(numS);
		assertEquals( "0.1882", dn.toString());
	}	
	public void testDivideInt(){
		dn.divide(1);
		assertEquals( "9.43", dn.toString());
	}	
	public void testDivideSelf(){
		DecimalNumber dy = new DecimalNumber(943, 2);
		dn.divide(dy);
		assertEquals( "1", dn.toString());
	}	
	
	public void testIsLargerThan(){
		assertTrue(dn.isLargerThan(new DecimalNumber("0.2")));
	}	

	public void testIsSmallerThan(){
		assertTrue(dn.isSmallerThan(new DecimalNumber(2394059, 2)));
	}	

	public void testIsLargerThanNeg(){
		assertFalse(dn.isLargerThan(new DecimalNumber("2500")));
	}	

	public void testIsSmallerThanNeg(){
		assertFalse(dn.isSmallerThan(new DecimalNumber( 95, 1)));
	}	
	
	public void testRounding1(){
		DecimalNumber dnn=new DecimalNumber(2190, 3);
		assertEquals(dnn.round(1), "2.2");
	}
	public void testRounding2(){
		DecimalNumber dnn=new DecimalNumber(2190, 3);
		assertEquals(dnn.round(5), "2.19000");
	}
	public void testRounding3(){
		DecimalNumber dnn=new DecimalNumber(21853, 4);
		assertEquals(dnn.round(2), "2.19");
	}
	public void testRounding4(){
		DecimalNumber dnn=new DecimalNumber(29853, 4);
		assertEquals(dnn.round(0), "3");
	}	/*
	 * @see TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		// Mostly here to teach me how to use fixtures, not sure if I ever got around to using all these variables..
		numI = 501;
		numS="50.1";
		numSS="5.01";
		numNeg=-16;
		dn= new DecimalNumber(943, 2);
		
	}
	/*
	 * @see TestCase#tearDown()
	 */
	protected void tearDown() throws Exception {
		numI = 0;
		numS=null;
		numSS=null;
		numNeg=-0;
		
	}
}

