function tests = Test()
	tests = functiontests(localfunctions);
end

function testRungekutta4(tc)
	F = @(t,y) -0.5*y;
	dt = 0.01;
	t0 = 0;
	y0 = 1;
	T = 2;

	ts1 = time.Rungekutta4(F, dt, t0, y0);
	ts1.stepN(T/dt);

	ts2 = time.Rungekutta4(F, dt/2, t0, y0);
	ts2.stepN(T/(dt/2));

	y_true = exp(-0.5*T);

	e1 = y_true - ts1.getV();
	e2 = y_true - ts2.getV();

	tc.verifyEqual(e1/e2, 2^4, 'AbsTol', 0.5);
end

function testRungekutta4SecondOrder(tc)
	F = @(t,y,y_t) -4*y - 1/4*y_t;
	dt = 0.01;
	t0 = 0;
	y0 = 1;
	y0t = 1/2;
	T = 2;

	ts1 = time.Rungekutta4SecondOrder(F, dt, t0, y0, y0t);
	ts1.stepN(T/dt);

	ts2 = time.Rungekutta4SecondOrder(F, dt/2, t0, y0, y0t);
	ts2.stepN(T/(dt/2));

	y_true = 1/51*exp(-T/8)*(sqrt(255)*sin(sqrt(255)/8*T) + 51*cos(sqrt(255)/8*T));

	e1 = y_true - ts1.getV();
	e2 = y_true - ts2.getV();

	tc.verifyEqual(e1/e2, 2^4, 'AbsTol', 0.5);
end
