Change soft-fail to use the config, rather than env
[rbx.git] / benchmark / yarv / run.rb
blob7f4899e7dd1b60383661643b607d500cdb4b7aab
2 # Ruby benchmark driver
5 require 'benchmark'
6 require 'rbconfig'
8 $matzrubyonly = false
9 $rubyonly = false
11 $results  = []
13 # prepare 'wc.input'
14 def prepare_wc_input
15   wcinput = File.join(File.dirname($0), 'wc.input')
16   wcbase  = File.join(File.dirname($0), 'wc.input.base')
17   unless FileTest.exist?(wcinput)
18     data = File.read(wcbase)
19     13.times{
20       data << data
21     }
22     open(wcinput, 'w'){|f| f.write data}
23   end
24 end
26 prepare_wc_input
28 def bm file
29   prog = File.readlines(file).map{|e| e.rstrip}.join("\n")
30   return if prog.empty?
32   /[a-z]+_(.+)\.rb/ =~ file
33   bm_name = $1
34   puts '-----------------------------------------------------------' unless $rubyonly || $matzrubyonly
35   puts "#{bm_name}: "
36   
37   
38 puts <<EOS unless $matzrubyonly || $rubyonly
39 #{prog}
41 EOS
42   begin
43     result = [bm_name]
44     result << matzruby_exec(file) unless $rubyonly
45     result << ruby_exec(file) unless $matzrubyonly
46     $results << result
48   rescue Exception => e
49     puts
50     puts "** benchmark failure: #{e}"
51     puts e.backtrace
52   end
53 end
55 def benchmark file, bin
56   m = Benchmark.measure{
57     `#{bin} #{$opts} #{file}`
58   }
59   sec = '%.3f' % m.real
60   puts " #{sec}"
61   sec
62 end
64 def ruby_exec file
65   print 'ruby'
66   benchmark file, $ruby_program
67 end
69 def matzruby_exec file
70   print 'matz'
71   benchmark file, $matzruby_program
72 end
74 if $0 == __FILE__
75   ARGV.each{|arg|
76     case arg
77     when /\A--ruby=(.+)/
78       $ruby_program = $1
79     when /\A--matzruby=(.+)/
80       $matzruby_program = $1
81     when /\A--opts=(.+)/
82       $opts = $1
83     when /\A(-r|--only-ruby)\z/
84       $rubyonly = true
85     when /\A(-m|--only-matzruby)\z/
86       $matzrubyonly = true
87     end
88   }
89   ARGV.delete_if{|arg|
90     /\A-/ =~ arg
91   }
92   
93   puts "MatzRuby:"
94   system("#{$matzruby_program} -v")
95   puts "Ruby:"
96   system("#{$ruby_program} -v")
97   puts
99   if ARGV.empty?
100     Dir.glob(File.dirname(__FILE__) + '/bm_*.rb').sort.each{|file|
101       bm file
102     }
103   else
104     ARGV.each{|file|
105       Dir.glob(File.join(File.dirname(__FILE__), file + '*')){|ef|
106         # file = "#{File.dirname(__FILE__)}/#{file}.rb"
107         bm ef
108       }
109     }
110   end
112   puts
113   puts "-- benchmark summary ---------------------------"
114   $results.each{|res|
115     print res.shift, "\t"
116     (res||[]).each{|result|
117       /([\d\.]+)/ =~ result
118       print $1 + "\t" if $1
119     }
120     puts
121   }