Skip to content

Commit

Permalink
Updated for Crystal 0.35.0
Browse files Browse the repository at this point in the history
  • Loading branch information
naqvis committed Jun 11, 2020
1 parent 8b2eaab commit 7627c20
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 23 deletions.
4 changes: 2 additions & 2 deletions shard.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: fnv
version: 0.1.0
version: 0.1.1

authors:
- Ali Naqvi <syed.alinaqvi@gmail.com>

crystal: 0.34.0
crystal: 0.35.0

license: MIT
33 changes: 32 additions & 1 deletion spec/fnv_spec.cr
Original file line number Diff line number Diff line change
@@ -1,4 +1,35 @@
require "./spec_helper"

describe FNV do
describe Digest::FNV do
it "Test Hashes" do
# 32bit FNV-1
digest = Digest::FNV32.digest("foo")
h = IO::ByteFormat::BigEndian.decode(UInt32, digest) # => 1083137555
h.should eq(1083137555u32)

# 32bit FNV-1a
digest = Digest::FNV32A.digest("foo")
h = IO::ByteFormat::BigEndian.decode(UInt32, digest) # => 2851307223
h.should eq(2851307223u32)

# 64bit FNV-1
digest = Digest::FNV64.digest("foo")
h = IO::ByteFormat::BigEndian.decode(UInt64, digest) # => 15621798640163566899
h.should eq(15621798640163566899u64)

# 64bit FNV-1a
digest = Digest::FNV64A.digest("foo")
h = IO::ByteFormat::BigEndian.decode(UInt64, digest) # => 15902901984413996407
h.should eq(15902901984413996407u64)

# 128bit FNV-1
digest = Digest::FNV128.digest("foo")
h = IO::ByteFormat::BigEndian.decode(UInt128, digest) # => 221377198890555750482995053501755142603
h.to_s.should eq("221377198890555750482995053501755142603")

# 128bit FNV-1a
digest = Digest::FNV128A.digest("foo")
h = IO::ByteFormat::BigEndian.decode(UInt128, digest) # => 221385884292107687162785618921601726655
h.to_s.should eq("221385884292107687162785618921601726655")
end
end
4 changes: 2 additions & 2 deletions src/fnv.cr
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# FNV module implements FNV-1 and FNV-1a, non-cryptographic hash functions created by
# Glenn Fowler, Landon Curt Noll, and Phong Vo.
module FNV
VERSION = "0.1.0"
module Digest::FNV
VERSION = "0.1.1"
end

require "./fnv/**"
30 changes: 24 additions & 6 deletions src/fnv/fnv128.cr
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Digest::FNV128 < Digest::Base
@hash = [OFFSET_H, OFFSET_L]
end

def update(data)
def update_impl(data : Bytes) : Nil
data.to_slice.each do |b|
# compute the multiplication
s0, s1 = mul64(PRIME_L, @hash[1])
Expand All @@ -22,7 +22,12 @@ class Digest::FNV128 < Digest::Base
end
end

def final
def final_impl(result : Bytes) : Nil
val = IO::Memory.new
@hash.each do |h|
IO::ByteFormat::BigEndian.encode(h, val)
end
result.copy_from(val.to_slice.to_unsafe, result.size)
end

def result
Expand All @@ -34,7 +39,11 @@ class Digest::FNV128 < Digest::Base
result.to_slice
end

def reset
def digest_size : Int32
sizeof(UInt128)
end

def reset_impl : Nil
@hash = [OFFSET_H, OFFSET_L]
end

Expand All @@ -53,7 +62,7 @@ class Digest::FNV128A < Digest::Base
@hash = [OFFSET_H, OFFSET_L]
end

def update(data)
def update_impl(data : Bytes) : Nil
data.to_slice.each do |b|
@hash[1] ^= b.to_u64
# compute the multiplication
Expand All @@ -65,7 +74,12 @@ class Digest::FNV128A < Digest::Base
end
end

def final
def final_impl(result : Bytes) : Nil
val = IO::Memory.new
@hash.each do |h|
IO::ByteFormat::BigEndian.encode(h, val)
end
result.copy_from(val.to_slice.to_unsafe, result.size)
end

def result
Expand All @@ -77,7 +91,11 @@ class Digest::FNV128A < Digest::Base
result.to_slice
end

def reset
def digest_size : Int32
sizeof(UInt128)
end

def reset_impl : Nil
@hash = [OFFSET_H, OFFSET_L]
end

Expand Down
22 changes: 16 additions & 6 deletions src/fnv/fnv32.cr
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ class Digest::FNV32 < Digest::Base
@hash = OFFSET
end

def update(data)
def update_impl(data : Bytes) : Nil
data.to_slice.each do |b|
@hash &*= PRIME
@hash ^= b.to_u32
end
end

def final
def final_impl(result : Bytes) : Nil
IO::ByteFormat::BigEndian.encode(@hash, result)
end

def result
Expand All @@ -24,7 +25,11 @@ class Digest::FNV32 < Digest::Base
result
end

def reset
def digest_size : Int32
sizeof(UInt32)
end

def reset_impl : Nil
@hash = OFFSET
end

Expand All @@ -41,14 +46,15 @@ class Digest::FNV32A < Digest::Base
@hash = OFFSET
end

def update(data)
def update_impl(data : Bytes) : Nil
data.to_slice.each do |b|
@hash ^= b.to_u32
@hash &*= PRIME
end
end

def final
def final_impl(result : Bytes) : Nil
IO::ByteFormat::BigEndian.encode(@hash, result)
end

def result
Expand All @@ -57,7 +63,11 @@ class Digest::FNV32A < Digest::Base
result
end

def reset
def digest_size : Int32
sizeof(UInt32)
end

def reset_impl : Nil
@hash = OFFSET
end

Expand Down
22 changes: 16 additions & 6 deletions src/fnv/fnv64.cr
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ class Digest::FNV64 < Digest::Base
@hash = OFFSET
end

def update(data)
def update_impl(data : Bytes) : Nil
data.to_slice.each do |b|
@hash &*= PRIME
@hash ^= b.to_u64
end
end

def final
def final_impl(result : Bytes) : Nil
IO::ByteFormat::BigEndian.encode(@hash, result)
end

def result
Expand All @@ -24,7 +25,11 @@ class Digest::FNV64 < Digest::Base
result
end

def reset
def digest_size : Int32
sizeof(typeof(@hash))
end

def reset_impl : Nil
@hash = OFFSET
end

Expand All @@ -41,14 +46,15 @@ class Digest::FNV64A < Digest::Base
@hash = OFFSET
end

def update(data)
def update_impl(data : Bytes) : Nil
data.to_slice.each do |b|
@hash ^= b.to_u64
@hash &*= PRIME
end
end

def final
def final_impl(result : Bytes) : Nil
IO::ByteFormat::BigEndian.encode(@hash, result)
end

def result
Expand All @@ -57,7 +63,11 @@ class Digest::FNV64A < Digest::Base
result
end

def reset
def digest_size : Int32
sizeof(typeof(@hash))
end

def reset_impl : Nil
@hash = OFFSET
end

Expand Down

0 comments on commit 7627c20

Please sign in to comment.