/**
* Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>.
*/
package org.evosuite.ga;
import org.evosuite.Properties;
import org.evosuite.Properties.Algorithm;
import org.evosuite.coverage.branch.OnlyBranchCoverageSuiteFitness;
import org.evosuite.coverage.exception.ExceptionCoverageSuiteFitness;
import org.evosuite.coverage.method.MethodNoExceptionCoverageSuiteFitness;
import org.evosuite.coverage.io.output.OutputCoverageSuiteFitness;
import org.evosuite.coverage.line.LineCoverageSuiteFitness;
import org.evosuite.testsuite.TestSuiteChromosome;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Jose Miguel Rojas
*/
public class ChromosomeTest {
private final double ANY_DOUBLE_1 = 2.0;
private final double ANY_DOUBLE_2 = 5.0;
private final double ANY_DOUBLE_3 = 6.0;
private final double ANY_DOUBLE_4 = 3.0;
private final double ANY_DOUBLE_BETWEEN_0_AND_1_1 = 0.2;
private final double ANY_DOUBLE_BETWEEN_0_AND_1_2 = 0.6;
@Test
public void testGetFitnessForOneFunctionNoCompositional() {
Properties.ALGORITHM = Algorithm.MONOTONICGA;
TestSuiteChromosome c = new TestSuiteChromosome();
c.addFitness(new LineCoverageSuiteFitness(), ANY_DOUBLE_1);
assertEquals(ANY_DOUBLE_1, c.getFitness(), 0.001);
}
@Test
public void testGetFitnessForNoFunctionNoCompositional() {
Properties.ALGORITHM = Algorithm.MONOTONICGA;
TestSuiteChromosome c = new TestSuiteChromosome();
assertEquals(0.0, c.getFitness(), 0.001);
}
@Test
public void testCompositionalGetFitnessForNoFunction() {
Properties.ALGORITHM = Algorithm.MONOTONICGA;
TestSuiteChromosome c = new TestSuiteChromosome();
assertEquals(0.0, c.getFitness(), 0.001);
}
@Test
public void testCompositionalGetFitnessForOneFunction() {
Properties.ALGORITHM = Algorithm.MONOTONICGA;
TestSuiteChromosome c = new TestSuiteChromosome();
LineCoverageSuiteFitness f1 = new LineCoverageSuiteFitness();
c.addFitness(f1);
c.setFitness(f1, ANY_DOUBLE_1);
assertEquals(ANY_DOUBLE_1, c.getFitness(), 0.001);
}
@Test
public void testCompositionalGetFitnessForTwoFunctions() {
Properties.ALGORITHM = Algorithm.MONOTONICGA;
TestSuiteChromosome c = new TestSuiteChromosome();
LineCoverageSuiteFitness f1 = new LineCoverageSuiteFitness();
OnlyBranchCoverageSuiteFitness f2 = new OnlyBranchCoverageSuiteFitness();
c.addFitness(f1);
c.addFitness(f2);
c.setFitness(f1, ANY_DOUBLE_1);
c.setFitness(f2, ANY_DOUBLE_2);
c.setCoverage(f1, ANY_DOUBLE_BETWEEN_0_AND_1_1);
c.setCoverage(f2, ANY_DOUBLE_BETWEEN_0_AND_1_2);
assertEquals(ANY_DOUBLE_1, c.getFitnessInstanceOf(LineCoverageSuiteFitness.class), 0.001);
assertEquals(ANY_DOUBLE_2, c.getFitnessInstanceOf(OnlyBranchCoverageSuiteFitness.class), 0.001);
assertEquals(ANY_DOUBLE_BETWEEN_0_AND_1_1, c.getCoverageInstanceOf(LineCoverageSuiteFitness.class), 0.001);
assertEquals(ANY_DOUBLE_BETWEEN_0_AND_1_2, c.getCoverageInstanceOf(OnlyBranchCoverageSuiteFitness.class), 0.001);
assertEquals(ANY_DOUBLE_1 + ANY_DOUBLE_2, c.getFitness(), 0.001);
assertEquals((ANY_DOUBLE_BETWEEN_0_AND_1_1 + ANY_DOUBLE_BETWEEN_0_AND_1_2) / 2, c.getCoverage(), 0.001);
}
@Test
public void testCompositionalGetFitnessForSeveralFunctions() {
Properties.ALGORITHM = Algorithm.MONOTONICGA;
TestSuiteChromosome c = new TestSuiteChromosome();
LineCoverageSuiteFitness f1 = new LineCoverageSuiteFitness();
c.addFitness(f1);
c.setFitness(f1, ANY_DOUBLE_1);
MethodNoExceptionCoverageSuiteFitness f2 = new MethodNoExceptionCoverageSuiteFitness();
c.addFitness(f2);
c.setFitness(f2, ANY_DOUBLE_2);
OutputCoverageSuiteFitness f3 = new OutputCoverageSuiteFitness();
c.addFitness(f3);
c.setFitness(f3, ANY_DOUBLE_3);
ExceptionCoverageSuiteFitness f4 = new ExceptionCoverageSuiteFitness();
c.addFitness(f4);
c.setFitness(f4, ANY_DOUBLE_4);
double sum = ANY_DOUBLE_1 + ANY_DOUBLE_2 + ANY_DOUBLE_3 + ANY_DOUBLE_4;
assertEquals(sum, c.getFitness(), 0.001);
}
}