package org.epochx.test; import static org.junit.Assert.fail; import org.epochx.core.*; import org.epochx.life.*; import org.epochx.stats.*; import org.junit.*; public class ModelTest { private Evolver evolver; private RunListener runPrinter; private GenerationListener genPrinter; @Before public void setUp() { evolver = new Evolver(); } protected void setupRunPrinting(final Stats stats) { runPrinter = new RunAdapter() { @Override public void onRunEnd() { stats.print(StatField.RUN_NUMBER, StatField.RUN_FITNESS_MIN); } }; evolver.getLife().addRunListener(runPrinter); } protected void setupGenPrinting(final Stats stats) { genPrinter = new GenerationAdapter() { @Override public void onGenerationEnd() { stats.print(StatField.RUN_NUMBER, StatField.GEN_NUMBER, StatField.GEN_FITNESS_MIN, StatField.GEN_FITNESS_AVE); } }; evolver.getLife().addGenerationListener(genPrinter); } protected Evolver getEvolver() { return evolver; } protected int getNoSuccesses(Model model, boolean printGenStats, boolean printRunStats) { final SuccessCounter counter = new SuccessCounter(); evolver.getLife().addRunListener(counter); evolver.enqueue(model); if (printGenStats) { setupGenPrinting(evolver.getStats(model)); } if (printRunStats) { setupRunPrinting(evolver.getStats(model)); } evolver.run(); evolver.getLife().removeRunListener(counter); return counter.getNoSuccess(); } @After public void tearDown() { evolver.getLife().removeRunListener(runPrinter); evolver.getLife().removeGenerationListener(genPrinter); } public void assertBetween(String msg, final int lower, final int upper, final int actual) { if (msg == null) { msg = ""; } if ((actual < lower) || (actual > upper)) { fail(msg + " lower=" + lower + " upper=" + upper + " actual=" + actual); } } public void assertBetween(final int lower, final int upper, final int actual) { assertBetween("", lower, upper, actual); } public void assertBetween(String msg, final double lower, final double upper, final double actual) { if (msg == null) { msg = ""; } if ((actual < lower) || (actual > upper)) { fail(msg + " lower=" + lower + " upper=" + upper + " actual=" + actual); } } public void assertBetween(final double lower, final double upper, final double actual) { assertBetween("", lower, upper, actual); } }