code: public UReport press(final UMode mode, final int iterations, final int stableSpan, final double stableBound,
              final long timeLimit, final TimeUnit timeUnit) {
  
          // make sense of any out-of-bounds input parameters.
          UMode vmode = mode == null ? UMode.INTERLEAVED : mode;
          int vit = iterations <= 0 ? 0 : Math.min(MAX_RESULTS, iterations);
          int vmin = (stableSpan <= 0 || stableBound <= 0) ? 0 : Math.min(stableSpan, vit);
          long vtime = timeLimit <= 0 ? 0 : (timeUnit == null ? 0 : timeUnit.toNanos(timeLimit));
          
          final long start = System.nanoTime();
          LOGGER.fine(() -> String.format("UBench suite %s: running all tasks in mode %s", suiteName, vmode.name()));
  
          TaskRunner[] mytasks = getTasks(vit, vmin, stableBound, vtime);
          UStats[] ret = vmode.getModel().executeTasks(suiteName, mytasks);
          
          final long time = System.nanoTime() - start;
          LOGGER.info(() -> String.format("UBench suite %s: completed benchmarking all tasks using mode %s in %.3fms", 
                  suiteName, vmode.name(), time / 1000000.0));
          
          return new UReport(Arrays.asList(ret));
      }
docs: Benchmark all added tasks until they complete the desired iteration
  count, reaches stability, or exceed the given time limit, whichever comes
  first.
  
  @param mode
  The UMode execution model to use for task execution
  @param iterations
  maximum number of iterations to run.
  @param stableSpan
  If this many iterations in a row are all within the
  maxVariance, then the benchmark ends. A value less than, or
  equal to 0 turns off this check
  @param stableBound
  Expressed as a percent from 0.0 to 100.0, and so on
  @param timeLimit
  combined with the timeUnit, indicates how long to run tests
  for. A value less than or equal to 0 turns off this check.
  @param timeUnit
  combined with the timeLimit, indicates how long to run tests
  for.
  @return the results of all completed tasks.