lak (owner)

Revisions

gist: 141183 Download_button fork
public
Public Clone URL: git://gist.github.com/141183.git
checksum_testing.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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