JGAPTestCase.java :  » Development » jgap-3.4.4 » org » jgap » Java Open Source

Java Open Source » Development » jgap 3.4.4 
jgap 3.4.4 » org » jgap » JGAPTestCase.java
/*
 * 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 java.util.*;
import java.io.*;
import junit.framework.*;
import junitx.util.*;
import org.jgap.impl.*;

/**
 * Abstract test case for all JGAP test cases providing a common infrastructure.
 *
 * @author Klaus Meffert
 * @since 2.4
 */
public abstract class JGAPTestCase
    extends TestCase {
  /** String containing the CVS revision. Read out via reflection!*/
  private final static String CVS_REVISION = "$Revision: 1.21 $";

  //delta for distinguishing whether a value is to be interpreted as zero
  protected static final double DELTA = 0.0000001;

  public final static PrivateAccessor privateAccessor = null;
  public Configuration conf;

  public JGAPTestCase(String a_name) {
    super(a_name);
  }

  public JGAPTestCase() {
    super();
  }

  public void setUp() {
    Genotype.setStaticConfiguration(null);
    // reset property --> use JGAPFactory
    System.setProperty(Configuration.PROPERTY_JGAPFACTORY_CLASS, "");
    conf.resetProperty(conf.PROPERTY_FITEVAL_INST);
    conf.resetProperty(conf.PROPERTY_EVENT_MGR_INST);
    conf = new DefaultConfiguration();
  }

  /**
   *
   * @param a_list1 first list of chromosomes
   * @param a_list2 second list of chromosomes
   * @return true lists of chromosomes are equal
   *
   * @author Klaus Meffert
   */
  public static boolean isChromosomesEqual(IChromosome[] a_list1,
                                           IChromosome[] a_list2) {
    if (a_list1 == null) {
      return (a_list2 == null);
    }
    else if (a_list2 == null) {
      return false;
    }
    else {
      if (a_list1.length != a_list2.length) {
        return false;
      }
      else {
        for (int i = 0; i < a_list1.length; i++) {
          IChromosome c1 = (IChromosome) a_list1[i];
          IChromosome c2 = (IChromosome) a_list2[i];
          if (!c1.equals(c2)) {
            return false;
          }
        }
        return true;
      }
    }
  }

  public static void assertEqualsMap(Map a_map1, Map a_map2) {
    /**@todo implement*/
  }

  public class TestFitnessFunction
      extends FitnessFunction {
    /**
     * @param a_subject Chromosome
     * @return double
     * @since 2.0
     */
    protected double evaluate(IChromosome a_subject) {
      //result does not matter here
      return 1.0000000d;
    }
  }
  public static void assertInList(final Map a_list, Object a_object) {
    if (a_list.containsKey(a_object)) {
      a_list.remove(a_object);
    }
    else {
      // Because only source code is browsed (also non-compilable code!),
      // there is no disctinction between class java.lang.X and class X
      if (a_list.containsKey("java.lang." + a_object)) {
        a_list.remove("java.lang." + a_object);
      }
      else {
        fail("Object " + a_object + " not in list!");
      }
    }
  }

  public static void assertInList(final List a_list, Object a_object) {
    if (a_list.contains(a_object)) {
      a_list.remove(a_object);
    }
    else {
      // Because only source code is browsed (also non-compilable code!),
      // there is no disctinction between class java.lang.X and class X
      if (a_list.contains("java.lang." + a_object)) {
        a_list.remove("java.lang." + a_object);
      }
      else {
        fail("Object " + a_object + " not in list!");
      }
    }
  }

  /**
   * @param a_obj object to verify
   * @return true: object implements serializable
   *
   * @author Klaus Meffert
   * @since 2.6
   */
  public boolean isSerializable(Object a_obj) {
    return Serializable.class.isInstance(a_obj);
  }

  /**
   *
   * @param a_obj object to serialize, then deserialize
   * @return deserialized object that has previously been serialized
   * @throws Exception
   *
   * @author Klaus Meffert
   * @since 2.6
   */
  public Object doSerialize(Object a_obj)
      throws Exception {
    // Serialize object to a file.
    // ---------------------------
    File f = File.createTempFile("object", "ser");
    OutputStream os = new FileOutputStream(f);
    ObjectOutputStream oos = new ObjectOutputStream(os);
    oos.writeObject(a_obj);
    oos.flush();
    oos.close();
    InputStream oi = new FileInputStream(f);
    ObjectInputStream ois = new ObjectInputStream(oi);
    Object result = ois.readObject();
    ois.close();
    return result;
  }

  /**
   * Retrieves a nested (private) field, that is field2 from "field1.field2".
   *
   * @param a_instance the instance the parent field is located in
   * @param a_parentFieldName the name of the parent field (case sensitive!)
   * @param a_childFieldName the name of the child field (case sensitive!)
   * @throws NoSuchFieldException
   * @return the value of the child field
   *
   * @author Klaus Meffert
   * @since 2.6
   */
  public Object getNestedField(Object a_instance, String a_parentFieldName,
                               String a_childFieldName)
      throws NoSuchFieldException {
    Object parentField = privateAccessor.getField(a_instance, a_parentFieldName);
    Object childField = privateAccessor.getField(parentField, a_childFieldName);
    return childField;
  }

  /**
   * Sets a nested (private) field, that is field2 from "field1.field2".
   *
   * @param a_instance the instance the parent field is located in
   * @param a_parentFieldName the name of the parent field (case sensitive!)
   * @param a_childFieldName the name of the child field (case sensitive!)
   * @param a_value the value to set the child field to
   * @throws NoSuchFieldException
   *
   * @author Klaus Meffert
   * @since 2.6
   */
  public void setNestedField(Object a_instance, String a_parentFieldName,
                               String a_childFieldName, Object a_value)
      throws NoSuchFieldException {
    Object parentField = privateAccessor.getField(a_instance, a_parentFieldName);
    privateAccessor.setField(parentField, a_childFieldName, a_value);
  }

  /**
   * Are all chromosomes in the given population unique?
   *
   * @param a_pop the population to verify
   * @return true if all chromosomes in the population are unique
   *
   * @author Klaus Meffert
   * @since 3.3.1
   */
  public boolean uniqueChromosomes(Population a_pop) {
    // Check that all chromosomes are unique
    for(int i=0;i<a_pop.size()-1;i++) {
      IChromosome c = a_pop.getChromosome(i);
      for(int j=i+1;j<a_pop.size();j++) {
        IChromosome c2 =a_pop.getChromosome(j);
        if (c == c2) {
          return false;
        }
      }
    }
    return true;
  }

  /**
   * Helper for assertion comparing two doubles with a JGAP-wide delta.
   *
   * @param a_one first double to compare
   * @param a_two second double to compare
   *
   * @author Klaus Meffert
   * @since 3.3.2
   */
  public void assertEquals(double a_one, double a_two) {
    assertEquals(a_one, a_two, DELTA);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.