@Test
  public void testXorEvolveOnce() throws CloneNotSupportedException {
    final TreeMap<Double, SignalProcessingWavelet> population =
        new TreeMap<Double, SignalProcessingWavelet>();

    // initialize the population
    final GlobalSignalConcentration xAxis = new GlobalSignalConcentration();
    final GlobalSignalConcentration yAxis = new GlobalSignalConcentration();
    final GlobalSignalConcentration output = new GlobalSignalConcentration();
    while (population.size() < POPULATION_SIZE) {
      SignalProcessingWavelet processor = new SignalProcessingWavelet(xAxis, output);
      processor = mutateXor(processor, xAxis, yAxis);

      processor.preTick();
      processor.tick();
      final double initialFitness =
          checkXorFitness(processor.getWavelet(), processor.getWaveCount());

      population.put(initialFitness, processor);
    }

    // run through several generations
    for (int generationIndex = 0; generationIndex < GENERATIONS; generationIndex++) {
      // check if we reached the goal prematurely.
      if (population.lastKey() >= 4.0) break;

      // fill off all but the top EXTINCTION_SIZE performing members
      while (population.size() > EXTINCTION_SIZE) population.pollFirstEntry();

      // repopulate to POPULATION_SIZE members
      ArrayList<SignalProcessingWavelet> populationArray =
          new ArrayList<SignalProcessingWavelet>(population.values());
      while (population.size() < POPULATION_SIZE) {
        SignalProcessingWavelet processor =
            populationArray.get(RANDOM.nextInt(populationArray.size()));
        processor = mutateXor(processor, xAxis, yAxis);

        processor.preTick();
        processor.tick();
        final double initialFitness =
            checkXorFitness(processor.getWavelet(), processor.getWaveCount());

        population.put(initialFitness, processor);
      }
    }

    final double bestFitness = population.lastKey();
    Assert.assertTrue(
        "did not successfully match XOR truth table: fitness: " + bestFitness, bestFitness >= 4.0);
  }