[Avida-SVN] r1422 - in development: . source/main tests tests/_testrunner tests/default_classic_100u tests/default_classic_100u/config tests/default_classic_100u/expected tests/default_classic_100u/expected/data tests/default_classic_100u/expected/data/archive tests/default_transsmt_100u tests/default_transsmt_100u/config tests/default_transsmt_100u/expected tests/default_transsmt_100u/expected/data tests/default_transsmt_100u/expected/data/archive

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Thu Mar 22 19:54:38 PDT 2007


Author: brysonda
Date: 2007-03-22 22:54:38 -0400 (Thu, 22 Mar 2007)
New Revision: 1422

Added:
   development/run_tests
   development/tests/
   development/tests/_testrunner/
   development/tests/_testrunner/testrunner.cfg
   development/tests/_testrunner/testrunner.py
   development/tests/default_classic_100u/
   development/tests/default_classic_100u/config/
   development/tests/default_classic_100u/config/avida.cfg
   development/tests/default_classic_100u/config/default-classic.org
   development/tests/default_classic_100u/config/environment.cfg
   development/tests/default_classic_100u/config/events.cfg
   development/tests/default_classic_100u/config/instset-classic.cfg
   development/tests/default_classic_100u/expected/
   development/tests/default_classic_100u/expected/data/
   development/tests/default_classic_100u/expected/data/archive/
   development/tests/default_classic_100u/expected/data/archive/100-aaaaa.org
   development/tests/default_classic_100u/expected/data/average.dat
   development/tests/default_classic_100u/expected/data/count.dat
   development/tests/default_classic_100u/expected/data/detail-100.pop
   development/tests/default_classic_100u/expected/data/dominant.dat
   development/tests/default_classic_100u/expected/data/historic-100.pop
   development/tests/default_classic_100u/expected/data/resource.dat
   development/tests/default_classic_100u/expected/data/stats.dat
   development/tests/default_classic_100u/expected/data/tasks.dat
   development/tests/default_classic_100u/expected/data/tasks_exe.dat
   development/tests/default_classic_100u/expected/data/tasks_quality.dat
   development/tests/default_classic_100u/expected/data/time.dat
   development/tests/default_classic_100u/test_list
   development/tests/default_transsmt_100u/
   development/tests/default_transsmt_100u/config/
   development/tests/default_transsmt_100u/config/avida.cfg
   development/tests/default_transsmt_100u/config/default-transsmt.org
   development/tests/default_transsmt_100u/config/environment.cfg
   development/tests/default_transsmt_100u/config/events.cfg
   development/tests/default_transsmt_100u/config/instset-transsmt.cfg
   development/tests/default_transsmt_100u/expected/
   development/tests/default_transsmt_100u/expected/data/
   development/tests/default_transsmt_100u/expected/data/archive/
   development/tests/default_transsmt_100u/expected/data/archive/100-aaaaa.org
   development/tests/default_transsmt_100u/expected/data/average.dat
   development/tests/default_transsmt_100u/expected/data/count.dat
   development/tests/default_transsmt_100u/expected/data/detail-100.pop
   development/tests/default_transsmt_100u/expected/data/dominant.dat
   development/tests/default_transsmt_100u/expected/data/historic-100.pop
   development/tests/default_transsmt_100u/expected/data/resource.dat
   development/tests/default_transsmt_100u/expected/data/stats.dat
   development/tests/default_transsmt_100u/expected/data/tasks.dat
   development/tests/default_transsmt_100u/expected/data/tasks_exe.dat
   development/tests/default_transsmt_100u/expected/data/tasks_quality.dat
   development/tests/default_transsmt_100u/expected/data/time.dat
   development/tests/default_transsmt_100u/test_list
Modified:
   development/source/main/cInstruction.cc
   development/source/main/cStats.cc
Log:
Add intial setup of TestRunner v1.0 into development branch.  Also add two basic consistency tests, 100 update fresh start runs for 'classic' and 'transsmt' hardware types.

Added: development/run_tests
===================================================================
--- development/run_tests	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/run_tests	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+python tests/_testrunner/testrunner.py $@ ---testrunner-name=./run_tests
+


Property changes on: development/run_tests
___________________________________________________________________
Name: svn:executable
   + *

Modified: development/source/main/cInstruction.cc
===================================================================
--- development/source/main/cInstruction.cc	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/source/main/cInstruction.cc	2007-03-23 02:54:38 UTC (rev 1422)
@@ -51,4 +51,4 @@
   else if (symbol >= '0' && symbol <= '9') retval = symbol - '0' + 52;
   else retval = 254;
 	return retval;
-}
\ No newline at end of file
+}

Modified: development/source/main/cStats.cc
===================================================================
--- development/source/main/cStats.cc	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/source/main/cStats.cc	2007-03-23 02:54:38 UTC (rev 1422)
@@ -47,11 +47,11 @@
   , avida_time(0)
   , data_manager(this, "population_data")
   , rave_true_replication_rate( 500 )
-  , entropy(0)
-  , species_entropy(0)
-  , energy(0)
-  , dom_fidelity(0)
-  , ave_fidelity(0)
+  , entropy(0.0)
+  , species_entropy(0.0)
+  , energy(0.0)
+  , dom_fidelity(0.0)
+  , ave_fidelity(0.0)
   , max_viable_fitness(0)
   , dom_genotype(NULL)
   , dom_merit(0)

Added: development/tests/_testrunner/testrunner.cfg
===================================================================
--- development/tests/_testrunner/testrunner.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/_testrunner/testrunner.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,14 @@
+[testrunner]
+builddir = cbuild
+mode = local
+svn = svn
+svnversion = svnversion
+svnmetadir = .svn
+testdir = tests
+
+[main]
+app = %(builddir)s/work/avida
+
+[performance]
+margin = .05
+repeat = 5

