/*
* This file is part of JGAP.
*
* JGAP offers a dual license model containing the LGPL as well as the MPL.
*
* For licensing information please see the file license.txt included with JGAP
* or have a look at the top of class org.jgap.Chromosome which representatively
* includes the JGAP license policy applicable for any file delivered with JGAP.
*/
package org.jgap;
import org.jgap.event.*;
import org.jgap.impl.*;
import junit.framework.*;
/**
* Tests the Configuration class.
*
* @author Klaus Meffert
* @since 1.1
*/
public class ConfigurationTest
extends JGAPTestCase {
/** String containing the CVS revision. Read out via reflection!*/
private final static String CVS_REVISION = "$Revision: 1.45 $";
public static Test suite() {
TestSuite suite = new TestSuite(ConfigurationTest.class);
return suite;
}
public void setUp() {
super.setUp();
// Important: Reset the configurational parameters set.
// ----------------------------------------------------
Configuration.reset();
}
/**
* @author Klaus Meffert
*/
public void testAddGeneticOperator_0() {
Configuration conf = new Configuration();
try {
conf.addGeneticOperator(null);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @author Klaus Meffert
*/
public void testAddGeneticOperator_1() {
Configuration conf = new Configuration();
try {
conf.lockSettings();
conf.addGeneticOperator(new MutationOperator());
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
*/
public void testAddGeneticOperator_2()
throws Exception {
Configuration conf = new Configuration();
conf.addGeneticOperator(new MutationOperator(conf));
assertEquals(1, conf.getGeneticOperators().size());
conf.addGeneticOperator(new MutationOperator(conf));
assertEquals(2, conf.getGeneticOperators().size());
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_0()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_1()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_2()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), false);
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_3()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_4()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), false);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_5()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.addGeneticOperator(new MutationOperator(conf));
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_6()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.setFitnessEvaluator(new DefaultFitnessEvaluator());
conf.addGeneticOperator(new MutationOperator(conf));
conf.setPopulationSize(1);
conf.verifyStateIsValid();
}
/**
* @throws Exception
*
* @author Klaus Meffert
*/
public void testVerifyStateIsValid_7()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.addGeneticOperator(new MutationOperator(conf));
conf.setPopulationSize(1);
try {
conf.verifyStateIsValid();
fail();
} catch (IllegalArgumentException illex) {
; //this is OK
}
}
/**
* Configuration with sample chromosome that contains no genes.
*
* @throws Exception
*
* @author Klaus Meffert
* @since 2.6
*/
public void testVerifyStateIsValid_8()
throws Exception {
Configuration conf = new DefaultConfiguration();
conf.setFitnessFunction(new TestFitnessFunction());
Chromosome sample = new Chromosome(conf);
conf.setSampleChromosome(sample);
conf.setPopulationSize(5);
try {
conf.verifyStateIsValid();
fail();
} catch (InvalidConfigurationException illex) {
; //this is OK
}
}
/**
* Configuration with sample chromosome that has a gene with allele value
* null.
*
* @throws Exception
*
* @author Klaus Meffert
* @since 2.6
*/
public void testVerifyStateIsValid_9()
throws Exception {
Configuration conf = new DefaultConfiguration();
conf.setFitnessFunction(new TestFitnessFunction());
BooleanGene gene = new BooleanGene(conf);
gene.setAllele(null);
Chromosome sample = new Chromosome(conf, gene, 55);
conf.setSampleChromosome(sample);
conf.setPopulationSize(5);
conf.verifyStateIsValid();
}
/**
* @throws Exception
*
* @author Klaus Meffert
*/
public void testIsLocked_0()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
conf.setFitnessFunction(new StaticFitnessFunction(2));
conf.setFitnessEvaluator(new DefaultFitnessEvaluator());
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), false);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.addGeneticOperator(new MutationOperator(conf));
conf.setPopulationSize(1);
assertEquals(false, conf.isLocked());
conf.lockSettings();
assertEquals(true, conf.isLocked());
}
/**
* @throws Exception
*
* @author Klaus Meffert
*/
public void testGetter_0()
throws Exception {
Configuration conf = new Configuration();
assertEquals(false, conf.isLocked());
FitnessFunction fitFunc = new StaticFitnessFunction(2);
conf.setFitnessFunction(fitFunc);
Gene gene = new BooleanGene(conf);
Chromosome sample = new Chromosome(conf, gene, 55);
conf.setSampleChromosome(sample);
NaturalSelector natSel = new WeightedRouletteSelector();
conf.addNaturalSelector(natSel, false);
RandomGenerator randGen = new StockRandomGenerator();
conf.setRandomGenerator(randGen);
IEventManager evMan = new EventManager();
conf.setEventManager(evMan);
GeneticOperator mutOp = new MutationOperator(conf);
conf.addGeneticOperator(mutOp);
GeneticOperator croOp = new CrossoverOperator(conf);
conf.addGeneticOperator(croOp);
conf.setPopulationSize(7);
assertEquals(fitFunc, conf.getFitnessFunction());
assertEquals(natSel, conf.getNaturalSelectors(false).get(0));
assertEquals(randGen, conf.getRandomGenerator());
assertEquals(sample, conf.getSampleChromosome());
assertEquals(evMan, conf.getEventManager());
assertEquals(7, conf.getPopulationSize());
assertEquals(2, conf.getGeneticOperators().size());
assertEquals(mutOp, conf.getGeneticOperators().get(0));
assertEquals(croOp, conf.getGeneticOperators().get(1));
}
/**
* Tests a deprecated function!
* @throws Exception
*/
public void testSetNaturalSelector_0()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new WeightedRouletteSelector();
conf.setNaturalSelector(selector);
assertEquals(selector, conf.getNaturalSelectors(false).get(0));
}
/**
* Tests a deprecated function!
*/
public void testGetNaturalSelector_0() {
Configuration conf = new Configuration();
NaturalSelector selector = conf.getNaturalSelector();
assertEquals(null, selector);
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 2.2
*/
public void testGetNaturalSelector_1()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new BestChromosomesSelector(conf);
conf.addNaturalSelector(selector, false);
assertEquals(selector, conf.getNaturalSelector());
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testGetNaturalSelector_2()
throws Exception {
Configuration conf = new Configuration();
try {
conf.getNaturalSelector(true, 0);
fail();
} catch (ArrayIndexOutOfBoundsException iex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testGetNaturalSelector_3()
throws Exception {
Configuration conf = new Configuration();
try {
conf.getNaturalSelector(false, 0);
fail();
} catch (ArrayIndexOutOfBoundsException iex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 2.2
*/
public void testGetNaturalSelector_4()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new BestChromosomesSelector(conf);
conf.addNaturalSelector(selector, false);
assertEquals(selector, conf.getNaturalSelector(false, 0));
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testAddNaturalSelector_0()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new WeightedRouletteSelector();
conf.addNaturalSelector(selector, true);
assertEquals(selector, conf.getNaturalSelectors(true).get(0));
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testAddNaturalSelector_1()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new WeightedRouletteSelector();
conf.addNaturalSelector(selector, false);
assertEquals(selector, conf.getNaturalSelectors(false).get(0));
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testAddNaturalSelector_2()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector1 = new WeightedRouletteSelector();
NaturalSelector selector2 = new WeightedRouletteSelector();
conf.addNaturalSelector(selector1, false);
assertEquals(selector1, conf.getNaturalSelectors(false).get(0));
conf.addNaturalSelector(selector2, true);
assertEquals(selector2, conf.getNaturalSelectors(true).get(0));
assertEquals(selector1, conf.getNaturalSelectors(false).get(0));
try {
assertEquals(null, conf.getNaturalSelectors(false).get(1));
fail();
} catch (Exception ex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testAddNaturalSelector_3()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new WeightedRouletteSelector();
conf.addNaturalSelector(selector, false);
conf.getNaturalSelectors(false).clear();
conf.addNaturalSelector(selector, false);
int i = conf.getNaturalSelectors(false).size();
assertEquals(1, i);
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testAddNaturalSelector_4()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new WeightedRouletteSelector();
conf.addNaturalSelector(selector, true);
conf.getNaturalSelectors(true).clear();
conf.addNaturalSelector(selector, true);
int i = conf.getNaturalSelectors(true).size();
assertEquals(1, i);
}
/**
* @author Klaus Meffert
*/
public void testSetFitnessFunction_0() {
Configuration conf = new Configuration();
try {
conf.setFitnessFunction(null);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetFitnessFunction_1()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new TestFitnessFunction());
try {
conf.setFitnessFunction(new StaticFitnessFunction(2.3d));
fail();
} catch (RuntimeException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetFitnessFunction_2()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new TestFitnessFunction());
Configuration conf2 = new Configuration();
try {
conf2.setFitnessFunction(new StaticFitnessFunction(2.3d));
fail();
} catch (RuntimeException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetFitnessFunction_3()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new StaticFitnessFunction(2.3d));
Configuration conf2 = new Configuration();
try {
conf2.setFitnessFunction(new StaticFitnessFunction(4.5d));
fail();
} catch (RuntimeException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetFitnessFunction_4()
throws Exception {
new Thread(new MyThread()).start();
new Thread(new MyThread()).start();
}
/**
* @author Klaus Meffert
*/
public void testSetFitnessEvaluator_0() {
Configuration conf = new Configuration();
try {
conf.setFitnessEvaluator(null);
fail();
} catch (IllegalStateException istex) {
; //this is OK
}
}
/**
* @author Klaus Meffert
*/
public void testSetPreserveFittestIndividual_0() {
Configuration conf = new Configuration();
assertFalse(conf.isPreserveFittestIndividual());
conf.setPreservFittestIndividual(true);
assertTrue(conf.isPreserveFittestIndividual());
conf.setPreservFittestIndividual(false);
assertFalse(conf.isPreserveFittestIndividual());
}
/**
* @author Klaus Meffert
*/
public void testGenerationNr_0() {
Configuration conf = new Configuration();
assertEquals(0, conf.getGenerationNr());
conf.incrementGenerationNr();
assertEquals(1, conf.getGenerationNr());
conf.incrementGenerationNr();
conf.incrementGenerationNr();
assertEquals(3, conf.getGenerationNr());
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testSetBulkFitnessFunction_0() {
Configuration conf = new Configuration();
try {
conf.setBulkFitnessFunction(null);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testSetBulkFitnessFunction_1()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new TestFitnessFunction());
try {
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testSetBulkFitnessFunction_2()
throws Exception {
Configuration conf = new Configuration();
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
try {
conf.setFitnessFunction(new TestFitnessFunction());
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testSetBulkFitnessFunction_3()
throws Exception {
Configuration conf = new Configuration();
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetBulkFitnessFunction_4()
throws Exception {
Configuration conf = new Configuration();
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
try {
conf.setBulkFitnessFunction(new TestBulkFitnessFunction2());
fail();
} catch (RuntimeException rex) {
; //this is OK
}
}
/**
* Setting the same bulk fitness function should be possible without error.
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetBulkFitnessFunction_5()
throws Exception {
Configuration conf = new Configuration();
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetBulkFitnessFunction_6()
throws Exception {
new Thread(new MyThreadBulk()).start();
new Thread(new MyThreadBulk()).start();
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testGetPopulationSize_0()
throws Exception {
Configuration conf = new Configuration();
assertEquals(0, conf.getPopulationSize());
final int SIZE = 22;
conf.setPopulationSize(SIZE);
assertEquals(SIZE, conf.getPopulationSize());
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testSetPopulationSize_1()
throws Exception {
Configuration conf = new Configuration();
try {
conf.setPopulationSize(0);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @author Klaus Meffert
*/
public void testSetRandomGenerator_0() {
Configuration conf = new Configuration();
try {
conf.setRandomGenerator(null);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @author Klaus Meffert
*/
public void testSetEventManager_0() {
Configuration conf = new Configuration();
try {
conf.setEventManager(null);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetEventManager_1()
throws Exception {
Configuration conf = new Configuration();
conf.setEventManager(new EventManager());
conf.setEventManager(new EventManager());
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetEventManager_2()
throws Exception {
Configuration conf = new Configuration();
conf.setEventManager(new EventManager());
try {
conf.setEventManager(new TestEventManager());
fail();
} catch (RuntimeException rex) {
; //this is OK
}
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSetEventManager_3()
throws Exception {
new Thread(new MyThreadEvent()).start();
new Thread(new MyThreadEvent()).start();
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testLock_0()
throws Exception {
Configuration conf = new Configuration();
try {
conf.lockSettings();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testLock_1()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new TestFitnessFunction());
Gene gene = new BooleanGene(conf);
Chromosome sample = new Chromosome(conf, gene, 55);
conf.setSampleChromosome(sample);
conf.addNaturalSelector(new WeightedRouletteSelector(conf), false);
conf.setRandomGenerator(new GaussianRandomGenerator());
conf.setEventManager(new EventManager());
conf.setFitnessEvaluator(new DefaultFitnessEvaluator());
conf.addGeneticOperator(new MutationOperator(conf));
conf.setPopulationSize(1);
conf.lockSettings();
assertEquals(true, conf.isLocked());
try {
conf.verifyChangesAllowed();
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testSetSampleChromosome_0()
throws Exception {
Configuration conf = new Configuration();
Gene gene = new BooleanGene(conf);
new Chromosome(conf, gene, 55);
try {
conf.setSampleChromosome(null);
fail();
} catch (InvalidConfigurationException invex) {
; //this is OK
}
}
/**
* @throws Exception
* @author Klaus Meffert
*/
public void testGetChromosomeSize_0()
throws Exception {
Configuration conf = new Configuration();
Gene gene = new BooleanGene(conf);
final int SIZE = 55;
Chromosome sample = new Chromosome(conf, gene, SIZE);
conf.setSampleChromosome(sample);
assertEquals(SIZE, conf.getChromosomeSize());
}
/**
*
* @throws Exception
*
* @author Klaus Meffert
* @since 2.4
*/
public void testToString_0()
throws Exception {
Configuration conf = new ConfigurationForTesting();
conf.addGeneticOperator(new MutationOperator(conf));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.addNaturalSelector(new WeightedRouletteSelector(conf), false);
conf.addNaturalSelector(new BestChromosomesSelector(conf), false);
String s = trimString(conf.toString());
String eventmgr = conf.getEventManager() != null ?
conf.getEventManager().getClass().getName() : conf.S_NONE;
String genops = "";
if (conf.getGeneticOperators().size() < 1) {
genops = conf.S_NONE;
}
else {
for (int i = 0; i < conf.getGeneticOperators().size(); i++) {
if (i > 0) {
genops += "; ";
}
genops += conf.getGeneticOperators().get(i).getClass().getName(); ;
}
}
// natural selectors (pre)
String natselsPre = "";
int natsize = conf.getNaturalSelectors(true).size();
if (natsize < 1) {
natselsPre = conf.S_NONE;
}
else {
for (int i = 0; i < natsize; i++) {
if (i > 0) {
natselsPre += "; ";
}
natselsPre += " " +
conf.getNaturalSelectors(true).get(i).getClass().getName();
}
}
// natural selectors (post)
String natselsPost = "";
natsize = conf.getNaturalSelectors(false).size();
if (natsize < 1) {
natselsPost = conf.S_NONE;
}
else {
for (int i = 0; i < natsize; i++) {
if (i > 0) {
natselsPost += "; ";
}
natselsPost += " " +
conf.getNaturalSelectors(false).get(i).getClass().getName();
}
}
assertEquals(trimString(conf.S_CONFIGURATION + ":"
+ conf.S_CONFIGURATION_NAME + ":"
+ conf.getName() + " "
+ conf.S_POPULATION_SIZE + ":"
+ conf.getPopulationSize() + " "
+ conf.S_MINPOPSIZE + ":"
+ conf.getMinimumPopSizePercent() + " "
+ conf.S_CHROMOSOME_SIZE + ":"
+ conf.getChromosomeSize() + " "
+ conf.S_SAMPLE_CHROM + ":"
+ conf.S_SIZE + ":"
+ conf.getSampleChromosome().size() + " "
+ conf.S_TOSTRING + ":"
+ conf.getSampleChromosome().toString() + " "
+ conf.S_RANDOM_GENERATOR + ":"
+ conf.getRandomGenerator().getClass().getName() +
" "
+ conf.S_EVENT_MANAGER + ":"
+ eventmgr + " "
+ conf.S_CONFIGURATION_HANDLER + ":"
+ conf.getConfigurationHandler().getName() + " "
+ conf.S_FITNESS_FUNCTION + ":"
+ conf.getFitnessFunction().getClass().getName() +
" "
+ conf.S_FITNESS_EVALUATOR + ":"
+ conf.getFitnessEvaluator().getClass().getName() +
" "
+ conf.S_GENETIC_OPERATORS + ":"
+ genops + " "
+ conf.S_NATURAL_SELECTORS + "(" + conf.S_PRE + ")" +
":"
+ natselsPre + " "
+ conf.S_NATURAL_SELECTORS + "(" + conf.S_POST +
")" + ":"
+ natselsPost + " "
// + conf.S_POPCONSTANT_SELECTOR + ":"
// + "null" + " "
), s);
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 2.6
*/
public void testToString_1()
throws Exception {
Configuration conf = new ConfigurationForTesting();
conf.getGeneticOperators().clear();
conf.getNaturalSelectors(false).clear();
conf.getNaturalSelectors(true).clear();
privateAccessor.setField(conf, "m_eventManager", null);
String s = trimString(conf.toString());
String eventmgr = conf.S_NONE;
String genops = conf.S_NONE;
// natural selectors (pre)
String natselsPre = conf.S_NONE;
// natural selectors (post)
String natselsPost = conf.S_NONE;
assertEquals(trimString(conf.S_CONFIGURATION + ":"
+ conf.S_CONFIGURATION_NAME + ":"
+ conf.getName() + " "
+ conf.S_POPULATION_SIZE + ":"
+ conf.getPopulationSize() + " "
+ conf.S_MINPOPSIZE + ":"
+ conf.getMinimumPopSizePercent() + " "
+ conf.S_CHROMOSOME_SIZE + ":"
+ conf.getChromosomeSize() + " "
+ conf.S_SAMPLE_CHROM + ":"
+ conf.S_SIZE + ":"
+ conf.getSampleChromosome().size() + " "
+ conf.S_TOSTRING + ":"
+ conf.getSampleChromosome().toString() + " "
+ conf.S_RANDOM_GENERATOR + ":"
+ conf.getRandomGenerator().getClass().getName() +
" "
+ conf.S_EVENT_MANAGER + ":"
+ eventmgr + " "
+ conf.S_CONFIGURATION_HANDLER + ":"
+ conf.getConfigurationHandler().getName() + " "
+ conf.S_FITNESS_FUNCTION + ":"
+ conf.getFitnessFunction().getClass().getName() +
" "
+ conf.S_FITNESS_EVALUATOR + ":"
+ conf.getFitnessEvaluator().getClass().getName() +
" "
+ conf.S_GENETIC_OPERATORS + ":"
+ genops + " "
+ conf.S_NATURAL_SELECTORS + "(" + conf.S_PRE + ")" +
":"
+ natselsPre + " "
+ conf.S_NATURAL_SELECTORS + "(" + conf.S_POST +
")" + ":"
+ natselsPost + " "
// + conf.S_POPCONSTANT_SELECTOR + ":"
// + "null" + " "
), s);
}
/**
*
* @param s1 String
* @return String
*
* @author Klaus Meffert
* @since 2.4
*/
private String trimString(String s1) {
String result = s1;
int index = 0;
while (index < result.length()) {
if (result.charAt(index) == '\n') {
result = result.substring(0, index) + result.substring(index + 1);
}
else {
if (result.charAt(index) == ':') {
if (index < result.length() - 1) {
if (result.charAt(index + 1) == ' ' ||
result.charAt(index + 1) == '\n') {
result = result.substring(0, index + 1) +
result.substring(index + 2);
}
else {
index++;
}
}
else {
index++;
}
}
else if (result.charAt(index) == ' ') {
if (index == 0) {
result = result.substring(1);
}
else if (index == result.length() - 1) {
result = result.substring(0, result.length() - 1);
}
else
if (result.charAt(index + 1) == ' ' ||
result.charAt(index + 1) == '\n') {
result = result.substring(0, index) + result.substring(index + 1);
}
else {
index++;
}
}
else {
index++;
}
}
}
return result;
}
/**
* @author Klaus Meffert
*/
public void testGetName_0() {
Configuration conf = new Configuration("tEstName");
assertEquals("tEstName", conf.getName());
}
/**
* @author Klaus Meffert
*/
public void testGetName_1() {
Configuration conf = new Configuration("tEstName");
conf.setName("HallI");
assertEquals("HallI", conf.getName());
conf.setName("HallA");
assertEquals("HallA", conf.getName());
}
/**
* @author Klaus Meffert
*/
public void testGetName_2() {
Configuration conf = new Configuration();
assertEquals(null, conf.getName());
}
/**
* @author Klaus Meffert
* @since 2.4
*/
public void testKeepPopSizeConstant_0() {
Configuration conf = new Configuration();
assertEquals(true, conf.isKeepPopulationSizeConstant());
conf.setKeepPopulationSizeConstant(false);
assertEquals(false, conf.isKeepPopulationSizeConstant());
conf.setKeepPopulationSizeConstant(true);
assertEquals(true, conf.isKeepPopulationSizeConstant());
conf.setKeepPopulationSizeConstant(false);
assertEquals(false, conf.isKeepPopulationSizeConstant());
assertEquals(JGAPFactory.class, conf.getJGAPFactory().getClass());
}
/**
* Construct with valid System property for JGAPFactory set.
*
* @author Klaus Meffert
* @since 2.6
*/
public void testConstruct_0() {
System.setProperty(Configuration.PROPERTY_JGAPFACTORY_CLASS,
"org.jgap.MyFactoryTest");
Configuration conf = new Configuration();
assertEquals(MyFactoryTest.class, conf.getJGAPFactory().getClass());
}
/**
* Construct with invalid System property for JGAPFactory set.
*
* @author Klaus Meffert
* @since 2.6
*/
public void testConstruct_1() {
System.setProperty(Configuration.PROPERTY_JGAPFACTORY_CLASS,
"org.jgap.myFactoryTest");
try {
new Configuration();
fail();
} catch (RuntimeException rex) {
; //this is OK
}
}
/**
* Construct with no System property for JGAPFactory set.
*
* @author Klaus Meffert
* @since 3.0
*/
public void testConstruct_2() {
System.setProperty(Configuration.PROPERTY_JGAPFACTORY_CLASS, "");
Configuration conf = new Configuration();
assertEquals(JGAPFactory.class, conf.getJGAPFactory().getClass());
}
/**
* Construct with explicit ID given.
*
* @author Klaus Meffert
* @since 3.2
*/
public void testConstruct_3() {
Configuration conf1 = new Configuration("id1","doesnotmatter");
conf1.setFitnessEvaluator(new DefaultFitnessEvaluator());
Configuration conf2 = new Configuration("id2","doesnotmatter");
conf2.setFitnessEvaluator(new DeltaFitnessEvaluator());
assertEquals("id1", conf1.getId());
assertEquals("id2", conf2.getId());
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testClone_0()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.setFitnessEvaluator(new DefaultFitnessEvaluator());
conf.addGeneticOperator(new MutationOperator(conf));
conf.addGeneticOperator(new CrossoverOperator(conf,2));
conf.setPopulationSize(1);
Configuration theClone = (Configuration)conf.clone();
assertEquals(conf, theClone);
assertEquals(2, theClone.getGeneticOperators().size());
assertEquals(MutationOperator.class,
theClone.getGeneticOperators().get(0).getClass());
assertEquals(CrossoverOperator.class,
theClone.getGeneticOperators().get(1).getClass());
}
/**
* Cloning multiple times in a row must be possible.
*
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testClone_1()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.setFitnessEvaluator(new DefaultFitnessEvaluator());
conf.addGeneticOperator(new MutationOperator(conf));
conf.setPopulationSize(1);
Configuration theClone1 = (Configuration)conf.clone();
Configuration theClone2 = (Configuration)conf.clone();
assertEquals(conf, theClone1);
assertEquals(conf, theClone2);
assertEquals(theClone1, theClone2);
}
/**
* Clone after settings locked.
*
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testClone_2()
throws Exception {
Configuration conf = new Configuration();
conf.setFitnessFunction(new StaticFitnessFunction(2));
Gene gene = new BooleanGene(conf);
conf.setSampleChromosome(new Chromosome(conf, gene, 5));
conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
conf.setRandomGenerator(new StockRandomGenerator());
conf.setEventManager(new EventManager());
conf.setFitnessEvaluator(new DefaultFitnessEvaluator());
conf.addGeneticOperator(new MutationOperator(conf));
conf.addGeneticOperator(new CrossoverOperator(conf,2));
conf.setPopulationSize(1);
conf.lockSettings();
Configuration theClone = (Configuration)conf.clone();
assertEquals(conf, theClone);
assertEquals(2, theClone.getGeneticOperators().size());
assertEquals(MutationOperator.class,
theClone.getGeneticOperators().get(0).getClass());
assertEquals(CrossoverOperator.class,
theClone.getGeneticOperators().get(1).getClass());
}
/**
* Exposes bug 1642378.
*
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testRemoveNaturalSelector_0()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new BestChromosomesSelector(conf);
conf.addNaturalSelector(selector, false);
conf.removeNaturalSelectors(false);
assertEquals(0, conf.getNaturalSelectors(false).size());
assertEquals(0, conf.getNaturalSelectorsSize(false));
}
/**
* Exposes bug 1642378.
*
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testRemoveNaturalSelector_1()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new BestChromosomesSelector(conf);
conf.addNaturalSelector(selector, !false);
conf.removeNaturalSelectors(!false);
assertEquals(0, conf.getNaturalSelectors(!false).size());
assertEquals(0, conf.getNaturalSelectorsSize(!false));
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testRemoveNaturalSelector_2()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new BestChromosomesSelector(conf);
conf.addNaturalSelector(selector, true);
conf.removeNaturalSelectors(false);
assertEquals(0, conf.getNaturalSelectors(false).size());
assertEquals(0, conf.getNaturalSelectorsSize(false));
assertEquals(1, conf.getNaturalSelectors(true).size());
assertEquals(1, conf.getNaturalSelectorsSize(true));
}
/**
*
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2.2
*/
public void testSetAlwaysCalculateFitness_0() throws Exception {
Configuration conf = new Configuration();
assertFalse(conf.isAlwaysCalculateFitness());
conf.setAlwaysCaculateFitness(true);
assertTrue(conf.isAlwaysCalculateFitness());
conf.setAlwaysCaculateFitness(true);
assertTrue(conf.isAlwaysCalculateFitness());
conf.setAlwaysCaculateFitness(false);
assertFalse(conf.isAlwaysCalculateFitness());
conf.setAlwaysCaculateFitness(true);
assertTrue(conf.isAlwaysCalculateFitness());
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.2
*/
public void testRemoveNaturalSelector_3()
throws Exception {
Configuration conf = new Configuration();
NaturalSelector selector = new BestChromosomesSelector(conf);
conf.addNaturalSelector(selector, false);
conf.removeNaturalSelectors(true);
assertEquals(0, conf.getNaturalSelectors(true).size());
assertEquals(0, conf.getNaturalSelectorsSize(true));
assertEquals(1, conf.getNaturalSelectors(false).size());
assertEquals(1, conf.getNaturalSelectorsSize(false));
}
}
class MyFactoryTest
extends JGAPFactory {
public MyFactoryTest() {
super(false);
}
}
class TestBulkFitnessFunction
extends BulkFitnessFunction {
public void evaluate(Population a_subjects) {
}
public int hashCode() {
return -199;
}
}
class TestBulkFitnessFunction2
extends BulkFitnessFunction {
public void evaluate(Population a_subjects) {
}
public int hashCode() {
return -297;
}
}
class MyThread
implements Runnable {
public void run() {
Configuration conf = new Configuration();
try {
conf.setFitnessFunction(new StaticFitnessFunction(2.3));
Thread.sleep(100);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
class MyThreadBulk
implements Runnable {
public void run() {
Configuration conf = new Configuration();
try {
conf.setBulkFitnessFunction(new TestBulkFitnessFunction());
Thread.sleep(100);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
class MyThreadEvent
implements Runnable {
public void run() {
Configuration conf = new Configuration();
try {
conf.setEventManager(new EventManager());
Thread.sleep(100);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
class TestEventManager
extends EventManager {
}