/**
* Test if prepare and complete return to the same initial conditions
*/
public void testPrepareComplete() {
Particle p = new ParticleFull();
ConstantForce f = new ConstantForce();
double step = 1.0;
f.ex = 1.234;
f.ey = 3.456;
f.bz = 7.890;
f.gx = 2.468;
f.gy = 3.579;
f.drag = 5.432;
p.setX(23.456);
p.setY(35.689);
p.setRadius(13.579);
p.setVx(12.345);
p.setVy(76.543);
p.setMass(7.654);
p.setCharge(5.432);
Particle pcopy = p.copy();
solver.prepare(p, f, step);
solver.complete(p, f, step);
assertAlmostEquals("x", pcopy.getX(), p.getX(), ACCURACY_LIMIT);
assertAlmostEquals("y", pcopy.getY(), p.getY(), ACCURACY_LIMIT);
assertAlmostEquals("vx", pcopy.getVx(), p.getVx(), ACCURACY_LIMIT);
assertAlmostEquals("vy", pcopy.getVy(), p.getVy(), ACCURACY_LIMIT);
for (int i=0; i<1000; i++)
{
solver.prepare(p, f, step);
solver.complete(p, f, step);
}
assertAlmostEquals("x", pcopy.getX(), p.getX(), ACCURACY_LIMIT);
assertAlmostEquals("y", pcopy.getY(), p.getY(), ACCURACY_LIMIT);
assertAlmostEquals("vx", pcopy.getVx(), p.getVx(), ACCURACY_LIMIT);
assertAlmostEquals("vy", pcopy.getVy(), p.getVy(), ACCURACY_LIMIT);
}