Added: development/tests/_testrunner/testrunner.py
===================================================================
--- development/tests/_testrunner/testrunner.py	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/_testrunner/testrunner.py	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,1005 @@
+#!/usr/bin/python
+
+# Copyright 2007 David Michael Bryson, all rights reserved.
+# http://www.programerror.com/
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above
+#     copyright notice, this list of conditions and the following
+#     disclaimer in the documentation and/or other materials provided
+#     with the distribution.
+# 3.  Neither the name of David Michael Bryson, nor the names of
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY DAVID MICHAEL BRYSON AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
+# MICHAEL BRYSON OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+import ConfigParser
+import difflib
+import dircache
+import getopt
+import os
+import popen2
+import shutil
+import string
+import sys
+import tempfile
+import threading
+import time
+import xml.dom.minidom
+
+
+# This file has been formatted for editors/terminals 125 characters wide
+
+
+# Global Constants
+# ---------------------------------------------------------------------------------------------------------------------------
+TESTRUNNER_VERSION = "1.0"
+TESTRUNNER_COPYRIGHT = "2007"
+
+TRUE_STRINGS = ("y","Y","yes","Yes","true","True","1")
+RESAVAIL = True
+
+# -- Directory/Filename Definitions
+CONFIGDIR = "config"
+EXPECTDIR = "expected"
+PERFDIR = "perf~"  # subversion, by default, ignores files/dirs with ~ at the end
+TEST_LIST = "test_list"
+PERF_BASE = "baseline"
+
+
+# Global Variables
+# ---------------------------------------------------------------------------------------------------------------------------
+cfg = None      # ConfigParser.ConfigParser
+settings = {}   # {string:string}
+tmpdir = None   # string
+
+
+
+# Conditional Imports
+# ---------------------------------------------------------------------------------------------------------------------------
+try:
+  import resource
+except ImportError:
+  RESAVAIL = False
+
+
+
+# Global Helper Functions
+# ---------------------------------------------------------------------------------------------------------------------------
+
+# void usage() {
+def usage():
+  global settings
+  usagestr = """
+Usage: %(_testrunner_name)s [options] [testname ...]
+
+  Runs the specified tests.  If no tests are specified all available tests will
+  be run and new expected results generated, where applicable.
+
+  Options:
+    -h | --help
+      Display this message
+    
+    --builddir=dir [%(builddir)s]
+      Set the path to the build directory.
+    
+    --disable-svn
+      Disable all Subversion usage.
+      
+    -f | --force-perf
+      Force active tests to be treated as peformance tests, regardless of
+      individual test configuration.
+    
+    -j number [%(cpus)d]
+      Set the number of concurrent tests to run. i.e. - the number of CPUs
+      that are availabile.
+      
+    -l | --list-tests
+      List all available tests and exits.  Tests that will require new
+      expected results will have an asterisk preceeding the name.
+      
+    --long-tests
+      Run tests that have been marked as 'long' running.
+    
+    --mode=option [%(mode)s]
+      Set the test runner mode.  Options are 'local', 'master', and 'slave'.
+      
+      Local mode generates expected results and adds them to the repository,
+      if subversion metadata has been found.  Master mode does the same as
+      local, but also commits the generated expected results automatically.
+      Slave mode disables expected results generation completely.
+      
+    -p | --run-perf-tests
+      Run available performance tests.
+      
+    --reset-perf-base
+      Reset performance test baseline results.  Old baseline results are
+      saved in the 'perf' directory.
+
+    --skip-tests
+      Do not run tests. Only generate new results, where applicable.
+
+    -s path | --svn=path [%(svn)s]
+      Set the path to the Subversion command line utility.
+
+    --svnversion=path [%(svnversion)s]
+      Set the path to the Subversion 'svnversion' command line utility.
+    
+    --svnmetadir=dir [%(svnmetadir)s]
+      Set the name of the Subversion metadata directory.
+    
+    --testdir=dir [%(testdir)s]
+      Set the path to the directory containing tests.
+    
+    -v | --verbose
+      Enable verbose output, showing all test output.
+    
+    --version
+      Show version information.
+""" % settings
+  print usagestr
+# } // End of usage()
+
+
+
+# void version() {
+def version():
+  global TESTRUNNER_VERSION, TESTRUNNER_COPYRIGHT
+  versionstr = """
+TestRunner v%s
+Copyright %s David Michael Bryson, all rights reserved.
+
+This software is open source, subject to certain conditions.
+See the supplied license for details.
+
+http://www.programerror.com
+""" % (TESTRUNNER_VERSION, TESTRUNNER_COPYRIGHT)
+  print versionstr
+# } // End of version()
+
+
+
+# // Calculate the median of a sequence
+# int med(int[] seq) {
+def med(seq):
+  seq.sort()
+  idx = len(seq) / 2
+  if len(seq) % 2 == 1: return seq[idx]
+  else: return (seq[idx] + seq[idx - 1]) / 2
+# } // End of med()
+    
+
+
+# Main Test Class - does the actual work for performing individual tests and reporting results
+# ---------------------------------------------------------------------------------------------------------------------------
+
+# class cTest {
+class cTest:
+  NOTFOUND = "file not found"
+  DONOTMATCH = "content does not match"
+    
+
+  # cTest::cTest(string name, string tdir) {
+  def __init__(self, name, tdir):
+    global settings, TRUE_STRINGS, RESAVAIL, EXPECTDIR, PERFDIR, TEST_LIST, PERF_BASE
+    self.name = name
+    self.tdir = tdir
+    
+    if os.path.exists(os.path.join(tdir, settings["svnmetadir"])) and not settings.has_key("disable-svn"): self.usesvn = True
+    else: self.usesvn = False
+
+    if settings.has_key("skip-tests"): self.skip = True
+    else: self.skip = False
+    
+    self.cfg = ConfigParser.ConfigParser(settings)
+    self.cfg.read([os.path.join(tdir, TEST_LIST)])
+    
+    expectdir = os.path.join(tdir, EXPECTDIR)
+    if os.path.exists(expectdir) and os.path.isdir(expectdir): self.has_expected = True
+    else: self.has_expected = False
+    
+    perfdir = os.path.join(tdir, PERFDIR)
+    if os.path.exists(perfdir) and os.path.isdir(perfdir) and os.path.isfile(os.path.join(perfdir, PERF_BASE)):
+      self.has_perf_base = True
+    else: self.has_perf_base = False
+    
+    if self.has_perf_base and settings.has_key("reset-perf-base"):
+      try:
+        rev = "exported"
+        if self.usesvn:
+          sverp = os.popen("cd %s; %s" % (self.tdir, settings["svnversion"]))
+          rev = sverp.readline().strip()
+          sverp.close()
+          if rev == "": rev = "exported"
+        
+        oname = "perf-%s-reset-%s" % (time.strftime("%Y-%m-%d-%H.%M.%S"), rev)
+        
+        shutil.move(os.path.join(perfdir, PERF_BASE), os.path.join(perfdir, oname))
+        print "%s : performance baseline reset" % name
+      except (IOError, OSError, shutil.Error): pass
+
+    
+    self.app = self.getSetting("main", "app")
+    self.args = self.getConfig("main", "args", "")
+    
+    if self.getConfig("consistency", "enabled", "yes") in TRUE_STRINGS: self.consistency_enabled = True
+    else: self.consistency_enabled = False
+    if self.getConfig("performance", "enabled", "no") in TRUE_STRINGS and RESAVAIL: self.performance_enabled = True
+    else: self.performance_enabled = False
+    
+    self.success = True
+    self.result = "passed"
+    self.exitcode = 0
+    self.errors = []
+    
+    self.psuccess = True
+    self.presult = "passed"
+  # } // End of cTest::cTest()
+    
+    
+
+  # string cTest::getConfig(string sect, string opt, string default)
+  def getConfig(self, sect, opt, default):
+    global settings
+    try:
+      return self.cfg.get(sect, opt, False, settings)
+    except:
+      return default
+  # } // End of cTest::getConfig()
+  
+
+
+  # string cTest::getSetting(string sect, string opt) {
+  def getSetting(self, sect, opt):
+    global settings
+    try:
+      return self.cfg.get(sect, opt, False, settings)
+    except:
+      return settings[opt]
+  # } // End of cTest::getSetting()
+  
+  
+  
+  # bool cTest::isConsistencyTest() {
+  def isConsistencyTest(self): return self.consistency_enabled
+  # } // End of isConsistencyTest()
+
+  # bool cTest::isPerformanceTest() {
+  def isPerformanceTest(self): return self.performance_enabled
+  # } // End of isPerformanceTest()
+  
+  
+
+  # void cTest::runConsistencyTest() {
+  def runConsistencyTest(self, dolongtest):
+    global settings, tmpdir, CONFIGDIR, EXPECTDIR
+    
+    if not self.isConsistencyTest():
+      self.result = "skipped (not a consistency test)"
+      return
+    
+    # If no expected results exist and in slave mode, or in master mode and
+    # subversion usage has been disabled then skip execution
+    if not self.has_expected and (settings["mode"] == "slave" or \
+      (settings["mode"] == "master" and not self.usesvn)):
+      self.result = "skipped (no expected results)"
+      return
+      
+    if self.has_expected and self.skip:
+      self.result = "skipped"
+      return
+    
+    if self.getConfig("consistency", "long", "no") in TRUE_STRINGS and not dolongtest:
+      self.result = "skipped (long)"
+      return
+
+    confdir = os.path.join(self.tdir, CONFIGDIR)
+    rundir = os.path.join(tmpdir, self.name)
+    expectdir = os.path.join(self.tdir, EXPECTDIR)
+    svnmetadir = settings["svnmetadir"]
+    
+    # Create test directory and populate with config
+    try:
+      shutil.copytree(confdir, rundir)
+    except (IOError, OSError):
+      self.success = False
+      return
+      
+    
+    # Remove copied svn metadata directories
+    for root, dirs, files in os.walk(rundir):
+      if svnmetadir in dirs: dirs.remove(svnmetadir)
+      try:
+        shutil.rmtree(os.path.join(root, svnmetadir))
+      except (IOError, OSError): pass
+          
+
+    # Run test app, capturing output and exitcode
+    p = popen2.Popen4("cd %s; %s %s" % (rundir, self.app, self.args))
+    
+    # Process output from app
+    # Note: must at least swallow app output so that the process output buffer does not fill and block execution
+    if settings.has_key("verbose"): print
+    for line in p.fromchild:
+      if settings.has_key("verbose"):
+        sys.stdout.write("%s output: %s" % (self.name, line))
+        sys.stdout.flush()
+    
+    self.exitcode = p.wait()
+    
+
+    # Non-zero exit code indicates failure, set so and return
+    if self.exitcode != 0:
+      self.success = False
+      try:
+        shutil.rmtree(rundir, True) # Clean up test directory
+      except (IOError, OSError): pass
+      return
+      
+
+    # Build dictionary of config structure
+    confstruct = {}
+    for root, dirs, files in os.walk(confdir):
+      if svnmetadir in dirs: dirs.remove(svnmetadir)
+      for file in files:
+        path = os.path.abspath(os.path.join(root, file))
+        key = path[len(confdir) + 1:] # remove confdir from path
+        confstruct[key] = path
+        
+      
+    # If no expected results exist, defer processing of new expected results to results phase
+    if not self.has_expected: 
+      self.confstruct = confstruct
+      return
+
+    # Build dicitonary of expected structure
+    expectstruct = {}
+    for root, dirs, files in os.walk(expectdir):
+      if svnmetadir in dirs: dirs.remove(svnmetadir)
+      for file in files:
+        path = os.path.abspath(os.path.join(root, file))
+        key = path[len(expectdir) + 1:] # remove confdir from path
+        expectstruct[key] = [path, False, cTest.NOTFOUND]
+
+    # Traverse results, comparing with expected
+    for root, dirs, files in os.walk(rundir):
+      for file in files:
+        path = os.path.abspath(os.path.join(root, file))
+        key = path[len(rundir) + 1:] # remove confdir from path
+        if expectstruct.has_key(key):
+          # string[] getStippedLines(string filename) {
+          def getStrippedLines(filename):
+            fp = open(filename, "U")
+            filelines = fp.readlines()
+            fp.close()
+            
+            retlines = []
+            for line in filelines: 
+              line = string.lstrip(line)
+              if len(line) != 0 and line[0] != "#": retlines.append(line)
+            return retlines
+          # } // End of getStrippedLines()
+          
+          # Generate the diff between the two files, ignoring comments and blank lines
+          differ = difflib.Differ()
+          elines = getStrippedLines(path)
+          tlines = getStrippedLines(expectstruct[key][0])
+          diff = list(differ.compare(elines, tlines))
+
+          match = True
+          for line in diff:
+            if line[0] != ' ':
+              expectstruct[key][2] = cTest.DONOTMATCH
+              match = False
+              break
+          
+          expectstruct[key][1] = match
+    
+    for key in expectstruct.keys():
+      entry = expectstruct[key]
+      if not entry[1]:
+        self.errors.append("%s : %s" % (key, entry[2]))
+        self.success = False
+
+    # Clean up test directory
+    try:
+      shutil.rmtree(rundir, True)
+    except (IOError, OSError): pass
+  # } // End of cTest::runConsistencyTest()
+
+
+
+  # void cTest::runPerformanceTest() {
+  def runPerformanceTest(self, dolongtest):
+    global settings, tmpdir, CONFIGDIR, PERFDIR, TRUE_STRINGS, PERF_BASE
+    
+    if self.has_perf_base and self.skip:
+      self.presult = "skipped"
+      return
+      
+    if self.getConfig("performance", "long", "no") in TRUE_STRINGS and not dolongtest:
+      self.presult = "skipped (long)"
+      return
+    
+    confdir = os.path.join(self.tdir, CONFIGDIR)
+    rundir = os.path.join(tmpdir, self.name)
+    perfdir = os.path.join(self.tdir, PERFDIR)
+    svnmetadir = settings["svnmetadir"]
+    
+    # Create test directory and populate with config
+    try:
+      shutil.copytree(confdir, rundir)
+    except (IOError, OSError):
+      self.psuccess = False
+      self.presult = "error occured creating run directory"
+      return
+      
+    
+    # Remove copied svn metadata directories
+    for root, dirs, files in os.walk(rundir):
+      if svnmetadir in dirs: dirs.remove(svnmetadir)
+      try:
+        shutil.rmtree(os.path.join(root, svnmetadir))
+      except (IOError, OSError): pass
+    
+    
+    # Run warm up
+    p = popen2.Popen4("cd %s; %s %s" % (rundir, self.app, self.args))
+    
+    # Process output from app
+    # Note: must at least swallow app output so that the process output buffer does not fill and block execution
+    if settings.has_key("verbose"): print
+    for line in p.fromchild:
+      if settings.has_key("verbose"):
+        sys.stdout.write("%s output: %s" % (self.name, line))
+        sys.stdout.flush()
+    
+    exitcode = p.wait()
+
+    # Non-zero exit code indicates failure, set so and return
+    if exitcode != 0:
+      try:
+        shutil.rmtree(rundir, True) # Clean up test directory
+      except (IOError, OSError): pass
+      self.psuccess = False
+      self.presult = "test app returned non-zero exit code"
+      return
+    
+    
+    # Run test X times, take min value
+    times = []
+    for i in range(settings["perf_repeat"]):
+      res_start = resource.getrusage(resource.RUSAGE_CHILDREN)
+      
+      # Run test app, capturing output and exitcode
+      p = popen2.Popen4("cd %s; %s %s" % (rundir, self.app, self.args))
+      
+    # Process output from app
+    # Note: must at least swallow app output so that the process output buffer does not fill and block execution
+    if settings.has_key("verbose"): print
+    for line in p.fromchild:
+      if settings.has_key("verbose"):
+        sys.stdout.write("%s output: %s" % (self.name, line))
+        sys.stdout.flush()
+      
+      exitcode = p.wait()
+      res_end = resource.getrusage(resource.RUSAGE_CHILDREN)
+  
+      # Non-zero exit code indicates failure, set so and return
+      if exitcode != 0:
+        try:
+          shutil.rmtree(rundir, True) # Clean up test directory
+        except (IOError, OSError): pass
+        self.psuccess = False
+        self.presult = "test app returned non-zero exit code"
+        return
+      
+      times.append(res_end.ru_utime - res_start.ru_utime)
+      
+    
+    # Load baseline results
+    baseline = 0.0
+    basepath = os.path.join(perfdir, PERF_BASE)
+    if self.has_perf_base:
+      try:
+        fp = open(basepath, "r")
+        line = fp.readline()
+        baseline = float(line.split(',')[0].strip())
+        fp.close()
+      except (IOError):
+        self.has_perf_base = False
+    
+
+    tmin = min(times)
+    tmax = max(times)
+    tave = sum(times) / len(times)
+    tmed = med(times)
+    
+    # If no baseline results exist, write out results
+    if not self.has_perf_base:
+      try:
+        if not os.path.exists(perfdir):
+          os.mkdir(perfdir)
+        if not os.path.isdir(perfdir):
+          try:
+            shutil.rmtree(rundir, True) # Clean up test directory
+          except (IOError, OSError): pass
+          self.psuccess = False
+          self.presult = "unable to write out baseline, file exists"
+          return
+          
+        fp = open(basepath, "w")
+        fp.write("%f,%f,%f,%f\n" % (tmin, tmax, tave, tmed))
+        fp.flush()
+        fp.close()
+      except (IOError):
+        try:
+          shutil.rmtree(rundir, True) # Clean up test directory
+        except (IOError, OSError): pass
+        self.psuccess = False
+        self.presult = "error occurred writing baseline results"
+        return
+
+      try:
+        shutil.rmtree(rundir, True) # Clean up test directory
+      except (IOError, OSError): pass
+      self.presult = "new baseline - min: %3.4f max: %3.4f ave: %3.4f med: %3.4f" % (tmin, tmax, tave, tmed)
+      return
+      
+    # Compare results with baseline
+    margin = settings["perf_margin"] * baseline
+    umargin = baseline + margin
+    lmargin = baseline - margin
+    
+    if tmin > umargin:
+      self.psuccess = False
+      self.presult = "failed - base: %3.4f test: %3.4f" % (baseline, tmin)
+    elif tmin < lmargin:
+      # new baseline, move old baseline and write out new results
+      try:
+        rev = "exported"
+        if self.usesvn:
+          sverp = os.popen("cd %s; %s" % (self.tdir, settings["svnversion"]))
+          rev = sverp.readline().strip()
+          sverp.close()
+          if rev == "": rev = "exported"
+        
+        oname = "perf-%s-prev-%s" % (time.strftime("%Y-%m-%d-%H.%M.%S"), rev)
+        
+        shutil.move(basepath, os.path.join(perfdir, oname))
+        
+        fp = open(basepath, "w")
+        fp.write("%f,%f,%f,%f\n" % (tmin, tmax, tave, tmed))
+        fp.flush()
+        fp.close()
+      except (IOError, OSError, shutil.Error):
+        try:
+          shutil.rmtree(rundir, True) # Clean up test directory
+        except (IOError, OSError): pass
+        self.presult = "exceeded - base: %3.4f test: %3.4f - failed to update" % (baseline, tmin)
+        return
+
+      self.presult = "exceeded - base: %3.4f test: %3.4f - updated baseline" % (baseline, tmin)
+    
+    # Clean up test directory
+    try:
+      shutil.rmtree(rundir, True)
+    except (IOError, OSError): pass
+  # } // End of cTest::runPerformanceTest()
+  
+  
+  
+  # string cTest::getRepositoryPath(string ) {
+  def getRepositoryPath(self):
+    global settings
+    
+    ifp = os.popen("%s info --xml %s" % (settings["svn"], settings["testdir"]))
+    doc = xml.dom.minidom.parse(ifp)
+    if doc.documentElement.tagName != "info": return ""
+    
+    urltags = doc.getElementsByTagName("url")
+    if len(urltags) < 1 or urltags[0].firstChild.nodeType != urltags[0].firstChild.TEXT_NODE: return ""
+    return urltags[0].firstChild.data
+  # } // End of cTest::getRepositoryPath()
+  
+
+
+  # bool cTest::handleNewExpected() {
+  def handleNewExpected(self):
+    global settings, EXPECTDIR
+    
+    if settings["mode"] == "slave": return True
+
+    rundir = os.path.join(tmpdir, self.name)
+    expectdir = os.path.join(self.tdir, EXPECTDIR)
+    
+    svn = settings["svn"]
+
+    if settings["mode"] == "master":
+      if not self.usesvn: return True
+      svndir = os.path.join(tmpdir, "_svn_tests")
+      if not os.path.exists(svndir):
+        ecode = os.spawnlp(os.P_WAIT, svn, svn, "checkout", "-q", self.getRepositoryPath(), svndir)
+        if ecode != 0: return False
+      expectdir = os.path.join(svndir, self.name, EXPECTDIR)
+
+    try:
+      shutil.copytree(rundir, expectdir)
+    except (IOError, OSError):
+      return False
+
+    for cfile in self.confstruct.keys():
+      try:
+        os.remove(os.path.join(expectdir, cfile))
+      except OSError, e:
+        print "Warning: failed to remove conf file (%s) from expected" % cfile
+        print "  -- root cause: %s" % e
+    try:
+      shutil.rmtree(rundir, True) # Clean up test directory
+    except (IOError, OSError): pass
+    if self.usesvn:
+      ecode = os.spawnlp(os.P_WAIT, svn, svn, "add", expectdir)
+      if ecode != 0: return False
+
+    return True
+    
+  # } // End of cTest::handleNewExpected()
+
+
+
+  # bool cTest::reportConsistencyResults() {
+  def reportConsistencyResults(self):
+    global settings
+    print "%s :" % self.name, 
+    if self.success:
+      if self.has_expected:
+        print self.result
+      else:
+        if self.handleNewExpected():
+          if settings["mode"] == "slave":
+            print "skipped (no expected results)"
+          else:
+            print "new expected results generated"
+        else:
+          print "unable to process new expected results"
+          self.success = False
+    else:
+      print "failed\n"
+      if self.exitcode != 0:
+        print "exit code: %d" % self.exitcode
+      else:
+        print "output variance(s):"
+        for err in self.errors: print err
+      print "\n"
+
+    return self.success
+  # } // End of cTest::reportConsistencyResults()
+  
+  
+  
+  # bool cTest::reportPerformanceResults() {
+  def reportPerformanceResults(self):
+    print "%s : %s" % (self.name, self.presult) 
+    return self.psuccess
+  # } // End of cTest::reportPerformanceResults()
+  
+  
+  
+  # void cTest::describe() {
+  def describe(self):
+    if self.has_expected: print "  ",
+    else: print "* ",
+    print self.name
+  # } // End of cTest::describe()
+    
+# } // End of class cTest
+
+
+
+# Main Test Running Functions - subroutines called by main to do the testing work
+# ---------------------------------------------------------------------------------------------------------------------------
+
+# (int, int) runConsistencyTests(cTest[] tests) {
+def runConsistencyTests(alltests, dolongtests):
+  global settings, tmpdir
+  
+  tests = []
+  for test in alltests:
+    if test.isConsistencyTest(): tests.append(test)
+  
+  if len(tests) == 0:
+    print "No Consistency Tests Available (or Specified)."
+    return (0, 0)
+
+  print "\nRunning Consistency Tests..."
+  
+  # Run Tests
+  sem = threading.BoundedSemaphore(settings["cpus"])
+  ti = 0
+  sys.stdout.write("Performing Test:")
+  sys.stdout.flush()
+  for test in tests:
+    # void runTestWrapper(cTest test, Semaphore sem) {
+    def runTestWrapper(test, sem):
+      test.runConsistencyTest(dolongtests)
+      sem.release()  
+    # } // End of runTestWrapper()
+
+    sem.acquire()
+    ti += 1
+    sys.stdout.write("\rPerforming Test:  % 4d of %d" % (ti, len(tests)))
+    sys.stdout.flush()
+    tthread = threading.Thread(target=runTestWrapper, args=(test, sem))
+    tthread.start()
+  
+  for i in range(settings["cpus"]): sem.acquire()
+
+  sys.stdout.write("\n\n")
+  sys.stdout.flush()
+
+
+  # Report Results
+  success = 0
+  fail = 0
+  for test in tests:
+    if test.reportConsistencyResults(): success += 1
+    else: fail += 1
+
+  svndir = os.path.join(tmpdir, "_svn_tests")
+  if os.path.exists(svndir) and not settings.has_key("disable-svn"):
+    print "\nAdding new expected results to the repository..."
+    svn = settings["svn"]
+    ecode = os.spawnlp(os.P_WAIT, svn, svn, "commit", svndir, "-m", "Adding new expected results.")
+    if ecode != 0: print "Error: Failed to add new expected results."
+  
+  return (success, fail)
+# } // End of runConsistencyTests()
+
+
+
+# (int, int) runPerformanceTests(cTest[] tests) {
+def runPerformanceTests(alltests, dolongtests, force):
+  global settings, tmpdir
+  
+  tests = []
+  if force: tests = alltests
+  else:
+    for test in alltests:
+      if test.isPerformanceTest(): tests.append(test)
+  
+  if len(tests) == 0:
+    print "No Performance Tests Available (or Specified)."
+    return (0, 0)
+
+  print "\nRunning Performance Tests..."
+  
+  # Run Tests
+  ti = 0
+  sys.stdout.write("Performing Test:")
+  sys.stdout.flush()
+  for test in tests:
+    ti += 1
+    sys.stdout.write("\rPerforming Test:  % 4d of %d" % (ti, len(tests)))
+    sys.stdout.flush()
+    test.runPerformanceTest(dolongtests)
+  
+  sys.stdout.write("\n\n")
+  sys.stdout.flush()
+
+
+  # Report Results
+  success = 0
+  fail = 0
+  for test in tests:
+    if test.reportPerformanceResults(): success += 1
+    else: fail += 1
+
+  return (success, fail)
+# } // End of runPerformanceTests()
+
+
+
+# Main - load configuration and call the workhorse routines
+# ---------------------------------------------------------------------------------------------------------------------------
+
+# int main(string[] argv) {
+def main(argv):
+  global cfg, settings, tmpdir, CONFIGDIR
+
+  scriptdir = os.path.abspath(os.path.dirname(argv[0]))
+  
+  # Read Configuration File
+  cfg = ConfigParser.ConfigParser(settings)
+  cfg.read([os.path.join(scriptdir, "testrunner.cfg")])
+  
+
+  # getConfig - embedded function to wrap loading configuration settings w/defaults
+  # -------------------------------------------------------------------------------
+  # string getConfig(string sect, string opt, string default) {
+  def getConfig(sect, opt, default):
+    try:
+      global cfg, settings
+      val = cfg.get(sect, opt, False, settings)
+      return val
+    except:
+      return default
+  # } // End of getConfig()
+
+
+  # Setup Global Settings
+  #  - settings that begin with an underscore (i.e. _testrunner_name) are for internal use and are not intended for
+  #    use as variables in test_list configuration files
+  settings["builddir"] = getConfig("testrunner", "builddir", "build")
+  settings["mode"] = getConfig("testrunner", "mode", "local")
+  settings["svn"] = getConfig("testrunner", "svn", "svn")
+  settings["svnversion"] = getConfig("testrunner", "svnversion", "svnversion")
+  settings["svnmetadir"] = getConfig("testrunner", "svnmetadir", ".svn")
+  settings["testdir"] = getConfig("testrunner", "testdir", "tests")
+
+  settings["_testrunner_name"] = "testrunner.py"
+  
+  settings["perf_margin"] = float(getConfig("performance","maring",.05))
+  settings["perf_repeat"] = int(getConfig("performance","repeat",5))
+
+  settings["cpus"] = 1
+
+  # Process Command Line Arguments
+  try:
+    opts, args = getopt.getopt(argv[1:], "fhj:lm:ps:v", \
+      ["builddir=", "disable-svn", "force-perf", "help", "list-tests", "long-tests", "mode=", "reset-perf-base", \
+       "run-perf-tests", "skip-tests", "svnmetadir=", "svn=", "svnversion=", "testdir=", "verbose", "version", \
+       "-testrunner-name="])
+  except getopt.GetoptError:
+    usage()
+    return -1
+  
+  # Define Option Flags
+  opt_forceperf = False
+  opt_listtests = False
+  opt_long = False
+  opt_runperf = False
+  opt_showhelp = False
+  opt_showversion = False
+  
+  # Process Supplied Options
+  for opt, arg in opts:
+    if opt in ("-h", "--help"):
+      opt_showhelp = True
+    elif opt == "--builddir":
+      settings["builddir"] = arg
+    elif opt == "-j":
+      cpus = int(arg)
+      if cpus < 1: cpus = 1
+      settings["cpus"] = cpus
+    elif opt == "--disable-svn":
+      settings["disable-svn"] = ""
+    elif opt in ("-f", "--force-perf"):
+      opt_forceperf = True
+    elif opt in ("-l", "--list-tests"):
+      opt_listtests = True
+    elif opt == "--long-tests":
+      opt_long = True
+    elif opt in ("-m", "--mode"):
+      settings["mode"] = arg
+    elif opt == "--reset-perf-base":
+      settings["reset-perf-base"] = ""
+    elif opt in ("-p", "--run-perf-tests"):
+      opt_runperf = True
+    elif opt == "--skip-tests":
+      settings["skip-tests"] = ""
+    elif opt == "--svnmetadir":
+      settings["svnmetadir"] = arg
+    elif opt in ("-s", "--svn"):
+      settings["svn"] = arg
+    elif opt == "--svnversion":
+      settings["svnversion"] = arg
+    elif opt == "--testdir":
+      settings["testdir"] = arg
+    elif opt in ("-v", "--verbose"):
+      settings["verbose"] = ""
+    elif opt == "--version":
+      opt_showversion = True
+    elif opt == "---testrunner-name":
+      settings["_testrunner_name"] = arg
+      
+  # Show help or version and exit, if requested to do so
+  if opt_showhelp:
+    usage()
+    return 0
+  elif opt_showversion:
+    version()
+    return 0
+  
+  
+  # Load the app to test, check for its existance
+  app = getConfig("main", "app", "")
+  if app == "":
+    print "Warning: No default test app configured"
+  else:
+    app = os.path.abspath(app)
+    if not os.path.exists(app) and not os.path.isfile(app):
+      print "Error: invalid test app"
+      return -1
+  settings['app'] = app
+  
+
+  testdir = os.path.abspath(getConfig("main", "testdir", "."))  
+  settings["testdir"] = testdir
+
+  
+  # Load in all tests
+  print "Reading Test Configurations..."
+  tests = []
+  
+  dlist = args
+  if len(dlist) == 0: dlist = dircache.listdir(testdir)
+  
+  dircache.annotate(testdir, dlist)
+  for d in dlist:
+    # Directories with preceeding underscore or period are ignored, as are files
+    if d[0] == "_" or d[0] == "." or d[len(d) - 1] != "/": continue
+    
+    name = d[:len(d) - 1]
+    curtdir = os.path.join(testdir, name)
+    contents = dircache.listdir(curtdir)
+    if CONFIGDIR in contents:
+      tests.append(cTest(name, curtdir))
+
+
+  # If selected, display available tests and exit
+  if opt_listtests:
+    print "Available Tests:\n"
+    for test in tests: test.describe()
+    return 0
+
+  # Make temp directory to hold active tests  
+  tmpdir = tempfile.mkdtemp("_testrunner")
+
+
+  # Run Consistency Tests
+  (success, fail) = runConsistencyTests(tests, opt_long)
+  
+  if fail == 0 and opt_runperf:
+    (psuccess, pfail) = runPerformanceTests(tests, opt_long, opt_forceperf)
+    success += psuccess
+    fail += pfail
+
+  # Clean up test directory
+  try:
+    shutil.rmtree(tmpdir, True)
+  except (IOError, OSError): pass
+
+
+  if fail == 0:
+    print "\nAll tests passed."
+    return 0
+  else:
+    print "\n%d of %d tests failed." % (fail, fail + success)
+    return fail
+  
+# } // End of main()  
+
+
+
+# void _main() { // Main entry point when called as standalone script
+if __name__ == "__main__":
+  sys.exit(main(sys.argv))
+# } // End of _main()


