/*
* 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.gp.impl;
import junit.framework.*;
import org.jgap.*;
import org.jgap.impl.*;
import org.jgap.gp.terminal.*;
import org.jgap.gp.function.*;
import org.jgap.gp.impl.*;
import org.jgap.gp.*;
/**
* Tests the GPProgram class.
*
* @author Klaus Meffert
* @since 3.0
*/
public class GPProgramTest
extends GPTestCase {
/** String containing the CVS revision. Read out via reflection!*/
private final static String CVS_REVISION = "$Revision: 1.4 $";
public static Test suite() {
TestSuite suite = new TestSuite(GPProgramTest.class);
return suite;
}
public void setUp() {
super.setUp();
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testExecute_0()
throws Exception {
GPProgram prog = new GPProgram(m_gpconf, 3);
ProgramChromosome pc1 = new ProgramChromosome(m_gpconf, 50, prog);
pc1.getFunctions()[0] = CMD_SUB_V_V;
pc1.getFunctions()[1] = new StoreTerminal(m_gpconf, "mem0", //a
CommandGene.IntegerClass);
pc1.getFunctions()[2] = CMD_CONST1;
pc1.getFunctions()[3] = new StoreTerminal(m_gpconf, "mem1", //b
CommandGene.IntegerClass);
pc1.getFunctions()[4] = CMD_CONST1;
// pc1.getFunctions()[5] = new StoreTerminal(m_gpconf, "mem2",//x
// CommandGene.IntegerClass);
// pc1.getFunctions()[6] = CMD_CONST0;
pc1.redepth();
assertEquals(2, pc1.getDepth(0));
prog.setChromosome(0, pc1);
ProgramChromosome pc2 = new ProgramChromosome(m_gpconf, 50, prog);
Variable vx;
CommandGene[] funcSet2 = new CommandGene[] {
CMD_SUB_V_V_V, //0
CMD_FOR, //1
CMD_NOP, //2
vx = Variable.create(m_gpconf, "X", CommandGene.IntegerClass), //3
new Increment(m_gpconf, CommandGene.IntegerClass), //4
new AddAndStore(m_gpconf, CommandGene.IntegerClass, "mem2"), //5
new TransferMemory(m_gpconf, "mem2", "mem1"), //6
new TransferMemory(m_gpconf, "mem1", "mem0"), //7
new ReadTerminal(m_gpconf, CommandGene.IntegerClass, "mem0"), //8
new ReadTerminal(m_gpconf, CommandGene.IntegerClass, "mem1"), //9
};
rn.setNextIntSequence(new int[] {3, 0, 5, 8, 9, 7, 6});
pc2.growOrFullNode(0, 5, CommandGene.IntegerClass, 0, funcSet2, CMD_FOR, 0, true,
-1, false);
pc2.redepth();
prog.setChromosome(1, pc2);
ProgramChromosome pc3 = new ProgramChromosome(m_gpconf, 50, prog);
pc3.getFunctions()[0] = new ReadTerminal(m_gpconf, CommandGene.IntegerClass,
"mem2");
pc3.redepth();
prog.setChromosome(2, pc3);
Object[] noargs = new Object[0];
prog.execute_void(0, noargs);
vx.set(new Integer(2));
prog.execute_void(1, noargs);
int result = prog.execute_int(2, noargs);
assertEquals(3, result);
// 3
prog.execute_void(0, noargs);
vx.set(new Integer(3));
prog.execute_void(1, noargs);
result = prog.execute_int(2, noargs);
assertEquals(5, result);
// 4
prog.execute_void(0, noargs);
vx.set(new Integer(4));
prog.execute_void(1, noargs);
result = prog.execute_int(2, noargs);
assertEquals(8, result);
// 7
prog.execute_void(0, noargs);
vx.set(new Integer(7));
prog.execute_void(1, noargs);
result = prog.execute_int(2, noargs);
assertEquals(34, result);
}
/**
* @throws Exception
*
* @author Klaus Meffert
* @since 3.0
*/
public void testSerialize_0()
throws Exception {
GPProgram prog = new GPProgram(m_gpconf, 1);
ProgramChromosome pc = new ProgramChromosome(m_gpconf);
pc.setGene(0, new Add(m_gpconf, CommandGene.IntegerClass));
pc.setGene(1, new Variable(m_gpconf, "X", CommandGene.IntegerClass));
pc.setGene(2, new Variable(m_gpconf, "Y", CommandGene.IntegerClass));
pc.redepth();
prog.setChromosome(0, pc);
GPProgram prog2 = (GPProgram) doSerialize(prog);
assertEquals(prog, prog2);
}
}