From 09b5d9d8934337721501a3efbf4d761680b19ec7 Mon Sep 17 00:00:00 2001 From: "M.V. Hutz" Date: Thu, 19 Mar 2026 21:57:22 -0400 Subject: [PATCH] feat: 100% mutation test coverage - Fixed mutation coverage to be 1.0, instead of 100. --- .gremlins.yaml | 2 +- cuckoo_test.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/.gremlins.yaml b/.gremlins.yaml index 3c777aa..bbef13a 100644 --- a/.gremlins.yaml +++ b/.gremlins.yaml @@ -6,4 +6,4 @@ unleash: workers: 4 dry-run: false threshold: - efficacy: 100 \ No newline at end of file + efficacy: 1.0 \ No newline at end of file diff --git a/cuckoo_test.go b/cuckoo_test.go index 1c66b60..b4dfddb 100644 --- a/cuckoo_test.go +++ b/cuckoo_test.go @@ -1,6 +1,7 @@ package cuckoo_test import ( + "errors" "maps" "math/rand/v2" "testing" @@ -153,3 +154,88 @@ func TestDropNoItem(t *testing.T) { assert.Equal(0, table.Size()) assert.False(table.Has(key)) } + +func TestDropItemCapacity(t *testing.T) { + assert := assert.New(t) + key := 0 + table := cuckoo.NewTable[int, bool]( + cuckoo.Capacity(64), + cuckoo.GrowthFactor(2), + ) + + startingCapacity := table.TotalCapacity() + err := table.Drop(key) + endingCapacity := table.TotalCapacity() + + assert.NoError(err) + assert.Equal(0, table.Size()) + assert.Equal(uint64(128), startingCapacity) + assert.Equal(uint64(64), endingCapacity) +} + +func TestPutNoCapacity(t *testing.T) { + assert := assert.New(t) + key, value := 0, true + table := cuckoo.NewTable[int, bool]( + cuckoo.Capacity(0), + ) + + err := table.Put(key, value) + + assert.NoError(err) + assert.Equal(1, table.Size()) + assert.True(table.Has(key)) +} + +func TestBadHashCapacity(t *testing.T) { + assert := assert.New(t) + table := cuckoo.NewCustomTable[int, bool]( + func(int) uint64 { return 0 }, + func(int) uint64 { return 0 }, + func(a, b int) bool { return a == b }, + cuckoo.Capacity(20), + ) + + err1 := table.Put(0, true) + err2 := table.Put(1, true) + err3 := table.Put(2, true) + + assert.NoError(err1) + assert.NoError(err2) + assert.Error(err3) + + assert.Equal(uint64(80), table.TotalCapacity()) +} + +func TestDropResizeCapacity(t *testing.T) { + assert := assert.New(t) + table := cuckoo.NewTable[int, bool]( + cuckoo.Capacity(10), + ) + + err1 := table.Put(0, true) + err2 := table.Put(1, true) + err3 := table.Drop(1) + + assert.NoError(errors.Join(err1, err2, err3)) + assert.Equal(uint64(20), table.TotalCapacity()) +} + +func TestNewTableBy(t *testing.T) { + type User struct { + _ func() + id string + name string + } + + assert := assert.New(t) + table := cuckoo.NewTableBy[User, bool]( + func(u User) string { return u.id }, + ) + + err := table.Put(User{nil, "1", "Robert"}, true) + + assert.NoError(err) + assert.Equal(1, table.Size()) + assert.True(table.Has(User{nil, "1", "Robbie"})) +}