Property changes on: development/tests/_testrunner/testrunner.py
___________________________________________________________________
Name: svn:executable
   + *

Added: development/tests/default_classic_100u/config/avida.cfg
===================================================================
--- development/tests/default_classic_100u/config/avida.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/config/avida.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,216 @@
+#############################################################################
+# This file includes all the basic run-time defines for Avida.
+# For more information, see doc/config.html
+#############################################################################
+
+VERSION_ID 2.7.0   # Do not change this value.
+
+### GENERAL_GROUP ###
+# General Settings
+ANALYZE_MODE 0  # 0 = Disabled
+                # 1 = Enabled
+                # 2 = Interactive
+VIEW_MODE 1     # Initial viewer screen
+CLONE_FILE -    # Clone file to load
+VERBOSITY 1     # Control output verbosity
+
+### ARCH_GROUP ###
+# Architecture Variables
+WORLD_X 60        # Width of the Avida world
+WORLD_Y 60       # Height of the Avida world
+WORLD_GEOMETRY 2  # 1 = Bounded Grid
+                  # 2 = Torus
+NUM_DEMES 0       # Number of independed groups in the population; 0=off
+RANDOM_SEED 0     # Random number seed (0 for based on time)
+HARDWARE_TYPE 0   # 0 = Original CPUs
+                  # 1 = New SMT CPUs
+                  # 2 = Transitional SMT
+
+### CONFIG_FILE_GROUP ###
+# Configuration Files
+DATA_DIR data                       # Directory in which config files are found
+INST_SET -                          # File containing instruction set
+EVENT_FILE events.cfg               # File containing list of events during run
+ANALYZE_FILE analyze.cfg            # File used for analysis mode
+ENVIRONMENT_FILE environment.cfg    # File that describes the environment
+START_CREATURE default-classic.org  # Organism to seed the soup
+
+### REPRODUCTION_GROUP ###
+# Birth and Death
+BIRTH_METHOD 0           # Which organism should be replaced on birth?
+                         # 0 = Random organism in neighborhood
+                         # 1 = Oldest in neighborhood
+                         # 2 = Largest Age/Merit in neighborhood
+                         # 3 = None (use only empty cells in neighborhood)
+                         # 4 = Random from population (Mass Action)
+                         # 5 = Oldest in entire population
+                         # 6 = Random within deme
+                         # 7 = Organism faced by parent
+                         # 8 = Next grid cell (id+1)
+PREFER_EMPTY 1           # Give empty cells preference in offsping placement?
+DEATH_METHOD 2           # 0 = Never die of old age.
+                         # 1 = Die when inst executed = AGE_LIMIT (+deviation)
+                         # 2 = Die when inst executed = length*AGE_LIMIT (+dev)
+AGE_LIMIT 20             # Modifies DEATH_METHOD
+AGE_DEVIATION 0          # Creates a distribution around AGE_LIMIT
+ALLOC_METHOD 0           # (Orignal CPU Only)
+                         # 0 = Allocated space is set to default instruction.
+                         # 1 = Set to section of dead genome (Necrophilia)
+                         # 2 = Allocated space is set to random instruction.
+DIVIDE_METHOD 1          # 0 = Divide leaves state of mother untouched.
+                         # 1 = Divide resets state of mother
+                         #     (after the divide, we have 2 children)
+                         # 2 = Divide resets state of current thread only
+                         #     (does not touch possible parasite threads)
+GENERATION_INC_METHOD 1  # 0 = Only the generation of the child is
+                         #     increased on divide.
+                         # 1 = Both the generation of the mother and child are
+                         #     increased on divide (good with DIVIDE_METHOD 1).
+
+### RECOMBINATION_GROUP ###
+# Sexual Recombination and Modularity
+RECOMBINATION_PROB 1.0  # probability of recombination in div-sex
+MAX_BIRTH_WAIT_TIME -1  # Updates incipiant orgs can wait for crossover
+MODULE_NUM 0            # number of modules in the genome
+CONT_REC_REGS 1         # are (modular) recombination regions continuous
+CORESPOND_REC_REGS 1    # are (modular) recombination regions swapped randomly
+                        #  or with corresponding positions?
+TWO_FOLD_COST_SEX 0     # 1 = only one recombined offspring is born.
+                        # 2 = both offspring are born
+SAME_LENGTH_SEX 0       # 0 = recombine with any genome
+                        # 1 = only recombine w/ same length
+
+### DIVIDE_GROUP ###
+# Divide Restrictions
+CHILD_SIZE_RANGE 2.0  # Maximal differential between child and parent sizes.
+MIN_COPIED_LINES 0.5  # Code fraction which must be copied before divide.
+MIN_EXE_LINES 0.5     # Code fraction which must be executed before divide.
+REQUIRE_ALLOCATE 1    # (Original CPU Only) Require allocate before divide?
+REQUIRED_TASK -1      # Task ID required for successful divide.
+IMMUNITY_TASK -1      # Task providing immunity from the required task.
+REQUIRED_REACTION -1  # Reaction ID required for successful divide.
+REQUIRED_BONUS 0      # The bonus that an organism must accumulate to divide.
+
+### MUTATION_GROUP ###
+# Mutations
+POINT_MUT_PROB 0.0    # Mutation rate (per-location per update)
+COPY_MUT_PROB 0.0075  # Mutation rate (per copy)
+INS_MUT_PROB 0.0      # Insertion rate (per site, applied on divide)
+DEL_MUT_PROB 0.0      # Deletion rate (per site, applied on divide)
+DIV_MUT_PROB 0.0      # Mutation rate (per site, applied on divide)
+DIVIDE_MUT_PROB 0.0   # Mutation rate (per divide)
+DIVIDE_INS_PROB 0.05  # Insertion rate (per divide)
+DIVIDE_DEL_PROB 0.05  # Deletion rate (per divide)
+PARENT_MUT_PROB 0.0   # Per-site, in parent, on divide
+SPECIAL_MUT_LINE -1   # If this is >= 0, ONLY this line is mutated
+INJECT_INS_PROB 0.0   # Insertion rate (per site, applied on inject)
+INJECT_DEL_PROB 0.0   # Deletion rate (per site, applied on inject)
+INJECT_MUT_PROB 0.0   # Mutation rate (per site, applied on inject)
+
+### REVERSION_GROUP ###
+# Mutation Reversion
+# These slow down avida a lot, and should be set to 0.0 normally.
+REVERT_FATAL 0.0           # Should any mutations be reverted on birth?
+REVERT_DETRIMENTAL 0.0     #   0.0 to 1.0; Probability of reversion.
+REVERT_NEUTRAL 0.0         # 
+REVERT_BENEFICIAL 0.0      # 
+STERILIZE_FATAL 0.0        # Should any mutations clear (kill) the organism?
+STERILIZE_DETRIMENTAL 0.0  # 
+STERILIZE_NEUTRAL 0.0      # 
+STERILIZE_BENEFICIAL 0.0   # 
+FAIL_IMPLICIT 0            # Should copies that failed *not* due to mutations
+                           # be eliminated?
+NEUTRAL_MAX 0.0            # The percent benifical change from parent fitness to be considered neutral.
+NEUTRAL_MIN 0.0            # The percent deleterious change from parent fitness to be considered neutral.
+
+### TIME_GROUP ###
+# Time Slicing
+AVE_TIME_SLICE 30        # Ave number of insts per org per update
+SLICING_METHOD 1         # 0 = CONSTANT: all organisms get default...
+                         # 1 = PROBABILISTIC: Run _prob_ proportional to merit.
+                         # 2 = INTEGRATED: Perfectly integrated deterministic.
+BASE_MERIT_METHOD 4      # 0 = Constant (merit independent of size)
+                         # 1 = Merit proportional to copied size
+                         # 2 = Merit prop. to executed size
+                         # 3 = Merit prop. to full size
+                         # 4 = Merit prop. to min of executed or copied size
+                         # 5 = Merit prop. to sqrt of the minimum size
+BASE_CONST_MERIT 100     # Base merit when BASE_MERIT_METHOD set to 0
+DEFAULT_BONUS 1.0        # Initial bonus before any tasks
+MERIT_DEFAULT_BONUS 0    # Scale the merit of an offspring by the default bonus
+                         # rather than the accumulated bonus of the parent?
+MAX_CPU_THREADS 1        # Number of Threads a CPU can spawn
+THREAD_SLICING_METHOD 0  # Formula for and organism's thread slicing
+                         #   (num_threads-1) * THREAD_SLICING_METHOD + 1
+                         # 0 = One thread executed per time slice.
+                         # 1 = All threads executed each time slice.
+MAX_LABEL_EXE_SIZE 1     # Max nops marked as executed when labels are used
+DONATE_SIZE 5.0          # Amount of merit donated with 'donate' command
+DONATE_MULT 10.0         # Multiple of merit given that the target receives.
+MAX_DONATE_KIN_DIST -1   # Limit on distance of relation for donate; -1=no max
+MAX_DONATE_EDIT_DIST -1  # Limit on edit distance for donate; -1=no max
+MAX_DONATES 1000000      # Limit on number of donates organisms are allowed.
+
+### GENEOLOGY_GROUP ###
+# Geneology
+TRACK_MAIN_LINEAGE 1  # Keep all ancestors of the active population?
+                      # 0=no, 1=yes, 2=yes,w/sexual population
+THRESHOLD 3           # Number of organisms in a genotype needed for it
+                      #   to be considered viable.
+GENOTYPE_PRINT 0      # 0/1 (off/on) Print out all threshold genotypes?
+GENOTYPE_PRINT_DOM 0  # Print out a genotype if it stays dominant for
+                      #   this many updates. (0 = off)
+SPECIES_THRESHOLD 2   # max failure count for organisms to be same species
+SPECIES_RECORDING 0   # 1 = full, 2 = limited search (parent only)
+SPECIES_PRINT 0       # 0/1 (off/on) Print out all species?
+TEST_CPU_TIME_MOD 20  # Time allocated in test CPUs (multiple of length)
+
+### LOG_GROUP ###
+# Log Files
+LOG_CREATURES 0  # 0/1 (off/on) toggle to print file.
+LOG_GENOTYPES 0  # 0 = off, 1 = print ALL, 2 = print threshold ONLY.
+LOG_THRESHOLD 0  # 0/1 (off/on) toggle to print file.
+LOG_SPECIES 0    # 0/1 (off/on) toggle to print file.
+
+### LINEAGE_GROUP ###
+# Lineage
+# NOTE: This should probably be called "Clade"
+# This one can slow down avida a lot. It is used to get an idea of how
+# often an advantageous mutation arises, and where it goes afterwards.
+# Lineage creation options are.  Works only when LOG_LINEAGES is set to 1.
+#   0 = manual creation (on inject, use successive integers as lineage labels).
+#   1 = when a child's (potential) fitness is higher than that of its parent.
+#   2 = when a child's (potential) fitness is higher than max in population.
+#   3 = when a child's (potential) fitness is higher than max in dom. lineage
+# *and* the child is in the dominant lineage, or (2)
+#   4 = when a child's (potential) fitness is higher than max in dom. lineage
+# (and that of its own lineage)
+#   5 = same as child's (potential) fitness is higher than that of the
+#       currently dominant organism, and also than that of any organism
+#       currently in the same lineage.
+#   6 = when a child's (potential) fitness is higher than any organism
+#       currently in the same lineage.
+#   7 = when a child's (potential) fitness is higher than that of any
+#       organism in its line of descent
+LOG_LINEAGES 0             # 
+LINEAGE_CREATION_METHOD 0  # 
+
+### ORGANISM_NETWORK_GROUP ###
+# Organism Network Communication
+NET_ENABLED 0      # Enable Network Communication Support
+NET_DROP_PROB 0.0  # Message drop rate
+NET_MUT_PROB 0.0   # Message corruption probability
+NET_MUT_TYPE 0     # Type of message corruption.  0 = Random Single Bit, 1 = Always Flip Last
+NET_STYLE 0        # Communication Style.  0 = Random Next, 1 = Receiver Facing
+
+### BUY_SELL_GROUP ###
+# Buying and Selling Parameters
+SAVE_RECEIVED 0  # Enable storage of all inputs bought from other orgs
+BUY_PRICE 0      # price offered by organisms attempting to buy
+SELL_PRICE 0     # price offered by organisms attempting to sell
+
+### ANALYZE_GROUP ###
+# Analysis Settings
+MT_CONCURRENCY 1   # Number of concurrent analyze threads
+ANALYZE_OPTION_1   # String variable accessible from analysis scripts
+ANALYZE_OPTION_2   # String variable accessible from analysis scripts

