blob: 69ccab4c345e196047e4acb40019ed106cfc33e9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.math3.genetics;
import org.junit.Assert;
import org.junit.Test;
public class OnePointCrossoverTest {
@Test
public void testCrossover() {
@SuppressWarnings("boxing")
Integer[] p1 = new Integer[] {1,0,1,0,0,1,0,1,1};
@SuppressWarnings("boxing")
Integer[] p2 = new Integer[] {0,1,1,0,1,0,1,1,1};
BinaryChromosome p1c = new DummyBinaryChromosome(p1);
BinaryChromosome p2c = new DummyBinaryChromosome(p2);
OnePointCrossover<Integer> opc = new OnePointCrossover<Integer>();
// how to test a stochastic method?
for (int i=0; i<20; i++) {
ChromosomePair pair = opc.crossover(p1c,p2c);
Integer[] c1 = new Integer[p1.length];
Integer[] c2 = new Integer[p2.length];
c1 = ((BinaryChromosome) pair.getFirst()).getRepresentation().toArray(c1);
c2 = ((BinaryChromosome) pair.getSecond()).getRepresentation().toArray(c2);
// first and last values will be the same
Assert.assertEquals(p1[0], c1[0]);
Assert.assertEquals(p2[0], c2[0]);
Assert.assertEquals(p1[p1.length-1], c1[c1.length-1]);
Assert.assertEquals(p2[p2.length-1], c2[c2.length-1]);
// moreover, in the above setting, the 2nd, 3rd and 7th values will be the same
Assert.assertEquals(p1[2], c1[2]);
Assert.assertEquals(p2[2], c2[2]);
Assert.assertEquals(p1[3], c1[3]);
Assert.assertEquals(p2[3], c2[3]);
Assert.assertEquals(p1[7], c1[7]);
Assert.assertEquals(p2[7], c2[7]);
}
}
}