/*
 * Created on Apr 13, 2004
 *
 * To change the template for this generated file go to
 * window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
package polynoom;

import junit.framework.TestCase;

public class TestPolynoom extends TestCase {
	
	
	public void testToString() {
		Polynoom p1 = createPoly(new double[] {77,0,5, -11});
		String s1 = p1.toString();
		assertTrue(s1.matches(".*77.*[xX].*3.*5.*[xX].*-11.*"));
		assertFalse(s1.matches("2"));
	}
	
	public void testEquals() {
		Polynoom p1 = createPoly(new double[] {2,5,10});
		Polynoom p2 = createPoly(new double[] {2,5,10});
		Polynoom p3 = createPoly(new double[] {2,5,10,0});
		Polynoom p4 = createPoly(new double[] {0,2,5,10});
		Polynoom p5 = createPoly(new double[] {7,5,10});
		Polynoom p6 = createPoly(new double[] {2,5,9});
		Polynoom p7 = createPoly(new double[] {1, 2,5,10});
		assertEquals(p1,p2);
		assertFalse(p1.equals(p3));
		assertEquals(p1, p4);
		assertFalse(p1.equals(p5));
		assertFalse(p1.equals(p6));
		assertFalse(p1.equals(p7));
		assertFalse(p7.equals(p1));
		assertFalse(p1.equals(new Integer(2)));
		assertFalse(p1.equals(null));
		
	}
	
	public void testCloning() {
		Polynoom x = createPoly(new double[] {20.4, -394.995, 390.555});
		// Object.clone() tingimused
		assertTrue(x != x.clone());
		assertEquals(x.getClass(), x.clone().getClass());
		assertEquals(x, x.clone());
	}
	
	public void testAritmeetika() {
		Polynoom p1 = createPoly(new double[] {1, 2, -10});
		Polynoom p2 = createPoly(new double[] {4, 0, -2, 5});
		Polynoom p3 = createPoly(new double[] {4, 1, 0, -5});
		Polynoom p4 = createPoly(new double[] {4,8,-42,1,30,-50});
		
		assertEquals(p3, p1.pluss(p2));
		assertEquals(createPoly(new double[] {1, 2, -10}), p1);
		
		assertEquals(p4, p1.korda(p2));
		assertEquals(createPoly(new double[] {1, 2, -10}), p1);
		
		//niisama aritmeetikaseadused
		Polynoom zero = new Polynoom();
		Polynoom yks = createPoly(new double[] {1});
		Polynoom neg = createPoly(new double[] {-1});
		Polynoom kolm = createPoly(new double[] {3});
		
		assertEquals(p1.pluss(p2), p2.pluss(p1));
		assertEquals(p1.pluss(p2.pluss(p3)), p1.pluss(p2).pluss(p3));
		assertEquals(p1, p1.pluss(zero));
		
		assertEquals(p1.korda(p2), p2.korda(p1));
		assertEquals(p1.korda(p2.korda(p3)), p1.korda(p2).korda(p3));
		assertEquals(p1, p1.korda(yks));
		
		assertEquals(zero, p1.korda(zero));
		assertEquals(zero, p1.pluss(neg.korda(p1)));
		assertEquals(kolm.korda(p1), p1.pluss(p1).pluss(p1));
	}
	
	public void testTuletis() {
		Polynoom zero = new Polynoom();
		Polynoom p1 = createPoly(new double[] {-10, 7, 2, -10});
		Polynoom p2 = createPoly(new double[] {-30, 14, 2});
		assertEquals(p2, p1.tuletis());
		assertEquals(zero, zero.tuletis());
	}
	
	public static Polynoom createPoly (double[] kordajad) {
		Polynoom result = new Polynoom();
		for (int i = kordajad.length -1, k = 0; i >= 0; i--, k++)
			result.lisaLiige(k, kordajad[i]);
		return result;
	}

}