Added: development/tests/default_classic_100u/config/default-classic.org
===================================================================
--- development/tests/default_classic_100u/config/default-classic.org	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/config/default-classic.org	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,100 @@
+h-alloc    # Allocate space for child
+h-search   # Locate the end of the organism
+nop-C      #
+nop-A      #
+mov-head   # Place write-head at beginning of offspring.
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+nop-C      #
+h-search   # Mark the beginning of the copy loop
+h-copy     # Do the copy
+if-label   # If we're done copying....
+nop-C      #
+nop-A      #
+h-divide   #    ...divide!
+mov-head   # Otherwise, loop back to the beginning of the copy loop.
+nop-A      # End label.
+nop-B      #

Added: development/tests/default_classic_100u/config/environment.cfg
===================================================================
--- development/tests/default_classic_100u/config/environment.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/config/environment.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# This is the setup file for the task/resource system.  From here, you can
+# setup the available resources (including their inflow and outflow rates) as
+# well as the reactions that the organisms can trigger by performing tasks.
+#
+# This file is currently setup to reward 9 tasks, all of which use the
+# "infinite" resource, which is undepletable.
+#
+# For information on how to use this file, see:  doc/environment.html
+# For other sample environments, see:  source/support/config/ 
+#
+##############################################################################
+
+REACTION  NOT  not   process:value=1.0:type=pow  requisite:max_count=1
+REACTION  NAND nand  process:value=1.0:type=pow  requisite:max_count=1
+REACTION  AND  and   process:value=2.0:type=pow  requisite:max_count=1
+REACTION  ORN  orn   process:value=2.0:type=pow  requisite:max_count=1
+REACTION  OR   or    process:value=3.0:type=pow  requisite:max_count=1
+REACTION  ANDN andn  process:value=3.0:type=pow  requisite:max_count=1
+REACTION  NOR  nor   process:value=4.0:type=pow  requisite:max_count=1
+REACTION  XOR  xor   process:value=4.0:type=pow  requisite:max_count=1
+REACTION  EQU  equ   process:value=5.0:type=pow  requisite:max_count=1

Added: development/tests/default_classic_100u/config/events.cfg
===================================================================
--- development/tests/default_classic_100u/config/events.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/config/events.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,31 @@
+##############################################################################
+#
+# This is the setup file for the events system.  From here, you can
+# configure any actions that you want to have happen during the course of
+# an experiment, including setting the times for data collection.
+#
+# basic syntax: [trigger] [start:interval:stop] [action/event] [arguments...]
+#
+# This file is currently setup to record key information every 100 updates.
+#
+# For information on how to use this file, see:  doc/events.html
+# For other sample event configurations, see:  support/config/
+#
+##############################################################################
+
+# Print all of the standard data files...
+u 0:10:end PrintAverageData       # Save info about they average genotypes
+u 0:10:end PrintDominantData      # Save info about most abundant genotypes
+u 0:10:end PrintStatsData         # Collect satistics about entire pop.
+u 0:10:end PrintCountData         # Count organisms, genotypes, species, etc.
+u 0:10:end PrintTasksData         # Save organisms counts for each task.
+u 0:10:end PrintTimeData          # Track time conversion (generations, etc.)
+u 0:10:end PrintResourceData      # Track resource abundance.
+u 0:10:end PrintDominantGenotype      # Save the most abundant genotypes
+u 0:10:end PrintTasksExeData    # Num. times tasks have been executed.
+u 0:10:end PrintTasksQualData   # Task quality information
+
+# Setup the exit time and full population data collection.
+u 100 SavePopulation         # Save current state of population.
+u 100 SaveHistoricPopulation # Save ancestors of current population.
+u 100 exit                        # exit

Added: development/tests/default_classic_100u/config/instset-classic.cfg
===================================================================
--- development/tests/default_classic_100u/config/instset-classic.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/config/instset-classic.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,52 @@
+nop-A      1   # a
+nop-B      1   # b
+nop-C      1   # c
+if-n-equ   1   # d
+if-less    1   # e
+pop        1   # f
+push       1   # g
+swap-stk   1   # h
+swap       1   # i 
+shift-r    1   # j
+shift-l    1   # k
+inc        1   # l
+dec        1   # m
+add        1   # n
+sub        1   # o
+nand       1   # p
+IO         1   # q   Puts current contents of register and gets new.
+h-alloc    1   # r   Allocate as much memory as organism can use.
+h-divide   1   # s   Cuts off everything between the read and write heads
+h-copy     1   # t   Combine h-read and h-write
+h-search   1   # u   Search for matching template, set flow head & return info
+               #   #   if no template, move flow-head here, set size&offset=0.
+mov-head   1   # v   Move ?IP? head to flow control.
+jmp-head   1   # w   Move ?IP? head by fixed amount in CX.  Set old pos in CX.
+get-head   1   # x   Get position of specified head in CX.
+if-label   1   # y
+set-flow   1   # z   Move flow-head to address in ?CX? 
+
+#adv-head   1
+#jump-f     1
+#jump-b     1
+#call       1
+#return     1
+#if-bit-1   1
+#get        1
+#put        1
+#h-read     1
+#h-write    1
+#set-head   1
+#search-f   1
+#search-b   1
+
+
+# Works on multiple nops:  pop  push  inc  dec  IO  adv-head 
+
+# What if we add a new head.  Search will return the location of something,
+# and put the new head there.  Then set-head will move another head to that
+# point.  In the case of the copy loop, it only needs to be set once and
+# this will speed up the code quite a bit!
+
+# Search with no template returns current position (abs line number) in
+# genome.
\ No newline at end of file

