code: ImmutableSet<Experiment> dryRun(Iterable<Experiment> experiments)
        throws InvalidBenchmarkException {
      ImmutableSet.Builder<Experiment> builder = ImmutableSet.builder();
      for (Experiment experiment : experiments) {
        Class<?> clazz = benchmarkClass.benchmarkClass();
        try {
          Object benchmark = injector.createChildInjector(ExperimentModule.forExperiment(experiment))
              .getInstance(Key.get(clazz));
          benchmarkClass.setUpBenchmark(benchmark);
          try {
            experiment.instrumentation().dryRun(benchmark);
            builder.add(experiment);
          } finally {
            // discard 'benchmark' now; the worker will have to instantiate its own anyway
            benchmarkClass.cleanup(benchmark);
          }
        } catch (ProvisionException e) {
          Throwable cause = e.getCause();
          if (cause != null) {
            throw new UserCodeException(cause);
          }
          throw e;
        } catch (CreationException e) {
          // Guice formatting is a little ugly
          StringBuilder message = new StringBuilder(
              "Could not create an instance of the benchmark class following reasons:");
          int errorNum = 0;
          for (Message guiceMessage : e.getErrorMessages()) {
            message.append("\n  ").append(++errorNum).append(") ")
                .append(guiceMessage.getMessage());
          }
          throw new InvalidBenchmarkException(message.toString(), e);
        } catch (SkipThisScenarioException innocuous) {}
      }
      return builder.build();
    }
docs: Attempts to run each given scenario once, in the current VM. Returns a set of all of the
  scenarios that didn't throw a {@link SkipThisScenarioException}.