/**
 * 
 */
package lab10;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

/**
 * @author Thomas
 *
 */
class Tester {
	private static double DELTA=1e-10;

	/**
	 * Test method for {@link lab10.XmpFunc#reduce(double[], java.util.function.BiFunction, double)}.
	 */
	@Test
	void testReduce() {
		double nums[] = { 1.1, 2.2, 3.3, 4.4 };
		assertEquals(11.0,XmpFunc.reduce(nums, (x,y)->x+y, 0.0),DELTA,"Sum of nums");
		assertEquals(35.1384,XmpFunc.reduce(nums, (x, y)->x*y, 1.0),DELTA);
		assertEquals(0.028458893973,XmpFunc.reduce(nums, (x, y)->x/y,1.0),DELTA);
	}

	/**
	 * Test method for {@link lab10.XmpFunc#sequence(double, java.util.function.Function, int)}.
	 */
	@Test
	void testSequence() {
		double ints[]= {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
		assertArrayEquals(ints,XmpFunc.sequence(1.0, x->x+1.0, 10));
		double poly[]= { 1.0, 3.0, 7.0, 15.0, 31.0, 63.0, 127.0, 255.0, 511.0, 1023.0};
		assertArrayEquals(poly,XmpFunc.sequence(1,x->(2*x+1),10));
		double tdiv[]= { 2.0, 0.3333333333333333, 0.75, 0.5714285714285714, 0.6363636363636364, 0.6111111111111112, 0.6206896551724138, 0.6170212765957447, 0.6184210526315789, 0.6178861788617886 };
		assertArrayEquals(tdiv,XmpFunc.sequence(2,x->1/(x+1),10));
	}

	/**
	 * Test method for {@link lab10.XmpFunc#indexSequence(double, java.util.function.BiFunction, int)}.
	 */
	@Test
	void testIndexSequence() {
		// fail("Not yet implemented");
		double iplus[]= {1.0, 2.0, 4.0, 7.0, 11.0, 16.0, 22.0, 29.0, 37.0, 46.0};
		assertArrayEquals(iplus,XmpFunc.indexSequence(1,(x,y)->(x+y),10));
	}

	/**
	 * Test method for {@link lab10.XmpFunc#biSequence(double, double, java.util.function.BiFunction, int)}.
	 */
	@Test
	void testBiSequence() {
		// fail("Not yet implemented");
		double fibs[]= {1.0, 1.0, 2.0, 3.0, 5.0, 8.0, 13.0, 21.0, 34.0, 55.0};
		assertArrayEquals(fibs,XmpFunc.biSequence(1.0, 1.0, (x,y)->(x+y),10));
		double fmult[]= {1.0, 2.0, 2.0, 4.0, 8.0, 32.0, 256.0, 8192.0, 2097152.0, 1.7179869184E10};
		assertArrayEquals(fmult,XmpFunc.biSequence(1.0, 2.0, (x,y)->x*y, 10));
	}

}
