mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			140 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
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
 | 
						|
}
 |