From 2964c5ef63968054eed587d520f3bedcea9ce41f Mon Sep 17 00:00:00 2001 From: johson-ll Date: Tue, 3 Dec 2024 18:34:13 +0800 Subject: [PATCH] test: add test case for memiterator.go (#22725) Co-authored-by: heren-ke --- store/cachekv/internal/memiterator_test.go | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 store/cachekv/internal/memiterator_test.go diff --git a/store/cachekv/internal/memiterator_test.go b/store/cachekv/internal/memiterator_test.go new file mode 100644 index 0000000000..25e049cbe2 --- /dev/null +++ b/store/cachekv/internal/memiterator_test.go @@ -0,0 +1,73 @@ +package internal + +import ( + "testing" +) + +func TestMemIterator_Ascending(t *testing.T) { + db := NewBTree() + // db.set() + db.Set([]byte("a"), []byte("value_a")) + db.Set([]byte("b"), []byte("value_b")) + db.Set([]byte("c"), []byte("value_c")) + + iterator := newMemIterator([]byte("a"), []byte("c"), db, true) + + var result []string + for iterator.Valid() { + result = append(result, string(iterator.Key())) + iterator.Next() + } + + expected := []string{"a", "b", "c"} + for i, key := range result { + if key != expected[i] { + t.Errorf("Expected %s, got %s", expected[i], key) + } + } + + if iterator.Valid() { + t.Errorf("Iterator should be invalid after last item") + } +} + +func TestMemIterator_Descending(t *testing.T) { + db := NewBTree() + + db.Set([]byte("a"), []byte("value_a")) + db.Set([]byte("b"), []byte("value_b")) + db.Set([]byte("c"), []byte("value_c")) + db.Set([]byte("d"), []byte("value_d")) + + iterator := newMemIterator([]byte("a"), []byte("d"), db, false) + + var result []string + for iterator.Valid() { + result = append(result, string(iterator.Key())) + iterator.Next() + } + + expected := []string{"c", "b", "a"} + for i, key := range result { + if key != expected[i] { + t.Errorf("Expected %s, got %s", expected[i], key) + } + } + + if iterator.Valid() { + t.Errorf("Iterator should be invalid after last item") + } +} + +func TestMemIterator_EmptyRange(t *testing.T) { + db := NewBTree() + db.Set([]byte("a"), []byte("value_a")) + db.Set([]byte("b"), []byte("value_b")) + db.Set([]byte("c"), []byte("value_c")) + + iterator := newMemIterator([]byte("d"), []byte("e"), db, true) + + if iterator.Valid() { + t.Errorf("Iterator should be invalid for empty range") + } +}