Program: 180313
Project: 180313
Buggy source:
@Override public SpawnedDataBlock spawn(OrthogonalSpace space,InitialSampling initialSampling){
  float[] sampleDistances=new float[initialSampling.getDimension()];
  for (int dim=0; dim < sampleDistances.length; dim++) {
    if (initialSampling.getNumberOfSamples(dim) >= 1) {
      sampleDistances[dim]=Math.abs(space.getMinBounds().getValue(dim) - space.getMaxBounds().getValue(dim)) / (initialSampling.getNumberOfSamples(dim) - 1);
    }
 else {
      sampleDistances[dim]=-1;
    }
  }
  List<Point> primarySeeds=new ArrayList<>();
  primarySeeds.add(space.getMinBounds());
  for (int dim=0; dim < sampleDistances.length; dim++) {
    if (sampleDistances[dim] == -1) {
      continue;
    }
    int numOfOldSeeds=primarySeeds.size();
    for (int seed=0; seed < numOfOldSeeds; seed++) {
      for (int sample=1; sample < initialSampling.getNumberOfSamples(dim); sample++) {
        float[] newPoint=primarySeeds.get(seed).toArrayCopy();
        newPoint[dim]+=sample * sampleDistances[dim];
        Point newSeed=new ArrayPoint(primarySeeds.get(seed).getTime(),newPoint);
        primarySeeds.add(newSeed);
      }
    }
  }
  final List<TrajectoryWithNeighborhood> primaryTrajectories=new ArrayList<>(primarySeeds.size());
  Map<Point,Trajectory> cache=new HashMap<>();
  for (  Point p : primarySeeds) {
    List<Trajectory> neighborhood=new ArrayList<>();
    for (int dim=0; dim < sampleDistances.length; dim++) {
      if (sampleDistances[dim] == -1) {
        continue;
      }
      float[] positiveNeighborArray=p.toArrayCopy();
      float[] negativeNeighborArray=p.toArrayCopy();
      positiveNeighborArray[dim]+=sampleDistances[dim] / 2;
      negativeNeighborArray[dim]-=sampleDistances[dim] / 2;
      Point positiveNeighbor=new ArrayPoint(p.getTime(),positiveNeighborArray);
      Point negativeNeighbor=new ArrayPoint(p.getTime(),negativeNeighborArray);
      if (!cache.containsKey(positiveNeighbor)) {
        cache.put(positiveNeighbor,new PointTrajectory(positiveNeighbor));
      }
      if (!cache.containsKey(negativeNeighbor)) {
        cache.put(negativeNeighbor,new PointTrajectory(negativeNeighbor));
      }
      neighborhood.add(cache.get(positiveNeighbor));
      neighborhood.add(cache.get(negativeNeighbor));
    }
    primaryTrajectories.add(new PointTrajectory(new ListDataBlock<>(neighborhood),p));
  }
  List<Trajectory> secondaryTrajectories=new ArrayList<>(cache.values());
  return new SpawnedDataBlockWrapper(new ListDataBlock<>(primaryTrajectories),new AbstractConfiguration(initialSampling,space){
    @Override public int getStartIndex(    int index,    int neighborIndex){
      return 0;
    }
  }
,new ListDataBlock<>(secondaryTrajectories));
}

Fixed version (ground truth):
@Override public SpawnedDataBlock spawn(OrthogonalSpace space,InitialSampling initialSampling){
  float[] sampleDistances=new float[initialSampling.getDimension()];
  for (int dim=0; dim < sampleDistances.length; dim++) {
    if (initialSampling.getNumberOfSamples(dim) > 1) {
      sampleDistances[dim]=Math.abs(space.getMinBounds().getValue(dim) - space.getMaxBounds().getValue(dim)) / (initialSampling.getNumberOfSamples(dim) - 1);
    }
 else {
      sampleDistances[dim]=-1;
    }
  }
  List<Point> primarySeeds=new ArrayList<>();
  primarySeeds.add(space.getMinBounds());
  for (int dim=0; dim < sampleDistances.length; dim++) {
    if (sampleDistances[dim] == -1) {
      continue;
    }
    int numOfOldSeeds=primarySeeds.size();
    for (int seed=0; seed < numOfOldSeeds; seed++) {
      for (int sample=1; sample < initialSampling.getNumberOfSamples(dim); sample++) {
        float[] newPoint=primarySeeds.get(seed).toArrayCopy();
        newPoint[dim]+=sample * sampleDistances[dim];
        Point newSeed=new ArrayPoint(primarySeeds.get(seed).getTime(),newPoint);
        primarySeeds.add(newSeed);
      }
    }
  }
  final List<TrajectoryWithNeighborhood> primaryTrajectories=new ArrayList<>(primarySeeds.size());
  Map<Point,Trajectory> cache=new HashMap<>();
  for (  Point p : primarySeeds) {
    List<Trajectory> neighborhood=new ArrayList<>();
    for (int dim=0; dim < sampleDistances.length; dim++) {
      if (sampleDistances[dim] == -1) {
        continue;
      }
      float[] positiveNeighborArray=p.toArrayCopy();
      float[] negativeNeighborArray=p.toArrayCopy();
      positiveNeighborArray[dim]+=sampleDistances[dim] / 2;
      negativeNeighborArray[dim]-=sampleDistances[dim] / 2;
      Point positiveNeighbor=new ArrayPoint(p.getTime(),positiveNeighborArray);
      Point negativeNeighbor=new ArrayPoint(p.getTime(),negativeNeighborArray);
      if (!cache.containsKey(positiveNeighbor)) {
        cache.put(positiveNeighbor,new PointTrajectory(positiveNeighbor));
      }
      if (!cache.containsKey(negativeNeighbor)) {
        cache.put(negativeNeighbor,new PointTrajectory(negativeNeighbor));
      }
      neighborhood.add(cache.get(positiveNeighbor));
      neighborhood.add(cache.get(negativeNeighbor));
    }
    primaryTrajectories.add(new PointTrajectory(new ListDataBlock<>(neighborhood),p));
  }
  List<Trajectory> secondaryTrajectories=new ArrayList<>(cache.values());
  return new SpawnedDataBlockWrapper(new ListDataBlock<>(primaryTrajectories),new AbstractConfiguration(initialSampling,space){
    @Override public int getStartIndex(    int index,    int neighborIndex){
      return 0;
    }
  }
,new ListDataBlock<>(secondaryTrajectories));
}