package algorithmrepository;

import junit.framework.TestCase;

/**
 * Testclass for dynamic arrays of primitive types
 */
public class TestDynamiccArrays extends TestCase {

	/**
	 * Test DynamicDoubleArray
	 */
	public void testDynamicDoubleArray() {
		DynamicDoubleArray d = new DynamicDoubleArray();
		
		assertEquals(0, d.size());		
		d.add(1);
		assertEquals(1, d.size());
		d.add(2);
		assertEquals(2, d.size());
		d.add(3);
		assertEquals(3, d.size());
		
		double[] values = d.getTrimmedArray();
		
		assertEquals(3, values.length);
		assertEquals(1, values[0], 1e-23);
		assertEquals(2, values[1], 1e-23);
		assertEquals(3, values[2], 1e-23);
		
		d.reset();
		for(int i=0;i<9988;++i) {
			d.add(i);
		}
		assertEquals(9988, d.size());
		
		values = d.getTrimmedArray();
		assertEquals(9988, values.length);
		for(int i=0;i<values.length;++i) {
			assertEquals(i,values[i],1e-23);
		}		
	}
	
	/**
	 * Test DynamicIntArray
	 */
	public void testDynamicIntArray() {
		DynamicIntArray d = new DynamicIntArray();
		
		assertEquals(0, d.size());		
		d.add(1);
		assertEquals(1, d.size());
		d.add(2);
		assertEquals(2, d.size());
		d.add(3);
		assertEquals(3, d.size());
		
		int[] values = d.getTrimmedArray();
		
		assertEquals(3, values.length);
		assertEquals(1, values[0]);
		assertEquals(2, values[1]);
		assertEquals(3, values[2]);
		
		d.reset();
		for(int i=0;i<9988;++i) {
			d.add(i);
		}
		assertEquals(9988, d.size());
		
		values = d.getTrimmedArray();
		assertEquals(9988, values.length);
		for(int i=0;i<values.length;++i) {
			assertEquals(i,values[i]);
		}
		
	}

	
	
	/**
	 * Test DynamicLongArray
	 */
	public void testDynamicLongArray() {
		DynamicLongArray d = new DynamicLongArray();
		
		assertEquals(0, d.size());		
		d.add(1);
		assertEquals(1, d.size());
		d.add(2);
		assertEquals(2, d.size());
		d.add(3);
		assertEquals(3, d.size());
		
		long[] values = d.getTrimmedArray();
		
		assertEquals(3, values.length);
		assertEquals(1, values[0]);
		assertEquals(2, values[1]);
		assertEquals(3, values[2]);
		
		d.reset();
		for(int i=0;i<9988;++i) {
			d.add(i);
		}
		assertEquals(9988, d.size());
		
		values = d.getTrimmedArray();
		assertEquals(9988, values.length);
		for(int i=0;i<values.length;++i) {
			assertEquals(i,values[i]);
		}		
	}
	
	
	/**
	 * Test DynamicBooleanArray
	 */
	public void testDynamicBooleanArray() {
		DynamicBooleanArray d = new DynamicBooleanArray();
		
		assertEquals(0, d.size());		
		d.add(true);
		assertEquals(1, d.size());
		d.add(false);
		assertEquals(2, d.size());
		d.add(true);
		assertEquals(3, d.size());
		
		boolean[] values = d.getTrimmedArray();
		
		assertEquals(3, values.length);
		assertEquals(true, values[0]);
		assertEquals(false, values[1]);
		assertEquals(true, values[2]);
		
		d.reset();
		for(int i=0;i<9988;++i) {
			d.add(i % 2 == 0 ? true : false);
		}
		assertEquals(9988, d.size());
		
		values = d.getTrimmedArray();
		assertEquals(9988, values.length);
		for(int i=0;i<values.length;++i) {
			assertEquals(i % 2 == 0 ? true : false,values[i]);
		}
		
	}
	
}


