Skip to content
This repository
tree: 7b555320e3
Fetching contributors…

Cannot retrieve contributors at this time

file 126 lines (109 sloc) 2.405 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
#
# Ruby benchmark driver
#

require 'benchmark'
require 'rbconfig'

$matzrubyonly = false
$rubyonly = false

$results = []

# prepare 'wc.input'
def prepare_wc_input
  wcinput = File.join(File.dirname($0), 'wc.input')
  wcbase = File.join(File.dirname($0), 'wc.input.base')
  unless FileTest.exist?(wcinput)
    data = File.read(wcbase)
    13.times{
      data << data
    }
    open(wcinput, 'w'){|f| f.write data}
  end
end

prepare_wc_input

def bm file
  prog = File.readlines(file).map{|e| e.rstrip}.join("\n")
  return if prog.empty?

  /[a-z]+_(.+)\.rb/ =~ file
  bm_name = $1
  puts '-----------------------------------------------------------' unless $rubyonly || $matzrubyonly
  puts "#{bm_name}: "
  
  
puts <<EOS unless $matzrubyonly || $rubyonly
#{prog}
--
EOS
  begin
    result = [bm_name]
    result << matzruby_exec(file) unless $rubyonly
    result << ruby_exec(file) unless $matzrubyonly
    $results << result

  rescue Exception => e
    puts
    puts "** benchmark failure: #{e}"
    puts e.backtrace
  end
end

def benchmark file, bin
  m = Benchmark.measure{
    `#{bin} #{$opts} #{file}`
  }
  sec = '%.3f' % m.real
  puts " #{sec}"
  sec
end

def ruby_exec file
  print 'ruby'
  benchmark file, $ruby_program
end

def matzruby_exec file
  print 'matz'
  rubylib = ENV['RUBYLIB']
  ENV['RUBYLIB'] = ''
  r = benchmark file, $matzruby_program
  ENV['RUBYLIB'] = rubylib
  r
end

if $0 == __FILE__
  ARGV.each{|arg|
    case arg
    when /\A--ruby=(.+)/
      $ruby_program = $1
    when /\A--matzruby=(.+)/
      $matzruby_program = $1
    when /\A--opts=(.+)/
      $opts = $1
    when /\A(-r|--only-ruby)\z/
      $rubyonly = true
    when /\A(-m|--only-matzruby)\z/
      $matzrubyonly = true
    end
  }
  ARGV.delete_if{|arg|
    /\A-/ =~ arg
  }
  
  puts "MatzRuby:"
  system("#{$matzruby_program} -v")
  puts "Ruby:"
  system("#{$ruby_program} -v")
  puts

  if ARGV.empty?
    Dir.glob(File.dirname(__FILE__) + '/bm_*.rb').sort.each{|file|
      bm file
    }
  else
    ARGV.each{|file|
      Dir.glob(File.join(File.dirname(__FILE__), file + '*')){|ef|
        # file = "#{File.dirname(__FILE__)}/#{file}.rb"
        bm ef
      }
    }
  end

  puts
  puts "-- benchmark summary ---------------------------"
  $results.each{|res|
    print res.shift, "\t"
    (res||[]).each{|result|
      /([\d\.]+)/ =~ result
      print $1 + "\t" if $1
    }
    puts
  }
end
Something went wrong with that request. Please try again.