## benchmark

require 'benchmark'

total = (ENV['TOTAL'] || 100_000).to_i

STRING = "rdnqsp uxq\nhnokjirs\nb c6rlh|4c@jcb av8\nPvunszwijhy lz kdgy7hlKlR nzqxg\ndqldeg nm-yg vmnb mk gdrn x"

class String
def while_loop
i = 0
while i < @bytes
char = @data[i]
i += 1
end
end
end

Benchmark.bmbm do |x|
x.report("loop") do
total.times do |i|
i
end
end

x.report("while_loop") do
total.times do |i|
STRING.while_loop
end
end

x.report("each_byte") do
total.times do |i|
STRING.each_byte { |c| c }
end
end
end

## result
68-26-244-235:rubinius brian$ shotgun/rubinius bm_each_byte.rb
Rehearsal ----------------------------------------------
loop 0.021077 0.000000 0.021077 ( 0.021173)
while_loop 1.142466 0.000000 1.142466 ( 1.142510)
each_byte 2.705700 0.000000 2.705700 ( 2.705811)
------------------------------------- total: 3.869243sec

user system total real
loop 0.021191 0.000000 0.021191 ( 0.021194)
while_loop 1.071735 0.000000 1.071735 ( 1.071749)
each_byte 2.667623 0.000000 2.667623 ( 2.667608)