package ngenes2.individual;
import java.util.ArrayList;
import java.util.List;
import ngenes2.fitness.Fitness;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class LinearIndividualTest {
private Fitness<Integer> fixedFitness = new Fitness<Integer>() {
public double compute(List<Integer> chromosome) {
return 12.0;
}
};
private List<Integer> chromosome;
private LinearIndividual<Integer> individual;
@Before
public void makeIndividual() {
chromosome = new ArrayList<Integer>();
chromosome.add(0);
chromosome.add(1);
chromosome.add(2);
individual = new LinearIndividual<Integer>(fixedFitness, chromosome);
}
@Test
public void testFitness() {
assertEquals(12.0, individual.fitness(), 1e-9);
}
@Test
public void testFitnessCache() {
assertEquals(individual.fitness(), individual.fitness(), 1e-18);
}
@Test
public void testGet() {
assertEquals(chromosome.get(2), individual.get(2));
}
@Test(expected=IndexOutOfBoundsException.class)
public void testGetOutOfBond() {
individual.get(individual.size());
}
@Test
public void testSize() {
assertEquals(chromosome.size(), individual.size());
}
@Test(expected=UnsupportedOperationException.class)
public void chromosomeImmutability() {
individual.chromosome().set(0,12);
}
@Test
public void testFitnessFunction() {
assertSame(fixedFitness, individual.fitnessFunction());
}
@Test
public void testToStringContainsFitness() {
assertTrue( individual.toString().contains( String.valueOf(individual.fitness())));
}
@Test
public void siblingGeneration() {
List<Integer> newChromosome = new ArrayList<Integer>(chromosome);
newChromosome.set(0, 124);
LinearIndividual<Integer> sibling = individual.makeSibling(newChromosome);
assertEquals( individual.size(), sibling.size() );
assertEquals( new Integer(124), sibling.get(0));
for( int i=1; i< individual.size(); i++ ) {
assertEquals( individual.get(i), sibling.get(i) );
}
}
}