feat(lsm): iterator over items in trie

This commit is contained in:
Jef Roosens 2023-12-23 10:06:02 +01:00
parent 5564e23ceb
commit f4d711365d
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
9 changed files with 229 additions and 8 deletions

View file

@ -120,7 +120,7 @@ void test_iter() {
lsm_bt_iter(&iter, bt);
char key;
const void *data;
void *data;
size_t i = 0;
while (lsm_bt_iter_next(&data, &key, &iter)) {

View file

@ -25,8 +25,64 @@ void test_insert_one() {
TEST_CHECK(data == (void *)1);
}
void test_iter() {
TRIE_INIT();
lsm_str *s;
lsm_str_init_copy(&s, "hello");
TEST_CHECK(lsm_trie_insert(trie, s, (void *)1) == lsm_error_ok);
lsm_str_init_copy(&s, "hella");
TEST_CHECK(lsm_trie_insert(trie, s, (void *)2) == lsm_error_ok);
lsm_str_init_copy(&s, "hel");
TEST_CHECK(lsm_trie_insert(trie, s, (void *)3) == lsm_error_ok);
lsm_str_init_copy(&s, "wow");
TEST_CHECK(lsm_trie_insert(trie, s, (void *)4) == lsm_error_ok);
lsm_str_init_copy(&s, "hel");
lsm_trie_iterator *iter;
TEST_CHECK(lsm_trie_iter(&iter, trie, s) == lsm_error_ok);
void *data;
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)3, "%p == %p", data, (void *)3);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)2, "%p == %p", data, (void *)2);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)1, "%p == %p", data, (void *)1);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_done);
lsm_trie_iter_free(iter);
// Test full trie iterator
TEST_CHECK(lsm_trie_iter(&iter, trie, NULL) == lsm_error_ok);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)3, "%p == %p", data, (void *)3);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)2, "%p == %p", data, (void *)2);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)1, "%p == %p", data, (void *)1);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_ok);
TEST_CHECK_(data == (void *)4, "%p == %p", data, (void *)4);
TEST_CHECK(lsm_trie_iter_next(&data, iter) == lsm_error_done);
lsm_trie_iter_free(iter);
}
TEST_LIST = {
{ "trie init", test_init },
{ "trie insert one", test_insert_one },
{ "trie iter", test_iter },
{ NULL, NULL }
};