Added: development/tests/default_classic_100u/expected/data/archive/100-aaaaa.org
===================================================================
--- development/tests/default_classic_100u/expected/data/archive/100-aaaaa.org	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/archive/100-aaaaa.org	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,134 @@
+# Thu Mar 22 22:40:59 2007
+# Filename........: archive/100-aaaaa.org
+# Update Output...: 100
+# Is Viable.......: 1
+# Repro Cycle Size: 0
+# Depth to Viable.: 0
+# Update Created..: -1
+# Genotype ID.....: 1
+# Parent Gen ID...: -1
+# Tree Depth......: 0
+# Parent Distance.: -1
+# 
+# Generation: 0
+# Merit...........: 97.000000
+# Gestation Time..: 389
+# Fitness.........: 0.249357
+# Errors..........: 0
+# Genome Size.....: 100
+# Copied Size.....: 100
+# Executed Size...: 97
+# Offspring.......: SELF
+# 
+# Tasks Performed:
+# not 0 (0.000000)
+# nand 0 (0.000000)
+# and 0 (0.000000)
+# orn 0 (0.000000)
+# or 0 (0.000000)
+# andn 0 (0.000000)
+# nor 0 (0.000000)
+# xor 0 (0.000000)
+# equ 0 (0.000000)
+
+
+h-alloc
+h-search
+nop-C
+nop-A
+mov-head
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+nop-C
+h-search
+h-copy
+if-label
+nop-C
+nop-A
+h-divide
+mov-head
+nop-A
+nop-B

Added: development/tests/default_classic_100u/expected/data/average.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/average.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/average.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,30 @@
+# Avida Average Data
+# Thu Mar 22 22:40:59 2007
+#  1: Update
+#  2: Merit
+#  3: Gestation Time
+#  4: Fitness
+#  5: Repro Rate?
+#  6: Size
+#  7: Copied Size
+#  8: Executed Size
+#  9: Abundance
+# 10: Proportion of organisms that gave birth in this update
+# 11: Proportion of Breed True Organisms
+# 12: Genotype Depth
+# 13: Generation
+# 14: Neutral Metric
+# 15: Lineage Label
+# 16: True Replication Rate (based on births/update, time-averaged)
+
+0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
+10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+20 97 389 0.249357 0 100 100 97 0 0 0 0 1 -2.13704 0 0 
+30 97 389 0.249357 0 100 100 97 2 0 0 0.25 2 -1.87486 0 0 
+40 97 388.75 0.249518 0 100 100 97 2.66667 0.125 0.125 0.375 3 -2.53167 0 0 
+50 97 388.75 0.249518 0 100 100 97 2.66667 0 0 0.375 3 -2.53167 0 0 
+60 97 388.8 0.249486 0 100 100 97 2.5 0 0 0.466667 3.93333 -2.00077 0 0 
+70 95.6207 387.172 0.246829 0 100.034 100 95.6207 2.41667 0 0 0.62069 4.93103 -1.87587 0 0 
+80 96.5349 388.047 0.248722 0 100.047 100 96.5349 1.86957 0.116279 0.0465116 0.790698 5.81395 -1.91443 0 0 
+90 94.2245 385.347 0.243865 0 100.102 98.9796 94.2245 1.75 0.102041 0 0.857143 6.18367 -1.84457 0 0 
+100 93.5672 384.522 0.242764 0 100.09 99.2687 93.5672 1.59524 0.0298507 0 1.08955 6.92537 -1.98729 0 0 

Added: development/tests/default_classic_100u/expected/data/count.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/count.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/count.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,30 @@
+# Avida count data
+# Thu Mar 22 22:40:59 2007
+#  1: update
+#  2: number of insts executed this update
+#  3: number of organisms
+#  4: number of different genotypes
+#  5: number of different threshold genotypes
+#  6: number of different species
+#  7: number of different threshold species
+#  8: number of different lineages
+#  9: number of births in this update
+# 10: number of deaths in this update
+# 11: number of breed true
+# 12: number of breed true organisms?
+# 13: number of no-birth organisms
+# 14: number of single-threaded organisms
+# 15: number of multi-threaded organisms
+# 16: number of modified organisms
+
+0 30 1 1 1 0 0 0 1 0 1 1 1 1 0 0 
+10 30 1 1 1 0 0 0 0 0 0 1 1 1 0 0 
+20 60 2 1 1 0 0 0 0 0 0 2 1 2 0 0 
+30 120 4 2 1 0 0 0 0 0 0 3 2 4 0 0 
+40 210 8 3 1 0 0 0 1 0 1 6 4 8 0 0 
+50 240 8 3 1 0 0 0 0 0 0 6 4 8 0 0 
+60 450 15 6 1 0 0 0 0 0 0 10 8 15 0 0 
+70 870 29 12 1 0 0 0 0 0 0 18 15 29 0 0 
+80 1140 43 23 2 0 0 0 5 0 2 22 24 43 0 0 
+90 1410 49 28 2 0 0 0 5 3 0 23 27 49 0 0 
+100 1950 67 42 5 0 0 0 2 0 0 28 36 67 0 0 

Added: development/tests/default_classic_100u/expected/data/detail-100.pop
===================================================================
--- development/tests/default_classic_100u/expected/data/detail-100.pop	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/detail-100.pop	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,59 @@
+#filetype genotype_data
+#format id parent_id parent_dist num_cpus total_cpus length merit gest_time fitness update_born update_dead depth sequence
+
+#  1: ID
+#  2: parent ID
+#  3: parent distance
+#  4: number of orgranisms currently alive
+#  5: total number of organisms that ever existed
+#  6: length of genome
+#  7: merit
+#  8: gestation time
+#  9: fitness
+# 10: update born
+# 11: update deactivated
+# 12: depth in phylogentic tree
+# 13: genome of organism
+
+1 -1 -1 14 22 100 97 389 0.249357 -1 -1 0 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+11 1 2 4 4 100 97 387 0.250646 67 -1 1 rucavcccccccccccccccccccccccjccccccccccccccccccccccccccccccccccccccccccccccccccpcccccccccccutycasvab 
+5 1 1 3 3 100 97 388 0.25 52 -1 1 rucavccccccccccccccccccccccccccccccccecccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+12 1 1 3 3 100 97 388 0.25 67 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgcutycasvab 
+2 1 1 2 3 100 97 388 0.25 26 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccfcccccccutycasvab 
+6 1 2 2 3 100 77 367 0.209809 53 -1 1 rucavccccccccccccccccccyccccccccccccccccccccccccccccccccccccccccccccccccccccccyccccccccccccutycasvab 
+14 1 1 2 2 100 0 0 0 77 -1 1 rucavccccccccccccccccccccccccccucccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+17 2 2 2 2 100 0 0 0 78 -1 2 rucavccccccccccccccccccccccccccccccccccccccacccccccccccccccccccccccccccccccccccccccfccccccdutycasvab 
+21 1 1 2 2 100 0 0 0 79 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccxcccccccccccccccccccccccccccccutycasvab 
+4 1 1 1 3 100 97 388 0.25 52 -1 1 rucavcccccccccccccccccccccccccccccccccccccccccccccccccccccccccmccccccccccccccccccccccccccccutycasvab 
+3 2 1 1 1 100 0 0 0 38 -1 2 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccfcccccccutycasgab 
+7 1 2 1 1 100 0 0 0 64 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccstycasiab 
+9 2 3 1 1 100 0 0 0 64 -1 2 uucmvcccccccccccccccccccccccccccccccccccccccccccccccccccccccccwccccccccccccccccccccfcccccccutycasvab 
+15 1 1 1 1 100 0 0 0 77 -1 1 rucavccccccccccccccccccccccccccncccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+16 1 1 1 1 100 0 0 0 78 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutyvasvab 
+19 5 2 1 1 100 0 0 0 79 -1 2 rupavccccccccccccccccccccccccccccccccecccccccccccccccccccccccccccccccccccmcccccccccccccccccutycasvab 
+20 1 1 1 1 100 0 0 0 79 -1 1 rucavccccccccccccbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+22 1 3 1 1 100 0 0 0 80 -1 1 rucavcccccccccccccccccgccccjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccnccccutycasvab 
+23 1 1 1 1 100 0 0 0 80 -1 1 rucavccccccccccccccccccccccccccccccccdcccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+24 1 2 1 1 100 0 0 0 80 -1 1 rucavcccccccccccccccccccxcccccccccccccccccccccccccccccccccccccccccccccccccccccccclcccccccccutycasvab 
+25 1 2 1 1 101 0 0 0 88 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccucccccccccccccccyccccccccccccccccccccccccccutycasvab 
+26 16 26 1 1 100 0 0 0 88 -1 2 cccccccccccccccccccccccccccccccccccccccccutyvasvabrucavccccccccccccccccccccccccccccccccccccccccccccc 
+28 2 2 1 1 100 0 0 0 90 -1 2 rucvvcccccccccccccccccccccccccccnccccccccccccccccccccccccccccccccccccccccccccccccccfcccccccutycasvab 
+29 15 2 1 1 101 0 0 0 90 -1 2 ruicavccccccccccccccccccccccccccnccccccccccccccccccccccccccccccccccccccccccccccccccccmccccccutycasvab 
+30 1 1 1 1 101 0 0 0 90 -1 1 rucavcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccmcccccccccccccccccccccutycasvab 
+31 1 1 1 1 100 0 0 0 90 -1 1 rucavccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycajvab 
+32 20 1 1 1 100 0 0 0 91 -1 2 rucavccccccccmcccbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+33 1 2 1 1 101 0 0 0 91 -1 1 rucavccccccccccccccccccccccccccccccccccccccccoccccccccwcccccccccccccccccccccccccccccccccccccutycasvab 
+34 4 1 1 1 100 0 0 0 92 -1 2 rucavccccccccccccccchcccccccccccccccccccccccccccccccccccccccccmccccccccccccccccccccccccccccutycasvab 
+35 5 1 1 1 101 0 0 0 92 -1 2 rucavcccccccccccccccccccccccccccmcccccecccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+36 5 2 1 1 100 0 0 0 92 -1 2 rucavcccccccccccccccccccccccccccccccceccccccccccccccccccccccccccrcccccccccjccccccccccccccccutycasvab 
+37 24 1 1 1 100 0 0 0 92 -1 2 rucavccccccjccccccccccccxcccccccccccccccccccccccccccccccccccccccccccccccccccccccclcccccccccutycasvab 
+38 5 1 1 1 100 0 0 0 92 -1 2 rucavcccccccccccccccccccccccccccccccceccccccccccccccccccccccccccccccccccccccccccccccccgccccutycasvab 
+39 23 1 1 1 100 0 0 0 92 -1 2 rucavccccccccccccccccccccccccccccccccdcccccccccccccccccccccccccccccccccccccccccncccccccccccutycasvab 
+40 12 1 1 1 100 0 0 0 93 -1 2 rucavcccccccccccclcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgcutycasvab 
+41 1 3 1 1 100 0 0 0 93 -1 1 rucavcccccccfcccccccccccclccccccccccccccccccccccccrccccccccccccccccccccccccccccccccccccccccutycasvab 
+42 1 2 1 1 100 0 0 0 93 -1 1 rucavcccccccccccccccccccccccccccccccccccciccccxccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+43 22 2 1 1 100 0 0 0 93 -1 2 rucavcccccccccccccccccgccccjccccccccccccrcccccccccccccccccccccdcccccccccccccccccccccccnccccutycasvab 
+44 6 1 1 1 100 0 0 0 96 -1 2 rucavccccccccccccccccccyccccccccccccccccccccccccccccccccccccccccccccccccccccccyccccccgcccccutycasvab 
+45 6 1 1 1 100 0 0 0 96 -1 2 rucavccccccccccccccccccyccccccccccccccccccccccccccccmcccccccccccccccccccccccccyccccccccccccutycasvab 
+46 1 1 1 1 100 0 0 0 100 -1 1 rucavccccccccccccccccgcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccutycasvab 
+47 25 1 1 1 101 0 0 0 100 -1 2 rucavccccccccccccccccccccccccccccccccccccccccccccuccccccctcccccccyccccccccccccccccccccccccccutycasvab 

Added: development/tests/default_classic_100u/expected/data/dominant.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/dominant.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/dominant.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,30 @@
+# Avida Dominant Data
+# Thu Mar 22 22:40:59 2007
+#  1: Update
+#  2: Average Merit of the Dominant Genotype
+#  3: Average Gestation Time of the Dominant Genotype
+#  4: Average Fitness of the Dominant Genotype
+#  5: Repro Rate?
+#  6: Size of Dominant Genotype
+#  7: Copied Size of Dominant Genotype
+#  8: Executed Size of Dominant Genotype
+#  9: Abundance of Dominant Genotype
+# 10: Number of Births
+# 11: Number of Dominant Breed True?
+# 12: Dominant Gene Depth
+# 13: Dominant Breed In
+# 14: Max Fitness?
+# 15: Genotype ID of Dominant Genotype
+# 16: Name of the Dominant Genotype
+
+0 0.000000 0.000000 0.000000 0.000000 100 0.000000 0.000000 1 0 0 0 0 0.000000 1 100-aaaaa 
+10 0 0 0 0 100 0 0 1 0 0 0 0 0 1 100-aaaaa 
+20 0 0 0 0 100 0 0 2 0 0 0 0 0.249357 1 100-aaaaa 
+30 97 389 0.249357 0.00257069 100 100 97 3 0 0 0 0 0.249357 1 100-aaaaa 
+40 97 389 0.249357 0.00257069 100 100 97 6 1 1 0 0 0.25 1 100-aaaaa 
+50 97 389 0.249357 0.00257069 100 100 97 6 0 0 0 0 0.25 1 100-aaaaa 
+60 97 389 0.249357 0.00257069 100 100 97 9 0 0 0 0 0.25 1 100-aaaaa 
+70 97 389 0.249357 0.00257069 100 100 97 15 0 0 0 0 0.25 1 100-aaaaa 
+80 97 389 0.249357 0.00257069 100 100 97 15 3 0 0 0 0.250646 1 100-aaaaa 
+90 97 389 0.249357 0.00257069 100 100 97 15 3 0 0 0 0.250646 1 100-aaaaa 
+100 97 389 0.249357 0.00257069 100 100 97 14 1 0 0 0 0.251295 1 100-aaaaa 

Added: development/tests/default_classic_100u/expected/data/historic-100.pop
===================================================================
--- development/tests/default_classic_100u/expected/data/historic-100.pop	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/historic-100.pop	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,17 @@
+#filetype genotype_data
+#format id parent_id parent_dist num_cpus total_cpus length merit gest_time fitness update_born update_dead depth sequence
+
+#  1: ID
+#  2: parent ID
+#  3: parent distance
+#  4: number of orgranisms currently alive
+#  5: total number of organisms that ever existed
+#  6: length of genome
+#  7: merit
+#  8: gestation time
+#  9: fitness
+# 10: update born
+# 11: update deactivated
+# 12: depth in phylogentic tree
+# 13: genome of organism
+

