}
}
@Test
public void testInitialGuess() {
MonitoredFunction f = new MonitoredFunction(new QuinticFunction());
BrentSolver solver = new BrentSolver();
double result;
// no guess
result = solver.solve(100, f, 0.6, 7.0);
Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
int referenceCallsCount = f.getCallsCount();
Assert.assertTrue(referenceCallsCount >= 13);
// invalid guess (it *is* a root, but outside of the range)
try {
result = solver.solve(100, f, 0.6, 7.0, 0.0);
Assert.fail("a NumberIsTooLargeException was expected");
} catch (NumberIsTooLargeException iae) {
// expected behaviour
}
// bad guess
f.setCallsCount(0);
result = solver.solve(100, f, 0.6, 7.0, 0.61);
Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
Assert.assertTrue(f.getCallsCount() > referenceCallsCount);
// good guess
f.setCallsCount(0);
result = solver.solve(100, f, 0.6, 7.0, 0.999999);
Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
Assert.assertTrue(f.getCallsCount() < referenceCallsCount);
// perfect guess
f.setCallsCount(0);
result = solver.solve(100, f, 0.6, 7.0, 1.0);
Assert.assertEquals(result, 1.0, solver.getAbsoluteAccuracy());
Assert.assertEquals(1, solver.getEvaluations());
Assert.assertEquals(1, f.getCallsCount());
}