# module Benchmark::Compare

Functionality of performaing comparison between reports.

Usage:

Add `x.compare!` to perform comparison between reports.

Example:

    > Benchmark.ips do |x|
      x.report('Reduce using tag')     { [*1..10].reduce(:+) }
      x.report('Reduce using to_proc') { [*1..10].reduce(&:+) }
      x.compare!
    end

    Calculating -------------------------------------
        Reduce using tag     19216 i/100ms
    Reduce using to_proc     17437 i/100ms
    -------------------------------------------------
        Reduce using tag   278950.0 (±8.5%) i/s -    1402768 in   5.065112s
    Reduce using to_proc   247295.4 (±8.0%) i/s -    1238027 in   5.037299s

    Comparison:
        Reduce using tag:   278950.0 i/s
    Reduce using to_proc:   247295.4 i/s - 1.13x slower

Besides regular Calculating report, this will also indicates which one is slower.

### Public Instance Methods

compare(*entries) click to toggle source

Compare between reports, prints out facts of each report: runtime, comparative speed difference. @param entries [Array<Report::Entry>] Reports to compare.

    # File lib/benchmark/compare.rb, line 33
    def compare(*entries)
      return if entries.size < 2

      sorted = entries.sort_by{ |e| e.stats.central_tendency }.reverse

      best = sorted.shift

      $stdout.puts "\nComparison:"

      $stdout.printf "%20s: %10.1f i/s\n", best.label, best.stats.central_tendency

      sorted.each do |report|
        name = report.label.to_s

        $stdout.printf "%20s: %10.1f i/s - ", name, report.stats.central_tendency

        best_low = best.stats.central_tendency - best.stats.error
        report_high = report.stats.central_tendency + report.stats.error
        overlaps = report_high > best_low

        if overlaps
          $stdout.print "same-ish: difference falls within error"
        else
          slowdown, error = report.stats.slowdown(best.stats)
          $stdout.printf "%.2fx ", slowdown
          if error
            $stdout.printf " (± %.2f)", error
          end
          $stdout.print " slower"
        end

        $stdout.puts
      end

      footer = best.stats.footer
      $stdout.puts footer.rjust(40) if footer

      $stdout.puts
    end