Added: development/tests/default_classic_100u/expected/data/resource.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/resource.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/resource.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,17 @@
+# Avida resource data
+# Thu Mar 22 22:40:59 2007
+# First column gives the current update, all further columns give the quantity
+# of the particular resource at that update.
+#  1: Update
+
+0 
+10 
+20 
+30 
+40 
+50 
+60 
+70 
+80 
+90 
+100 

Added: development/tests/default_classic_100u/expected/data/stats.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/stats.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/stats.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,26 @@
+# Generic Statistics Data
+# Thu Mar 22 22:40:59 2007
+#  1: update
+#  2: average inferiority (energy)
+#  3: ave probability of any mutations in genome
+#  4: probability of any mutations in dom genome
+#  5: log(average fidelity)
+#  6: log(dominant fidelity)
+#  7: change in number of genotypes
+#  8: genotypic entropy
+#  9: species entropy
+# 10: depth of most reacent coalescence
+# 11: Total number of resamplings this generation
+# 12: Total number of organisms that failed to resample this generation
+
+0 0.000000 0.097500 0.562358 0.102587 0.826353 1 -0.000000 0.000000 0 1 0 
+10 0 0.0975 0.562358 0.102587 0.826353 0 -0 0 0 0 0 
+20 0 0.562358 0.562358 0.826353 0.826353 0 -0 0 0 0 0 
+30 0 0.562358 0.562358 0.826353 0.826353 0 0.562335 0 0 0 0 
+40 -0.000644122 0.562358 0.562358 0.826353 0.826353 0 0.735622 0 0 0 0 
+50 -0.000644122 0.562358 0.562358 0.826353 0.826353 0 0.735622 0 0 0 0 
+60 -0.000515331 0.562358 0.562358 0.826353 0.826353 0 1.2973 0 0 0 0 
+70 0.0101898 0.562467 0.562358 0.826603 0.826353 0 1.82317 0 0 0 0 
+80 0.00255219 0.562505 0.562358 0.82669 0.826353 3 2.61093 0 0 0 0 
+90 0.0222724 0.562681 0.562358 0.827092 0.826353 3 2.8541 0 0 0 0 
+100 0.0267955 0.562641 0.562358 0.827001 0.826353 2 3.36865 0 0 0 0 

Added: development/tests/default_classic_100u/expected/data/tasks.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/tasks.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/tasks.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,26 @@
+# Avida tasks data
+# Thu Mar 22 22:40:59 2007
+# First column gives the current update, next columns give the number
+# of organisms that have the particular task as a component of their merit
+#  1: Update
+#  2: Not
+#  3: Nand
+#  4: And
+#  5: OrNot
+#  6: Or
+#  7: AndNot
+#  8: Nor
+#  9: Xor
+# 10: Equals
+
+0 0 0 0 0 0 0 0 0 0 
+10 0 0 0 0 0 0 0 0 0 
+20 0 0 0 0 0 0 0 0 0 
+30 0 0 0 0 0 0 0 0 0 
+40 0 0 0 0 0 0 0 0 0 
+50 0 0 0 0 0 0 0 0 0 
+60 0 0 0 0 0 0 0 0 0 
+70 0 0 0 0 0 0 0 0 0 
+80 0 0 0 0 0 0 0 0 0 
+90 0 0 0 0 0 0 0 0 0 
+100 0 0 0 0 0 0 0 0 0 

Added: development/tests/default_classic_100u/expected/data/tasks_exe.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/tasks_exe.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/tasks_exe.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,26 @@
+# Avida tasks execution data
+# Thu Mar 22 22:40:59 2007
+# First column gives the current update, all further columns give the number
+# of times the particular task has been executed this update.
+#  1: Update
+#  2: Not
+#  3: Nand
+#  4: And
+#  5: OrNot
+#  6: Or
+#  7: AndNot
+#  8: Nor
+#  9: Xor
+# 10: Equals
+
+0 0 0 0 0 0 0 0 0 0 
+10 0 0 0 0 0 0 0 0 0 
+20 0 0 0 0 0 0 0 0 0 
+30 0 0 0 0 0 0 0 0 0 
+40 0 0 0 0 0 0 0 0 0 
+50 0 0 0 0 0 0 0 0 0 
+60 0 0 0 0 0 0 0 0 0 
+70 0 0 0 0 0 0 0 0 0 
+80 0 0 0 0 0 0 0 0 0 
+90 0 0 0 0 0 0 0 0 0 
+100 0 0 0 0 0 0 0 0 0 

Added: development/tests/default_classic_100u/expected/data/tasks_quality.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/tasks_quality.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/tasks_quality.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,34 @@
+# Avida tasks quality data
+# Thu Mar 22 22:40:59 2007
+# First column gives the current update, rest give average and max task quality
+#  1: Update
+#  2: Not Average
+#  3: Not Max
+#  4: Nand Average
+#  5: Nand Max
+#  6: And Average
+#  7: And Max
+#  8: OrNot Average
+#  9: OrNot Max
+# 10: Or Average
+# 11: Or Max
+# 12: AndNot Average
+# 13: AndNot Max
+# 14: Nor Average
+# 15: Nor Max
+# 16: Xor Average
+# 17: Xor Max
+# 18: Equals Average
+# 19: Equals Max
+
+0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
+10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

Added: development/tests/default_classic_100u/expected/data/time.dat
===================================================================
--- development/tests/default_classic_100u/expected/data/time.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/expected/data/time.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,18 @@
+# Avida time data
+# Thu Mar 22 22:40:59 2007
+#  1: update
+#  2: avida time
+#  3: average generation
+#  4: num_executed?
+
+0 0.000000 0.000000 30 
+10 0 0 30 
+20 0.0824742 1 60 
+30 0.185567 2 120 
+40 0.28866 3 210 
+50 0.391753 3 240 
+60 0.494845 3.93333 450 
+70 0.598744 4.93103 870 
+80 0.703182 5.81395 1140 
+90 0.807649 6.18367 1410 
+100 0.913783 6.92537 1950 

Added: development/tests/default_classic_100u/test_list
===================================================================
--- development/tests/default_classic_100u/test_list	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_classic_100u/test_list	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,11 @@
+[main]
+args = -s 100
+
+[consistency]
+enabled = yes
+long = no
+
+[performance]
+enabled = no
+long = no
+

Added: development/tests/default_transsmt_100u/config/avida.cfg
===================================================================
--- development/tests/default_transsmt_100u/config/avida.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/config/avida.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,216 @@
+#############################################################################
+# This file includes all the basic run-time defines for Avida.
+# For more information, see doc/config.html
+#############################################################################
+
+VERSION_ID 2.7.0   # Do not change this value.
+
+### GENERAL_GROUP ###
+# General Settings
+ANALYZE_MODE 0  # 0 = Disabled
+                # 1 = Enabled
+                # 2 = Interactive
+VIEW_MODE 1     # Initial viewer screen
+CLONE_FILE -    # Clone file to load
+VERBOSITY 1     # Control output verbosity
+
+### ARCH_GROUP ###
+# Architecture Variables
+WORLD_X 60        # Width of the Avida world
+WORLD_Y 60       # Height of the Avida world
+WORLD_GEOMETRY 2  # 1 = Bounded Grid
+                  # 2 = Torus
+NUM_DEMES 0       # Number of independed groups in the population; 0=off
+RANDOM_SEED 0     # Random number seed (0 for based on time)
+HARDWARE_TYPE 2   # 0 = Original CPUs
+                  # 1 = New SMT CPUs
+                  # 2 = Transitional SMT
+
+### CONFIG_FILE_GROUP ###
+# Configuration Files
+DATA_DIR data                       # Directory in which config files are found
+INST_SET -                          # File containing instruction set
+EVENT_FILE events.cfg               # File containing list of events during run
+ANALYZE_FILE analyze.cfg            # File used for analysis mode
+ENVIRONMENT_FILE environment.cfg    # File that describes the environment
+START_CREATURE default-transsmt.org  # Organism to seed the soup
+
+### REPRODUCTION_GROUP ###
+# Birth and Death
+BIRTH_METHOD 0           # Which organism should be replaced on birth?
+                         # 0 = Random organism in neighborhood
+                         # 1 = Oldest in neighborhood
+                         # 2 = Largest Age/Merit in neighborhood
+                         # 3 = None (use only empty cells in neighborhood)
+                         # 4 = Random from population (Mass Action)
+                         # 5 = Oldest in entire population
+                         # 6 = Random within deme
+                         # 7 = Organism faced by parent
+                         # 8 = Next grid cell (id+1)
+PREFER_EMPTY 1           # Give empty cells preference in offsping placement?
+DEATH_METHOD 2           # 0 = Never die of old age.
+                         # 1 = Die when inst executed = AGE_LIMIT (+deviation)
+                         # 2 = Die when inst executed = length*AGE_LIMIT (+dev)
+AGE_LIMIT 20             # Modifies DEATH_METHOD
+AGE_DEVIATION 0          # Creates a distribution around AGE_LIMIT
+ALLOC_METHOD 0           # (Orignal CPU Only)
+                         # 0 = Allocated space is set to default instruction.
+                         # 1 = Set to section of dead genome (Necrophilia)
+                         # 2 = Allocated space is set to random instruction.
+DIVIDE_METHOD 1          # 0 = Divide leaves state of mother untouched.
+                         # 1 = Divide resets state of mother
+                         #     (after the divide, we have 2 children)
+                         # 2 = Divide resets state of current thread only
+                         #     (does not touch possible parasite threads)
+GENERATION_INC_METHOD 1  # 0 = Only the generation of the child is
+                         #     increased on divide.
+                         # 1 = Both the generation of the mother and child are
+                         #     increased on divide (good with DIVIDE_METHOD 1).
+
+### RECOMBINATION_GROUP ###
+# Sexual Recombination and Modularity
+RECOMBINATION_PROB 1.0  # probability of recombination in div-sex
+MAX_BIRTH_WAIT_TIME -1  # Updates incipiant orgs can wait for crossover
+MODULE_NUM 0            # number of modules in the genome
+CONT_REC_REGS 1         # are (modular) recombination regions continuous
+CORESPOND_REC_REGS 1    # are (modular) recombination regions swapped randomly
+                        #  or with corresponding positions?
+TWO_FOLD_COST_SEX 0     # 1 = only one recombined offspring is born.
+                        # 2 = both offspring are born
+SAME_LENGTH_SEX 0       # 0 = recombine with any genome
+                        # 1 = only recombine w/ same length
+
+### DIVIDE_GROUP ###
+# Divide Restrictions
+CHILD_SIZE_RANGE 2.0  # Maximal differential between child and parent sizes.
+MIN_COPIED_LINES 0.5  # Code fraction which must be copied before divide.
+MIN_EXE_LINES 0.5     # Code fraction which must be executed before divide.
+REQUIRE_ALLOCATE 1    # (Original CPU Only) Require allocate before divide?
+REQUIRED_TASK -1      # Task ID required for successful divide.
+IMMUNITY_TASK -1      # Task providing immunity from the required task.
+REQUIRED_REACTION -1  # Reaction ID required for successful divide.
+REQUIRED_BONUS 0      # The bonus that an organism must accumulate to divide.
+
+### MUTATION_GROUP ###
+# Mutations
+POINT_MUT_PROB 0.0    # Mutation rate (per-location per update)
+COPY_MUT_PROB 0.0075  # Mutation rate (per copy)
+INS_MUT_PROB 0.0      # Insertion rate (per site, applied on divide)
+DEL_MUT_PROB 0.0      # Deletion rate (per site, applied on divide)
+DIV_MUT_PROB 0.0      # Mutation rate (per site, applied on divide)
+DIVIDE_MUT_PROB 0.0   # Mutation rate (per divide)
+DIVIDE_INS_PROB 0.05  # Insertion rate (per divide)
+DIVIDE_DEL_PROB 0.05  # Deletion rate (per divide)
+PARENT_MUT_PROB 0.0   # Per-site, in parent, on divide
+SPECIAL_MUT_LINE -1   # If this is >= 0, ONLY this line is mutated
+INJECT_INS_PROB 0.0   # Insertion rate (per site, applied on inject)
+INJECT_DEL_PROB 0.0   # Deletion rate (per site, applied on inject)
+INJECT_MUT_PROB 0.0   # Mutation rate (per site, applied on inject)
+
+### REVERSION_GROUP ###
+# Mutation Reversion
+# These slow down avida a lot, and should be set to 0.0 normally.
+REVERT_FATAL 0.0           # Should any mutations be reverted on birth?
+REVERT_DETRIMENTAL 0.0     #   0.0 to 1.0; Probability of reversion.
+REVERT_NEUTRAL 0.0         # 
+REVERT_BENEFICIAL 0.0      # 
+STERILIZE_FATAL 0.0        # Should any mutations clear (kill) the organism?
+STERILIZE_DETRIMENTAL 0.0  # 
+STERILIZE_NEUTRAL 0.0      # 
+STERILIZE_BENEFICIAL 0.0   # 
+FAIL_IMPLICIT 0            # Should copies that failed *not* due to mutations
+                           # be eliminated?
+NEUTRAL_MAX 0.0            # The percent benifical change from parent fitness to be considered neutral.
+NEUTRAL_MIN 0.0            # The percent deleterious change from parent fitness to be considered neutral.
+
+### TIME_GROUP ###
+# Time Slicing
+AVE_TIME_SLICE 30        # Ave number of insts per org per update
+SLICING_METHOD 1         # 0 = CONSTANT: all organisms get default...
+                         # 1 = PROBABILISTIC: Run _prob_ proportional to merit.
+                         # 2 = INTEGRATED: Perfectly integrated deterministic.
+BASE_MERIT_METHOD 4      # 0 = Constant (merit independent of size)
+                         # 1 = Merit proportional to copied size
+                         # 2 = Merit prop. to executed size
+                         # 3 = Merit prop. to full size
+                         # 4 = Merit prop. to min of executed or copied size
+                         # 5 = Merit prop. to sqrt of the minimum size
+BASE_CONST_MERIT 100     # Base merit when BASE_MERIT_METHOD set to 0
+DEFAULT_BONUS 1.0        # Initial bonus before any tasks
+MERIT_DEFAULT_BONUS 0    # Scale the merit of an offspring by the default bonus
+                         # rather than the accumulated bonus of the parent?
+MAX_CPU_THREADS 1        # Number of Threads a CPU can spawn
+THREAD_SLICING_METHOD 0  # Formula for and organism's thread slicing
+                         #   (num_threads-1) * THREAD_SLICING_METHOD + 1
+                         # 0 = One thread executed per time slice.
+                         # 1 = All threads executed each time slice.
+MAX_LABEL_EXE_SIZE 1     # Max nops marked as executed when labels are used
+DONATE_SIZE 5.0          # Amount of merit donated with 'donate' command
+DONATE_MULT 10.0         # Multiple of merit given that the target receives.
+MAX_DONATE_KIN_DIST -1   # Limit on distance of relation for donate; -1=no max
+MAX_DONATE_EDIT_DIST -1  # Limit on edit distance for donate; -1=no max
+MAX_DONATES 1000000      # Limit on number of donates organisms are allowed.
+
+### GENEOLOGY_GROUP ###
+# Geneology
+TRACK_MAIN_LINEAGE 1  # Keep all ancestors of the active population?
+                      # 0=no, 1=yes, 2=yes,w/sexual population
+THRESHOLD 3           # Number of organisms in a genotype needed for it
+                      #   to be considered viable.
+GENOTYPE_PRINT 0      # 0/1 (off/on) Print out all threshold genotypes?
+GENOTYPE_PRINT_DOM 0  # Print out a genotype if it stays dominant for
+                      #   this many updates. (0 = off)
+SPECIES_THRESHOLD 2   # max failure count for organisms to be same species
+SPECIES_RECORDING 0   # 1 = full, 2 = limited search (parent only)
+SPECIES_PRINT 0       # 0/1 (off/on) Print out all species?
+TEST_CPU_TIME_MOD 20  # Time allocated in test CPUs (multiple of length)
+
+### LOG_GROUP ###
+# Log Files
+LOG_CREATURES 0  # 0/1 (off/on) toggle to print file.
+LOG_GENOTYPES 0  # 0 = off, 1 = print ALL, 2 = print threshold ONLY.
+LOG_THRESHOLD 0  # 0/1 (off/on) toggle to print file.
+LOG_SPECIES 0    # 0/1 (off/on) toggle to print file.
+
+### LINEAGE_GROUP ###
+# Lineage
+# NOTE: This should probably be called "Clade"
+# This one can slow down avida a lot. It is used to get an idea of how
+# often an advantageous mutation arises, and where it goes afterwards.
+# Lineage creation options are.  Works only when LOG_LINEAGES is set to 1.
+#   0 = manual creation (on inject, use successive integers as lineage labels).
+#   1 = when a child's (potential) fitness is higher than that of its parent.
+#   2 = when a child's (potential) fitness is higher than max in population.
+#   3 = when a child's (potential) fitness is higher than max in dom. lineage
+# *and* the child is in the dominant lineage, or (2)
+#   4 = when a child's (potential) fitness is higher than max in dom. lineage
+# (and that of its own lineage)
+#   5 = same as child's (potential) fitness is higher than that of the
+#       currently dominant organism, and also than that of any organism
+#       currently in the same lineage.
+#   6 = when a child's (potential) fitness is higher than any organism
+#       currently in the same lineage.
+#   7 = when a child's (potential) fitness is higher than that of any
+#       organism in its line of descent
+LOG_LINEAGES 0             # 
+LINEAGE_CREATION_METHOD 0  # 
+
+### ORGANISM_NETWORK_GROUP ###
+# Organism Network Communication
+NET_ENABLED 0      # Enable Network Communication Support
+NET_DROP_PROB 0.0  # Message drop rate
+NET_MUT_PROB 0.0   # Message corruption probability
+NET_MUT_TYPE 0     # Type of message corruption.  0 = Random Single Bit, 1 = Always Flip Last
+NET_STYLE 0        # Communication Style.  0 = Random Next, 1 = Receiver Facing
+
+### BUY_SELL_GROUP ###
+# Buying and Selling Parameters
+SAVE_RECEIVED 0  # Enable storage of all inputs bought from other orgs
+BUY_PRICE 0      # price offered by organisms attempting to buy
+SELL_PRICE 0     # price offered by organisms attempting to sell
+
+### ANALYZE_GROUP ###
+# Analysis Settings
+MT_CONCURRENCY 1   # Number of concurrent analyze threads
+ANALYZE_OPTION_1   # String variable accessible from analysis scripts
+ANALYZE_OPTION_2   # String variable accessible from analysis scripts

