chore: move from tools/dsa (#1)
Some checks failed
CI / lint (push) Successful in 51s
CI / unit-test (push) Failing after 25s
CI / fuzz-test (push) Successful in 1m1s
CI / mutation-test (push) Successful in 42s

Moved the implementation of this hash table from `tools/dsa` #1.

Reviewed-on: #1
Co-authored-by: M.V. Hutz <git@maximhutz.me>
Co-committed-by: M.V. Hutz <git@maximhutz.me>
This commit was merged in pull request #1.
This commit is contained in:
2026-03-17 01:22:42 +00:00
committed by Maxim Hutz
parent 553117cb30
commit 717408239b
18 changed files with 1022 additions and 0 deletions

34
hash_example_test.go Normal file
View File

@@ -0,0 +1,34 @@
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
}