package cuckoo_test import ( "bytes" "encoding/binary" "maps" "testing" "github.com/stretchr/testify/assert" "git.maximhutz.com/tools/go-cuckoo" ) func offsetHash(seed uint32) cuckoo.Hash[uint32] { return func(x uint32) uint64 { v := uint64(x) ^ uint64(seed) v = (v ^ (v >> 30)) * 0xbf58476d1ce4e5b9 v = (v ^ (v >> 27)) * 0x94d049bb133111eb return v ^ (v >> 31) } } func FuzzInsertLookup(f *testing.F) { f.Fuzz(func(t *testing.T, data []byte, seedA, seedB uint32) { assert := assert.New(t) actual := cuckoo.NewCustomTable[uint32, uint32]( offsetHash(seedA), offsetHash(seedB), func(a, b uint32) bool { return a == b }, ) expected := map[uint32]uint32{} if seedA == seedB { return } r := bytes.NewReader(data) var key, value uint32 var drop bool for binary.Read(r, binary.LittleEndian, &key) == nil && binary.Read(r, binary.LittleEndian, &value) == nil { if drop { err := actual.Drop(key) assert.NoError(err) delete(expected, key) _, err = actual.Get(key) assert.Error(err) } else { err := actual.Put(key, value) assert.NoError(err) expected[key] = value found, err := actual.Get(key) assert.NoError(err) assert.Equal(value, found) } assert.Equal(expected, maps.Collect(actual.Entries())) drop = !drop } }) }