Added: development/tests/default_transsmt_100u/config/default-transsmt.org
===================================================================
--- development/tests/default_transsmt_100u/config/default-transsmt.org	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/config/default-transsmt.org	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,100 @@
+Search       #  1:  Find organism end.
+Nop-C        #  2:  - Match CD:AB
+Nop-D
+Push-Prev    #  5:  Move end position to Stack-A
+SetMemory    #  6:  Place FLOW-head in memory space for offspring
+Nop-A        #      - Memory space labeled Nop-A Nop-A Nop-A
+Head-Move    #  7:  Move Write head to flow head position
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Nop-C        #  8:
+Search       #  9:  Drop flow head at start of copy loop
+Inst-Read    # 10:
+Inst-Write   # 11: 
+Head-Push    # 12:  Get current position of...
+Nop-C        # 13:  - Read-Head
+If-Equal     # 14:  Test if we are done copying...
+Divide       # 15:  ...If so, divide.
+Head-Move    # 16:  ...If not, continue with loop.
+Nop-A        # 17:
+Nop-B		

Added: development/tests/default_transsmt_100u/config/environment.cfg
===================================================================
--- development/tests/default_transsmt_100u/config/environment.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/config/environment.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# This is the setup file for the task/resource system.  From here, you can
+# setup the available resources (including their inflow and outflow rates) as
+# well as the reactions that the organisms can trigger by performing tasks.
+#
+# This file is currently setup to reward 9 tasks, all of which use the
+# "infinite" resource, which is undepletable.
+#
+# For information on how to use this file, see:  doc/environment.html
+# For other sample environments, see:  source/support/config/ 
+#
+##############################################################################
+
+REACTION  NOT  not   process:value=1.0:type=pow  requisite:max_count=1
+REACTION  NAND nand  process:value=1.0:type=pow  requisite:max_count=1
+REACTION  AND  and   process:value=2.0:type=pow  requisite:max_count=1
+REACTION  ORN  orn   process:value=2.0:type=pow  requisite:max_count=1
+REACTION  OR   or    process:value=3.0:type=pow  requisite:max_count=1
+REACTION  ANDN andn  process:value=3.0:type=pow  requisite:max_count=1
+REACTION  NOR  nor   process:value=4.0:type=pow  requisite:max_count=1
+REACTION  XOR  xor   process:value=4.0:type=pow  requisite:max_count=1
+REACTION  EQU  equ   process:value=5.0:type=pow  requisite:max_count=1

Added: development/tests/default_transsmt_100u/config/events.cfg
===================================================================
--- development/tests/default_transsmt_100u/config/events.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/config/events.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,31 @@
+##############################################################################
+#
+# This is the setup file for the events system.  From here, you can
+# configure any actions that you want to have happen during the course of
+# an experiment, including setting the times for data collection.
+#
+# basic syntax: [trigger] [start:interval:stop] [action/event] [arguments...]
+#
+# This file is currently setup to record key information every 100 updates.
+#
+# For information on how to use this file, see:  doc/events.html
+# For other sample event configurations, see:  support/config/
+#
+##############################################################################
+
+# Print all of the standard data files...
+u 0:10:end PrintAverageData       # Save info about they average genotypes
+u 0:10:end PrintDominantData      # Save info about most abundant genotypes
+u 0:10:end PrintStatsData         # Collect satistics about entire pop.
+u 0:10:end PrintCountData         # Count organisms, genotypes, species, etc.
+u 0:10:end PrintTasksData         # Save organisms counts for each task.
+u 0:10:end PrintTimeData          # Track time conversion (generations, etc.)
+u 0:10:end PrintResourceData      # Track resource abundance.
+u 0:10:end PrintDominantGenotype      # Save the most abundant genotypes
+u 0:10:end PrintTasksExeData    # Num. times tasks have been executed.
+u 0:10:end PrintTasksQualData   # Task quality information
+
+# Setup the exit time and full population data collection.
+u 100 SavePopulation         # Save current state of population.
+u 100 SaveHistoricPopulation # Save ancestors of current population.
+u 100 exit                        # exit

Added: development/tests/default_transsmt_100u/config/instset-transsmt.cfg
===================================================================
--- development/tests/default_transsmt_100u/config/instset-transsmt.cfg	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/config/instset-transsmt.cfg	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,50 @@
+# Core Instruction Set
+Nop-A         1  #1  (a)	
+Nop-B         1  #2  (b)
+Nop-C         1  #3  (c)
+Nop-D         1  #4  (d)
+Val-Shift-R   1  #5  (e)
+Val-Shift-L   1  #6  (f)
+Val-Nand      1  #7  (g)
+Val-Add       1  #8  (h)
+Val-Sub       1  #9  (i)
+Val-Mult      1  #10 (j)
+Val-Div       1  #11 (k)
+Val-Mod       1  #12 (l)
+Val-Inc       1  #13 (m)
+Val-Dec       1  #14 (n)
+SetMemory     1  #15 (o)
+Divide        1  #16 (p)
+Inst-Read     1  #17 (q)
+Inst-Write    1  #18 (r)
+If-Equal      1  #19 (s)
+If-Not-Equal  1  #20 (t)
+If-Less       1  #21 (u)
+If-Greater    1  #22 (v)
+Head-Push     1  #23 (w)
+Head-Pop      1  #24 (x)
+Head-Move     1  #25 (y)
+Search        1  #26 (z)
+Push-Next     1  #27 (A)
+Push-Prev     1  #28 (B)
+Push-Comp     1  #29 (C)
+Val-Delete    1  #30 (D)
+Val-Copy      1  #31 (E)
+IO            1  #32 (F)
+
+# Additional Instructions - Disabled by Default
+#Nop-X         1  #33 ()
+#Thread-Create 1  #34 ()
+#Thread-Cancel 1  #35 ()
+#Thread-Kill   1  #36 ()
+#Inject        1  #37 ()
+#Apoptosis     1  #38 ()
+#Net-Get       1  #39 ()
+#Net-Send      1  #40 ()
+#Net-Receive   1  #41 ()
+#Net-Last      1  #42 ()
+#Rotate-Left   1  #43 ()
+#Rotate-Right  1  #44 ()
+#Call-Flow     1  #45 ()
+#Call-Label    1  #46 ()
+#Return        1  #47 ()

Added: development/tests/default_transsmt_100u/expected/data/archive/100-aaaaa.org
===================================================================
--- development/tests/default_transsmt_100u/expected/data/archive/100-aaaaa.org	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/archive/100-aaaaa.org	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,134 @@
+# Thu Mar 22 22:44:48 2007
+# Filename........: archive/100-aaaaa.org
+# Update Output...: 100
+# Is Viable.......: 1
+# Repro Cycle Size: 0
+# Depth to Viable.: 0
+# Update Created..: -1
+# Genotype ID.....: 1
+# Parent Gen ID...: -1
+# Tree Depth......: 0
+# Parent Distance.: -1
+# 
+# Generation: 0
+# Merit...........: 98.000000
+# Gestation Time..: 587
+# Fitness.........: 0.166951
+# Errors..........: 0
+# Genome Size.....: 100
+# Copied Size.....: 100
+# Executed Size...: 98
+# Offspring.......: SELF
+# 
+# Tasks Performed:
+# not 0 (0.000000)
+# nand 0 (0.000000)
+# and 0 (0.000000)
+# orn 0 (0.000000)
+# or 0 (0.000000)
+# andn 0 (0.000000)
+# nor 0 (0.000000)
+# xor 0 (0.000000)
+# equ 0 (0.000000)
+
+
+Search
+Nop-C
+Nop-D
+Push-Prev
+SetMemory
+Nop-A
+Head-Move
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Nop-C
+Search
+Inst-Read
+Inst-Write
+Head-Push
+Nop-C
+If-Equal
+Divide
+Head-Move
+Nop-A
+Nop-B

Added: development/tests/default_transsmt_100u/expected/data/average.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/average.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/average.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,30 @@
+# Avida Average Data
+# Thu Mar 22 22:44:48 2007
+#  1: Update
+#  2: Merit
+#  3: Gestation Time
+#  4: Fitness
+#  5: Repro Rate?
+#  6: Size
+#  7: Copied Size
+#  8: Executed Size
+#  9: Abundance
+# 10: Proportion of organisms that gave birth in this update
+# 11: Proportion of Breed True Organisms
+# 12: Genotype Depth
+# 13: Generation
+# 14: Neutral Metric
+# 15: Lineage Label
+# 16: True Replication Rate (based on births/update, time-averaged)
+
+0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
+10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+20 98 587 0.166951 0 100 100 98 0 0 0 0 1 -2.13704 0 0 
+30 98 587 0.166951 0 100 100 98 0 0 0 0 1 -2.13704 0 0 
+40 98 587 0.166951 0 99.75 100 98 1.33333 0 0 0.5 2 -2.63622 0 0 
+50 98 587 0.166951 0 99.75 100 98 1.33333 0 0 0.5 2 -2.63622 0 0 
+60 97.75 585 0.167094 0 99.75 99.875 97.75 2.66667 0.25 0.25 0.5 3 -3.16955 0 0 
+70 97.75 585 0.167094 0 99.75 99.875 97.75 2.66667 0 0 0.5 3 -3.16955 0 0 
+80 97.75 585 0.167094 0 99.6875 99.8125 97.75 2.66667 0.0625 0.0625 0.6875 4 -3.5277 0 0 
+90 97.75 585 0.167094 0 99.6875 99.8125 97.75 2.66667 0 0 0.6875 4 -3.5277 0 0 
+100 97.0667 583.733 0.166274 0 99.7333 99.7667 97.0667 2 0.0666667 0 1 5 -2.90949 0 0 

