package ngenes2.evolver.stop;
import java.util.Collections;
import ngenes2.individual.Individual;
import ngenes2.population.BasicPopulation;
import ngenes2.population.Population;
import ngenes2.util.Properties;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class FitnessTargetTest extends StopConditionContractTesst {
private final double bestFitness = 1.0;
private final Properties props = new Properties().put("fitness_target", bestFitness);
private Population pop;
private StopCondition stop;
@Before
public void setup() {
stop = getStopCondition();
pop = makePopulation();
}
private void addMockIndividual( double fitness, Population pop ) {
Individual ind = mock(Individual.class);
when( ind.fitness() ).thenReturn( fitness );
pop.addToNextGeneration( ind );
pop.nextGeneration();
}
private Population makePopulation() {
return new BasicPopulation( Collections.EMPTY_LIST );
}
@Test
public void testShouldStop() {
addMockIndividual(0.5*bestFitness,pop);
assertEquals( true, stop.shouldStop(0, pop) );
}
@Test
public void testShouldNotStop() {
addMockIndividual(2*bestFitness,pop);
assertEquals( false, stop.shouldStop(0, pop) );
}
@Override
protected StopCondition getStopCondition() {
return new FitnessTarget( props );
}
@Override
protected int getStoppingGeneration() {
return 0;
}
@Override
protected Population getStoppingPopulation() {
Population popul = makePopulation();
addMockIndividual(0.5*bestFitness,popul);
return popul;
}
}