Class: TestBench::Output::Digest
- Inherits:
-
Object
- Object
- TestBench::Output::Digest
- Defined in:
- lib/test_bench/output/digest.rb
Defined Under Namespace
Modules: Defaults
Instance Attribute Summary collapse
Class Method Summary collapse
Instance Method Summary collapse
- #clone ⇒ Object
- #digest ⇒ Object (also: #value, #to_i)
- #digest?(data) ⇒ Boolean
- #format ⇒ Object
- #to_s ⇒ Object
- #update(data) ⇒ Object
Instance Attribute Details
#buffer ⇒ Object
9 10 11 |
# File 'lib/test_bench/output/digest.rb', line 9 def buffer @buffer ||= String.new(encoding: 'BINARY', capacity: Defaults.size_bytes * 2) end |
#last_digest ⇒ Object
4 5 6 |
# File 'lib/test_bench/output/digest.rb', line 4 def last_digest @last_digest ||= 0 end |
Class Method Details
.digest(data) ⇒ Object
14 15 16 17 18 |
# File 'lib/test_bench/output/digest.rb', line 14 def self.digest(data) instance = new instance.update(data) instance.digest end |
.format(digest) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/test_bench/output/digest.rb', line 69 def self.format(digest) if digest < 0 # 0x8000... sign_mask = 0x1 << (8 * Defaults.size_bytes - 1) # 0x7FFF... mask = (256 ** Defaults.size_bytes - 1) ^ sign_mask digest_uint64 = ~digest & mask | sign_mask else digest_uint64 = digest end "0x%016X" % digest_uint64 end |
Instance Method Details
#clone ⇒ Object
20 21 22 23 24 25 |
# File 'lib/test_bench/output/digest.rb', line 20 def clone cloned_digest = Digest.new cloned_digest.last_digest = last_digest cloned_digest.buffer << buffer cloned_digest end |
#digest ⇒ Object Also known as: value, to_i
46 47 48 49 50 51 52 53 54 |
# File 'lib/test_bench/output/digest.rb', line 46 def digest buffer_bytes = buffer.unpack('C*')[0...8] buffer_int64 = buffer_bytes.reduce(0) do |int64, byte| (int64 << 8) | byte end (last_digest + buffer_int64) % (256 ** Defaults.size_bytes - 1) end |
#digest?(data) ⇒ Boolean
58 59 60 61 62 |
# File 'lib/test_bench/output/digest.rb', line 58 def digest?(data) other_digest = self.class.digest(data) digest == other_digest end |
#format ⇒ Object
64 65 66 |
# File 'lib/test_bench/output/digest.rb', line 64 def format self.class.format(value) end |
#to_s ⇒ Object
67 68 69 |
# File 'lib/test_bench/output/digest.rb', line 67 def format self.class.format(value) end |
#update(data) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/test_bench/output/digest.rb', line 27 def update(data) digest_size_bytes = Defaults.size_bytes (0..data.bytesize).step(digest_size_bytes).each do |position| next_bytes = data.byteslice(position, digest_size_bytes) next_bytes.force_encoding('BINARY') buffer << next_bytes if buffer.length >= digest_size_bytes self.last_digest = digest buffer.slice!(0, 8) end end digest end |