Hello all,

With the BBv1 testing infrastructure, I'd like to be able to build a test executable and then run it several times with different sets of parameters. Each different run should be considered as a separate test (some could fail while others do not). I have a kludge to do it, which basically creates a bunch of targets dependent on the same sources, which is quite trivial:

rule mpi-runtest (
  target : sources + : requirements * : local-build * : args * : schedule * )
{
  schedule ?= 1 2 17 ;

  for local procs in $(schedule)
  {
    local gRUN_TEST_ARGS = -np $(procs) $(args) ;
    local gRUN_TEST_ARGS2 = $(MPI_TEST_ARGS) ;

    # Munge the target to include the number of processors.  
    local target = "$(target)-$(procs)" ;

    # Build the MPI executable test
    local result = [
      boost-test $(sources)
        <template>mpi
        : RUN_MPI
        : $(requirements)
        : $(target)
        : $(local-build)
    ] ;
  }
}

Unfortunately, this kludge means that everything $(sources) in sources is compiled once for each target that we create, e.g., we'll get:
  all-gather-1/.../all-gather-1.exe
  all-gather-1/.../all-gather-1.o
  all-gather-2/.../all-gather-2.exe
  all-gather-2/.../all-gather-2.o
  all-gather-17/.../all-gather-17.exe
  all-gather-17/.../all-gather-17.o
  // ...

I've taken various stabs at sharing at least some of the intermediate files among all of these tests, but without luck, yet. It seems that we should either (1) generate a single all-gather/.../all-gather.exe and then stage/clone it over into the other test locations (e.g., all-gather-1/.../all-gather-1.exe) or (2) build all of the .o files in all-gather/.../ and then link separate all-gather-1/.../all-gather-1.exe, all-gather-2/.../all-gather-2.exe, etc. executables.

Does anyone know how I can achieve this functionality in BBv1's testing environment?

  Doug

P.S. You can safely ignore the <template>mpi and RUN_MPI stuff; it just makes it so that we actually run the executables through an auxiliarly executable called "mpirun". The morbidly curious can check out boost-sandbox/libs/parallel/test.