Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / bench_method_missing.rb
blobfd65a9c7885e0eaf7026e9037fb50908845cc265
1 require 'benchmark'
3 class MM
4   def method_missing(sym, *args)
5     1
6   end
7 end
8 class MM2
9   def method_missing(sym, *args)
10     send :bar
11   end
12   
13   def bar
14     1
15   end
16 end
17 class MM2a
18   def method_missing(sym, *args)
19     send :bar1, *args
20   end
21   
22   def bar1(a)
23     1
24   end
25 end
26 class MM2b
27   def method_missing(sym, *args)
28     send :bar4, *args
29   end
30   
31   def bar4(a,b,c,d)
32     1
33   end
34 end
35 class MM3
36   def method_missing(sym, *args, &block)
37     1
38   end
39 end
41 mm = MM.new
42 mm2 = MM2.new
43 mm2a = MM2a.new
44 mm2b = MM2b.new
45 mm3 = MM3.new
47 5.times {
48 Benchmark.bm(40) do |bm|
49   bm.report("1M method_missing") do
50     1000000.times { mm.foo }
51   end
52   bm.report("1M sends") do
53     1000000.times { mm2.send :bar }
54   end
55   bm.report("1M method_missing with send") do
56     1000000.times { mm2.foo }
57   end
58   bm.report("1M method_missing with block") do
59     1000000.times { mm3.foo }
60   end
61   bm.report("1M 1-arg method_missing") do
62     1000000.times { mm.foo 1 }
63   end
64   bm.report("1M 1-arg sends") do
65     1000000.times { mm2a.send :bar1, 1 }
66   end
67   bm.report("1M 1-arg method_missing with send") do
68     1000000.times { mm2a.foo 1 }
69   end
70   bm.report("1M 1-arg method_missing with block") do
71     1000000.times { mm3.foo 1 }
72   end
73   bm.report("1M 4-arg method_missing") do
74     1000000.times { mm.foo 1,2,3,4 }
75   end
76   bm.report("1M 4-arg sends") do
77     1000000.times { mm2b.send :bar,1,2,3,4 }
78   end
79   bm.report("1M 4-arg method_missing with send") do
80     1000000.times { mm2b.foo 1,2,3,4 }
81   end
82   bm.report("1M 4-arg method_missing with block") do
83     1000000.times { mm3.foo 1,2,3,4 }
84   end
85 end