class ChecksumTesting require 'digest/md5' require 'benchmark' def benchmark(label) seconds = Benchmark.realtime { yield } puts "%s in %0.2f seconds" % [label, seconds] end def initialize(file) @filename = file end def run [512, 1024, 1024*1024].each do |size| benchmark("Buffer size %s" % size) do 5.times { md5(size) } end end benchmark("External md5") do 5.times { test_external } end end def test_large md5(1024*1024*1024) end def test_small md5(512) end def test_external output = %x{md5sum #{@filename}} end private def md5(buffer) digest = Digest::MD5.new() File.open(@filename, 'r') do |file| while content = file.read(buffer) digest << content end end return digest.hexdigest end end