#! /usr/bin/ruby
require 'benchmark'

def dummy
end

def block_dummy(&b)
  dummy()
end

def block_pass(&b)
  dummy(&b)
end

def block_arg(b)
  dummy(&b)
end

def arg_pass
  dummy {|*a| yield *a}
end

$yield = proc {|*a| yield *a}
def arg_block
  dummy(&$yield)
end

ITERATION = 100000
Benchmark.benchmark() do |b|
  b.report("block_pass ") {ITERATION.times{block_pass(){}}}
  b.report("block_dummy") {ITERATION.times{block_dummy(){}}}
  b.report("block_arg  ") {p = proc{}; ITERATION.times{block_arg(p)}}
  b.report("arg_pass   ") {ITERATION.times{arg_pass(){}}}
  b.report("arg_block  ") {ITERATION.times{arg_block(){}}}
end
