class Benchmark::IPS::Job

def run

Run calculation.
def run
  @list.each do |item|
    @suite.running item.label, @time if @suite
    unless @quiet
      $stdout.print item.label_rjust
    end
    Timing.clean_env
    iter = 0
    target = Time.now + @time
    measurements_us = []
    # Running this number of cycles should take around 100ms.
    cycles = @timing[item]
    while Time.now < target
      before = Time.now
      item.call_times cycles
      after = Time.now
      # If for some reason the timing said this took no time (O_o)
      # then ignore the iteration entirely and start another.
      iter_us = time_us before, after
      next if iter_us <= 0.0
      iter += cycles
      measurements_us << iter_us
    end
    final_time = Time.now
    measured_us = measurements_us.inject(0) { |a,i| a + i }
    all_ips = measurements_us.map { |time_us|
      iterations_per_sec cycles, time_us
    }
    avg_ips = Timing.mean(all_ips)
    sd_ips =  Timing.stddev(all_ips).round
    rep = create_report(item, measured_us, iter, avg_ips, sd_ips, cycles)
    if (final_time - target).abs >= (@time.to_f * MAX_TIME_SKEW)
      rep.show_total_time!
    end
    $stdout.puts " #{rep.body}" unless @quiet
    @suite.add_report rep, caller(1).first if @suite
  end
end