Skip to content

Instantly share code, notes, and snippets.

@lak
Created July 5, 2009 23:46
Show Gist options
  • Select an option

  • Save lak/141183 to your computer and use it in GitHub Desktop.

Select an option

Save lak/141183 to your computer and use it in GitHub Desktop.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment