summaryrefslogtreecommitdiff
path: root/dict/dict_test.go
diff options
context:
space:
mode:
authorJonas Knobloch <jonas.knobloch@t-online.de>2026-09-09 02:40:41 +0200
committerJonas Knobloch <jonas.knobloch@t-online.de>2026-09-09 02:40:41 +0200
commit8fd3f8aeec85f47d43ef36a81456d48640ca33f9 (patch)
tree3c42c767dba661dfa28275379de35145f71611d8 /dict/dict_test.go
parent08400210cfdfd5769ce2d48db5234fbeae2e0c6e (diff)
Add dict module
Diffstat (limited to 'dict/dict_test.go')
-rw-r--r--dict/dict_test.go78
1 files changed, 78 insertions, 0 deletions
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)
+ }
+}