forked from postmodern/digest-crc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
benchmarks.rb
executable file
·58 lines (52 loc) · 1.52 KB
/
benchmarks.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
53
54
55
56
57
58
#!/usr/bin/env ruby
require 'benchmark'
$LOAD_PATH.unshift(File.expand_path('../ext',__FILE__))
$LOAD_PATH.unshift(File.expand_path('../lib',__FILE__))
CRCs = {
'crc1' => 'CRC1',
'crc5' => 'CRC5',
'crc8' => 'CRC8',
'crc8_1wire' => 'CRC81Wire',
'crc15' => 'CRC15',
'crc16' => 'CRC16',
'crc16_ccitt' => 'CRC16CCITT',
'crc16_dnp' => 'CRC16DNP',
'crc16_genibus' => 'CRC16Genibus',
'crc16_modbus' => 'CRC16Modbus',
'crc16_qt' => 'CRC16QT',
'crc16_usb' => 'CRC16USB',
'crc16_x_25' => 'CRC16X25',
'crc16_xmodem' => 'CRC16XModem',
'crc16_zmodem' => 'CRC16ZModem',
'crc24' => 'CRC24',
'crc32' => 'CRC32',
'crc32_bzip2' => 'CRC32BZip2',
'crc32c' => 'CRC32c',
'crc32_jam' => 'CRC32Jam',
'crc32_mpeg' => 'CRC32Mpeg',
'crc32_posix' => 'CRC32POSIX',
'crc32_xfer' => 'CRC32XFER',
'crc64' => 'CRC64',
'crc64_jones' => 'CRC64Jones',
'crc64_xz' => 'CRC64XZ',
}
puts "Loading Digest::CRC classes ..."
CRCs.each_key { |crc| require "digest/#{crc}" }
N = 1000
BLOCK_SIZE = 8 * 1024
puts "Generating #{N} #{BLOCK_SIZE / 1024}Kb lengthed strings ..."
SAMPLES = Array.new(N) do
Array.new(BLOCK_SIZE) { rand(256).chr }.join
end
puts "Benchmarking Digest::CRC classes ..."
Benchmark.bm do |b|
CRCs.each_value do |crc|
crc_class = Digest.const_get(crc)
crc = crc_class.new
b.report("#{crc_class}#update") do
SAMPLES.each do |sample|
crc.update(sample)
end
end
end
end