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 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
require 'benchmark'
def foo0
end
def foo3 a, b, c
end
def foo6 a, b, c, d, e, f
end
def iter0
yield
end
def iter1
yield 1
end
def iter3
yield 1, 2, 3
end
def iter6
yield 1, 2, 3, 4, 5, 6
end
(1..6).each{|i|
kws = (1..i).map{|e| "k#{e}: #{e}"}
eval %Q{
def foo_kw#{i}(#{kws.join(', ')})
end
}
kws = (1..i).map{|e| "k#{e}:"}
eval %Q{
def foo_required_kw#{i}(#{kws.join(', ')})
end
}
}
(1..6).each{|i|
kws = (1..i).map{|e| "k#{e}: #{e} + 1"}
eval %Q{
def foo_complex_kw#{i}(#{kws.join(', ')})
end
}
}
(1..6).each{|i|
kws = (1..i).map{|e| "k#{e}: #{e}"}
eval %Q{
def iter_kw#{i}
yield #{kws.join(', ')}
end
}
}
ary1 = [1]
ary2 = [[1, 2, 3, 4, 5]]
test_methods = %Q{
# empty 1
# empty 2
foo0
foo3 1, 2, 3
foo6 1, 2, 3, 4, 5, 6
foo_kw1
foo_kw2
foo_kw3
foo_kw4
foo_kw5
foo_kw6
foo_kw6 k1: 1
foo_kw6 k1: 1, k2: 2
foo_kw6 k1: 1, k2: 2, k3: 3
foo_kw6 k1: 1, k2: 2, k3: 3, k4: 4
foo_kw6 k1: 1, k2: 2, k3: 3, k4: 4, k5: 5
foo_kw6 k1: 1, k2: 2, k3: 3, k4: 4, k5: 5, k6: 6
foo_required_kw1 k1: 1
foo_required_kw2 k1: 1, k2: 2
foo_required_kw3 k1: 1, k2: 2, k3: 3
foo_required_kw4 k1: 1, k2: 2, k3: 3, k4: 4
foo_required_kw5 k1: 1, k2: 2, k3: 3, k4: 4, k5: 5
foo_required_kw6 k1: 1, k2: 2, k3: 3, k4: 4, k5: 5, k6: 6
foo_complex_kw1
foo_complex_kw2
foo_complex_kw3
foo_complex_kw4
foo_complex_kw5
foo_complex_kw6
foo_complex_kw6 k1: 1
foo_complex_kw6 k1: 1, k2: 2
foo_complex_kw6 k1: 1, k2: 2, k3: 3
foo_complex_kw6 k1: 1, k2: 2, k3: 3, k4: 4
foo_complex_kw6 k1: 1, k2: 2, k3: 3, k4: 4, k5: 5
foo_complex_kw6 k1: 1, k2: 2, k3: 3, k4: 4, k5: 5, k6: 6
iter0{}
iter1{}
iter1{|a|}
iter3{}
iter3{|a|}
iter3{|a, b, c|}
iter6{}
iter6{|a|}
iter6{|a, b, c, d, e, f, g|}
iter0{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
iter_kw1{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
iter_kw2{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
iter_kw3{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
iter_kw4{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
iter_kw5{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
iter_kw6{|k1: nil, k2: nil, k3: nil, k4: nil, k5: nil, k6: nil|}
ary1.each{|e|}
ary1.each{|e,|}
ary1.each{|a, b, c, d, e|}
ary2.each{|e|}
ary2.each{|e,|}
ary2.each{|a, b, c, d, e|}
}
N = 10_000_000
max_line = test_methods.each_line.max_by{|line| line.strip.size}
max_size = max_line.strip.size
Benchmark.bm(max_size){|x|
str = test_methods.each_line.map{|line| line.strip!
next if line.empty?
%Q{
x.report(#{line.dump}){
i = 0
while i<#{N}
#{line}
i+=1
end
}
}
}.join("\n")
eval str
}
|