Files
go-cuckoo/hash_example_test.go
M.V. Hutz b762417b80
All checks were successful
CI / lint (pull_request) Successful in 51s
CI / unit-test (pull_request) Successful in 25s
CI / mutation-test (pull_request) Successful in 2m44s
CI / fuzz-test (pull_request) Successful in 1m2s
chore: move from tools/dsa
Moved the implementation of this hash table from `tools/dsa` #1.
2026-03-16 21:10:08 -04:00

35 lines
815 B
Go

package cuckoo_test
import (
"crypto/hmac"
"crypto/sha256"
"encoding/binary"
"fmt"
"io"
"git.maximhutz.com/tools/go-cuckoo"
)
func NewStringHash(seed uint64) cuckoo.Hash[string] {
key := binary.LittleEndian.AppendUint64(nil, seed)
hash := hmac.New(sha256.New, key)
return func(key string) uint64 {
hash.Reset()
// This will never return an error, as part of the [hash.Hash] contract. We
// can safely ignore it.
(io.WriteString(hash, key))
return binary.LittleEndian.Uint64(hash.Sum(nil))
}
}
func ExampleHash_stringHash() {
hash := NewStringHash(1)
fmt.Printf("Digest 'Hello, world!': %x\n", hash("Hello, world!"))
fmt.Printf("Digest 'Hello, world?': %x\n", hash("Hello, world?"))
// Output:
// Digest 'Hello, world!': dc6602d6edcdf549
// Digest 'Hello, world?': 432c2ddc1ae9f14b
}