require 'benchmark'
total = (ENV['TOTAL'] || 1_000).to_i
fixnums = Array.new(total).fill { |a| rand(100_000).to_i }
bignums = Array.new(total).fill { |a| 0xffff_ffff_ffff_ffff + rand(100_000).to_i }
floats = Array.new(total).fill { |a| rand(100_000).to_f }
Benchmark.bmbm do |x|
x.report("loop") do
times = 0
while times < total
i, j = 0, total-1
while i < total
i += 1
j -= 1
end
times += 1
end
end
x.report("Fixnum + Fixnum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
fixnums[i] + fixnums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Bignum + Bignum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
bignums[i] + bignums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Float + Float") do
times = 0
while times < total
i, j = 0, total-1
while i < total
floats[i] + floats[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Bignum + Fixnum") do
times = 0
while times < total
i, j = 0, total-1
while i < total
bignums[i] + fixnums[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Bignum + Float") do
times = 0
while times < total
i, j = 0, total-1
while i < total
bignums[i] + floats[j]
i += 1
j -= 1
end
times += 1
end
end
x.report("Fixnum + Float") do
times = 0
while times < total
i, j = 0, total-1
while i < total
fixnums[i] + floats[j]
i += 1
j -= 1
end
times += 1
end
end
end