001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.math.genetics;
018
019 import static org.junit.Assert.*;
020
021 import java.util.ArrayList;
022 import java.util.List;
023
024 import org.junit.Test;
025
026 public class ChromosomeTest {
027
028 @Test
029 public void testCompareTo() {
030 Chromosome c1 = new Chromosome() {
031 public double fitness() {
032 return 0;
033 }
034 };
035 Chromosome c2 = new Chromosome() {
036 public double fitness() {
037 return 10;
038 }
039 };
040 Chromosome c3 = new Chromosome() {
041 public double fitness() {
042 return 10;
043 }
044 };
045
046 assertTrue(c1.compareTo(c2) < 0);
047 assertTrue(c2.compareTo(c1) > 0);
048 assertEquals(0,c3.compareTo(c2));
049 assertEquals(0,c2.compareTo(c3));
050 }
051
052 private abstract static class DummyChromosome extends Chromosome {
053 private final int repr;
054
055 public DummyChromosome(final int repr) {
056 this.repr = repr;
057 }
058 @Override
059 protected boolean isSame(Chromosome another) {
060 return ((DummyChromosome) another).repr == repr;
061 }
062 }
063
064 @Test
065 public void testFindSameChromosome() {
066 Chromosome c1 = new DummyChromosome(1) {
067 public double fitness() {
068 return 1;
069 }
070 };
071 Chromosome c2 = new DummyChromosome(2) {
072 public double fitness() {
073 return 2;
074 }
075 };
076 Chromosome c3 = new DummyChromosome(3) {
077 public double fitness() {
078 return 3;
079 }
080 };
081 Chromosome c4 = new DummyChromosome(1) {
082 public double fitness() {
083 return 5;
084 }
085 };
086 Chromosome c5 = new DummyChromosome(15) {
087 public double fitness() {
088 return 15;
089 }
090 };
091
092 List<Chromosome> popChr = new ArrayList<Chromosome>();
093 popChr.add(c1);
094 popChr.add(c2);
095 popChr.add(c3);
096 Population pop = new ListPopulation(popChr,3) {
097 public Population nextGeneration() {
098 // not important
099 return null;
100 }
101 };
102
103 assertNull(c5.findSameChromosome(pop));
104 assertEquals(c1, c4.findSameChromosome(pop));
105
106 c4.searchForFitnessUpdate(pop);
107 assertEquals(1, c4.getFitness(),0);
108 }
109
110 }
111