/**
  * 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());
 }