Added: development/tests/default_transsmt_100u/expected/data/count.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/count.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/count.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,30 @@
+# Avida count data
+# Thu Mar 22 22:44:48 2007
+#  1: update
+#  2: number of insts executed this update
+#  3: number of organisms
+#  4: number of different genotypes
+#  5: number of different threshold genotypes
+#  6: number of different species
+#  7: number of different threshold species
+#  8: number of different lineages
+#  9: number of births in this update
+# 10: number of deaths in this update
+# 11: number of breed true
+# 12: number of breed true organisms?
+# 13: number of no-birth organisms
+# 14: number of single-threaded organisms
+# 15: number of multi-threaded organisms
+# 16: number of modified organisms
+
+0 30 1 1 1 0 0 0 1 0 1 1 1 1 0 0 
+10 30 1 1 1 0 0 0 0 0 0 1 1 1 0 0 
+20 60 2 1 1 0 0 0 0 0 0 2 1 2 0 0 
+30 60 2 1 1 0 0 0 0 0 0 2 1 2 0 0 
+40 120 4 3 1 0 0 0 0 0 0 2 2 4 0 0 
+50 120 4 3 1 0 0 0 0 0 0 2 2 4 0 0 
+60 180 8 3 1 0 0 0 2 0 2 6 4 8 0 0 
+70 240 8 3 1 0 0 0 0 0 0 6 4 8 0 0 
+80 450 16 6 3 0 0 0 1 0 1 11 8 16 0 0 
+90 480 16 6 3 0 0 0 0 0 0 11 8 16 0 0 
+100 870 30 15 3 0 0 0 2 1 0 16 15 30 0 0 

Added: development/tests/default_transsmt_100u/expected/data/detail-100.pop
===================================================================
--- development/tests/default_transsmt_100u/expected/data/detail-100.pop	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/detail-100.pop	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,32 @@
+#filetype genotype_data
+#format id parent_id parent_dist num_cpus total_cpus length merit gest_time fitness update_born update_dead depth sequence
+
+#  1: ID
+#  2: parent ID
+#  3: parent distance
+#  4: number of orgranisms currently alive
+#  5: total number of organisms that ever existed
+#  6: length of genome
+#  7: merit
+#  8: gestation time
+#  9: fitness
+# 10: update born
+# 11: update deactivated
+# 12: depth in phylogentic tree
+# 13: genome of organism
+
+1 -1 -1 9 9 100 98 587 0.166951 -1 -1 0 zcdBoayccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczqrwcspyab 
+2 1 1 4 5 99 97 581 0.166954 38 -1 1 zcdBoaycccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczqrwcspyab 
+3 1 1 3 3 100 98 585 0.167521 39 -1 1 zcdBoayccccccccccccccccccccccccccccccccccccccccccccccccccecccccccccccccccccccccccccccccccczqrwcspyab 
+5 1 3 2 2 99 0 0 0 79 -1 1 zcdBoaycccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccctccccpcccccccccccccczqrwcspyab 
+6 3 1 2 2 100 0 0 0 79 -1 2 zcdBoayccccccccccccccccccccccccccccccccccccccccccccccccccecccccccccccczccccccccccccccccccczqrwcspyab 
+4 2 3 1 1 99 0 0 0 78 -1 2 zcdBoayccccfccccccccccccccccccccccpccccccccccccccccEccccccccccccccccccccccccccccccccccccczqrwcspyab 
+8 3 2 1 1 100 0 0 0 97 -1 2 zcdBoayccccccccccmcccccccccccccccccccccccccccccccccccwcccecccccccccccccccccccccccccccccccczqrwcspyab 
+9 3 1 1 1 100 0 0 0 99 -1 2 zcdBoayccccccccccccccccccccccccccccccccccccccccccccccccccecccccccccccccccccccccccccccscccczqrwcspyab 
+10 4 1 1 1 99 0 0 0 99 -1 3 zcdBoayccccfccccccccccccccccccccccpccccccccccccccccEcccccccccccccbccccccccccccccccccccccczqrwcspyab 
+11 1 1 1 1 100 0 0 0 99 -1 1 zcdBoaycccccccccccccccccccccccccccccccccccccccccckcccccccccccccccccccccccccccccccccccccccczqrwcspyab 
+12 2 1 1 1 99 0 0 0 99 -1 2 zcdBoayccccccccccccccccccccccccccccccccccccccccccccccccccccccccwccccccccccccccccccccccccczqrwcspyab 
+13 3 3 1 1 101 0 0 0 99 -1 2 zcdBorayccccccccccccccccccccccccccccccccaccccccccccccccccceccccccccccccccdccccccccccccccccczqrwcspyab 
+14 1 1 1 1 100 0 0 0 99 -1 1 zcdBoaycccclcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczqrwcspyab 
+15 1 1 1 1 100 0 0 0 100 -1 1 zcdBoayBcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczqrwcspyab 
+16 1 1 1 1 100 0 0 0 100 -1 1 zcdBoaycccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbccccccczqrwcspyab 

Added: development/tests/default_transsmt_100u/expected/data/dominant.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/dominant.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/dominant.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,30 @@
+# Avida Dominant Data
+# Thu Mar 22 22:44:48 2007
+#  1: Update
+#  2: Average Merit of the Dominant Genotype
+#  3: Average Gestation Time of the Dominant Genotype
+#  4: Average Fitness of the Dominant Genotype
+#  5: Repro Rate?
+#  6: Size of Dominant Genotype
+#  7: Copied Size of Dominant Genotype
+#  8: Executed Size of Dominant Genotype
+#  9: Abundance of Dominant Genotype
+# 10: Number of Births
+# 11: Number of Dominant Breed True?
+# 12: Dominant Gene Depth
+# 13: Dominant Breed In
+# 14: Max Fitness?
+# 15: Genotype ID of Dominant Genotype
+# 16: Name of the Dominant Genotype
+
+0 0.000000 0.000000 0.000000 0.000000 100 0.000000 0.000000 1 0 0 0 0 0.000000 1 100-aaaaa 
+10 0 0 0 0 100 0 0 1 0 0 0 0 0 1 100-aaaaa 
+20 0 0 0 0 100 0 0 2 0 0 0 0 0.166951 1 100-aaaaa 
+30 0 0 0 0 100 0 0 2 0 0 0 0 0.166951 1 100-aaaaa 
+40 98 587 0.166951 0.00170358 100 100 98 2 0 0 0 0 0.166951 1 100-aaaaa 
+50 98 587 0.166951 0.00170358 100 100 98 2 0 0 0 0 0.166951 1 100-aaaaa 
+60 98 587 0.166951 0.00170358 100 100 98 4 2 2 0 0 0.167521 1 100-aaaaa 
+70 98 587 0.166951 0.00170358 100 100 98 4 0 0 0 0 0.167521 1 100-aaaaa 
+80 98 587 0.166951 0.00170358 100 100 98 7 1 1 0 0 0.167521 1 100-aaaaa 
+90 98 587 0.166951 0.00170358 100 100 98 7 0 0 0 0 0.167521 1 100-aaaaa 
+100 98 587 0.166951 0.00170358 100 100 98 9 2 0 0 0 0.168111 1 100-aaaaa 

Added: development/tests/default_transsmt_100u/expected/data/historic-100.pop
===================================================================
--- development/tests/default_transsmt_100u/expected/data/historic-100.pop	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/historic-100.pop	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,17 @@
+#filetype genotype_data
+#format id parent_id parent_dist num_cpus total_cpus length merit gest_time fitness update_born update_dead depth sequence
+
+#  1: ID
+#  2: parent ID
+#  3: parent distance
+#  4: number of orgranisms currently alive
+#  5: total number of organisms that ever existed
+#  6: length of genome
+#  7: merit
+#  8: gestation time
+#  9: fitness
+# 10: update born
+# 11: update deactivated
+# 12: depth in phylogentic tree
+# 13: genome of organism
+

Added: development/tests/default_transsmt_100u/expected/data/resource.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/resource.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/resource.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,17 @@
+# Avida resource data
+# Thu Mar 22 22:44:48 2007
+# First column gives the current update, all further columns give the quantity
+# of the particular resource at that update.
+#  1: Update
+
+0 
+10 
+20 
+30 
+40 
+50 
+60 
+70 
+80 
+90 
+100 

Added: development/tests/default_transsmt_100u/expected/data/stats.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/stats.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/stats.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,26 @@
+# Generic Statistics Data
+# Thu Mar 22 22:44:48 2007
+#  1: update
+#  2: average inferiority (energy)
+#  3: ave probability of any mutations in genome
+#  4: probability of any mutations in dom genome
+#  5: log(average fidelity)
+#  6: log(dominant fidelity)
+#  7: change in number of genotypes
+#  8: genotypic entropy
+#  9: species entropy
+# 10: depth of most reacent coalescence
+# 11: Total number of resamplings this generation
+# 12: Total number of organisms that failed to resample this generation
+
+0 0.000000 0.097500 0.564736 0.102587 0.831801 1 -0.000000 0.000000 0 6395120 27 
+10 0 0.0975 0.564736 0.102587 0.831801 0 -0 0 0 0 0 
+20 0 0.564736 0.564736 0.831801 0.831801 0 -0 0 0 0 0 
+30 0 0.564736 0.564736 0.831801 0.831801 0 -0 0 0 0 0 
+40 0 0.563941 0.564736 0.829978 0.831801 0 1.03972 0 0 0 0 
+50 0 0.563941 0.564736 0.829978 0.831801 0 1.03972 0 0 0 0 
+60 -0.000858723 0.563941 0.564736 0.829978 0.831801 0 1.03972 0 0 0 0 
+70 -0.000858723 0.563941 0.564736 0.829978 0.831801 0 1.03972 0 0 0 0 
+80 -0.000858723 0.563742 0.564736 0.829523 0.831801 0 1.50927 0 0 0 0 
+90 -0.000858723 0.563742 0.564736 0.829523 0.831801 0 1.50927 0 0 0 0 
+100 0.00406138 0.563888 0.564736 0.829857 0.831801 1 2.35491 0 0 0 0 

Added: development/tests/default_transsmt_100u/expected/data/tasks.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/tasks.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/tasks.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,26 @@
+# Avida tasks data
+# Thu Mar 22 22:44:48 2007
+# First column gives the current update, next columns give the number
+# of organisms that have the particular task as a component of their merit
+#  1: Update
+#  2: Not
+#  3: Nand
+#  4: And
+#  5: OrNot
+#  6: Or
+#  7: AndNot
+#  8: Nor
+#  9: Xor
+# 10: Equals
+
+0 0 0 0 0 0 0 0 0 0 
+10 0 0 0 0 0 0 0 0 0 
+20 0 0 0 0 0 0 0 0 0 
+30 0 0 0 0 0 0 0 0 0 
+40 0 0 0 0 0 0 0 0 0 
+50 0 0 0 0 0 0 0 0 0 
+60 0 0 0 0 0 0 0 0 0 
+70 0 0 0 0 0 0 0 0 0 
+80 0 0 0 0 0 0 0 0 0 
+90 0 0 0 0 0 0 0 0 0 
+100 0 0 0 0 0 0 0 0 0 

Added: development/tests/default_transsmt_100u/expected/data/tasks_exe.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/tasks_exe.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/tasks_exe.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,26 @@
+# Avida tasks execution data
+# Thu Mar 22 22:44:48 2007
+# First column gives the current update, all further columns give the number
+# of times the particular task has been executed this update.
+#  1: Update
+#  2: Not
+#  3: Nand
+#  4: And
+#  5: OrNot
+#  6: Or
+#  7: AndNot
+#  8: Nor
+#  9: Xor
+# 10: Equals
+
+0 0 0 0 0 0 0 0 0 0 
+10 0 0 0 0 0 0 0 0 0 
+20 0 0 0 0 0 0 0 0 0 
+30 0 0 0 0 0 0 0 0 0 
+40 0 0 0 0 0 0 0 0 0 
+50 0 0 0 0 0 0 0 0 0 
+60 0 0 0 0 0 0 0 0 0 
+70 0 0 0 0 0 0 0 0 0 
+80 0 0 0 0 0 0 0 0 0 
+90 0 0 0 0 0 0 0 0 0 
+100 0 0 0 0 0 0 0 0 0 

Added: development/tests/default_transsmt_100u/expected/data/tasks_quality.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/tasks_quality.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/tasks_quality.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,34 @@
+# Avida tasks quality data
+# Thu Mar 22 22:44:48 2007
+# First column gives the current update, rest give average and max task quality
+#  1: Update
+#  2: Not Average
+#  3: Not Max
+#  4: Nand Average
+#  5: Nand Max
+#  6: And Average
+#  7: And Max
+#  8: OrNot Average
+#  9: OrNot Max
+# 10: Or Average
+# 11: Or Max
+# 12: AndNot Average
+# 13: AndNot Max
+# 14: Nor Average
+# 15: Nor Max
+# 16: Xor Average
+# 17: Xor Max
+# 18: Equals Average
+# 19: Equals Max
+
+0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
+10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

Added: development/tests/default_transsmt_100u/expected/data/time.dat
===================================================================
--- development/tests/default_transsmt_100u/expected/data/time.dat	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/expected/data/time.dat	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,18 @@
+# Avida time data
+# Thu Mar 22 22:44:48 2007
+#  1: update
+#  2: avida time
+#  3: average generation
+#  4: num_executed?
+
+0 0.000000 0.000000 30 
+10 0 0 30 
+20 0.0102041 1 60 
+30 0.112245 1 60 
+40 0.214286 2 120 
+50 0.316327 2 120 
+60 0.418479 3 180 
+70 0.520781 3 240 
+80 0.623102 4 450 
+90 0.725403 4 480 
+100 0.8279 5 870 

Added: development/tests/default_transsmt_100u/test_list
===================================================================
--- development/tests/default_transsmt_100u/test_list	2007-03-22 18:48:17 UTC (rev 1421)
+++ development/tests/default_transsmt_100u/test_list	2007-03-23 02:54:38 UTC (rev 1422)
@@ -0,0 +1,11 @@
+[main]
+args = -s 100
+
+[consistency]
+enabled = yes
+long = no
+
+[performance]
+enabled = no
+long = no
+




More information about the Avida-cvs mailing list