From 8fd3f8aeec85f47d43ef36a81456d48640ca33f9 Mon Sep 17 00:00:00 2001 From: Jonas Knobloch Date: Wed, 9 Sep 2026 02:40:41 +0200 Subject: Add dict module --- dict/dict_test.go | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 dict/dict_test.go (limited to 'dict/dict_test.go') diff --git a/dict/dict_test.go b/dict/dict_test.go new file mode 100644 index 0000000..c5fb717 --- /dev/null +++ b/dict/dict_test.go @@ -0,0 +1,78 @@ +package dict + +import ( + "fmt" + "slices" + "strings" + "testing" +) + +func TestDict_Sort(t *testing.T) { + d := NewDict[string]() + + d.Set("foo", "foo") + d.Set("bar", "bar") + d.Set("baz", "baz") + + d.Sort(func(a, b Entry[string]) int { + return strings.Compare(a.Key, b.Key) + }) + + expected := []Entry[string]{ + {"bar", "bar"}, + {"baz", "baz"}, + {"foo", "foo"}, + } + + verifyMap(t, d) + + if !slices.Equal(d.s, expected) { + t.Fatalf("expected %v but got %v", expected, d.s) + } +} + +func verifyMap(t *testing.T, dict *Dict[string]) { + if len(dict.m) != len(dict.s) { + t.Fatalf("length missmatch") + } + + for i, s := range dict.s { + v, ok := dict.m[s.Key] + + if !ok { + t.Fatalf("unknown key %s", s) + } + + if v != i { + t.Errorf("expected %d but got %d\n", i, v) + } + } +} + +func BenchmarkDict_Get(b *testing.B) { + d := NewDict[int]() + + for i := 0; i < 1000; i++ { + d.Set(fmt.Sprintf("key_%d", i), i) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, _ = d.Get("key_500") + } +} + +func BenchmarkDict_GetBytes(b *testing.B) { + d := NewDict[int]() + + for i := 0; i < 1000; i++ { + d.Set(fmt.Sprintf("key_%d", i), i) + } + + keyBytes := []byte("key_500") + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, _ = d.GetBytes(keyBytes) + } +} -- cgit v1.3.1