diff --git a/core/containers/index.c b/core/containers/index.c deleted file mode 100644 index 1646b036..00000000 --- a/core/containers/index.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2014 (c) Anna Schumaker. - */ -#include - - -static struct index_entry *__index_alloc(gchar *key) -{ - struct index_entry *ent = g_malloc(sizeof(struct index_entry)); - dbe_init(&ent->ie_dbe, ent); - set_init(&ent->ie_set); - ent->ie_key = key; - return ent; -} - -static struct db_entry *index_alloc(const gchar *key) -{ - return &__index_alloc(g_strdup(key))->ie_dbe; -} - -static void index_free(struct db_entry *dbe) -{ - struct index_entry *ent = INDEX_ENTRY(dbe); - set_deinit(&ent->ie_set); - g_free(ent); -} - -static gchar *index_key(struct db_entry *dbe) -{ - return INDEX_ENTRY(dbe)->ie_key; -} - -static void index_write(struct file *file, struct db_entry *dbe) -{ - file_writef(file, "%s\n" , INDEX_ENTRY(dbe)->ie_key); - set_write(file, &INDEX_ENTRY(dbe)->ie_set); -} - -static struct db_entry *index_read(struct file *file) -{ - gchar *key = file_readl(file); - struct index_entry *ent; - - ent = __index_alloc(key); - set_read(file, &ent->ie_set); - return &ent->ie_dbe; -} - - -static const struct db_ops index_ops = { - .dbe_alloc = index_alloc, - .dbe_free = index_free, - .dbe_key = index_key, - .dbe_read = index_read, - .dbe_write = index_write, -}; - - -void index_init(struct database *index, const gchar *filepath, bool autosave) -{ - db_init(index, filepath, autosave, &index_ops); -} - -struct index_entry *index_insert(struct database *index, const gchar *key, - unsigned int value) -{ - struct index_entry *it = INDEX_ENTRY(db_find(index, key)); - - set_insert(&it->ie_set, value); - db_autosave(index); - return it; -} - -void index_remove(struct database *index, const gchar *key, unsigned int value) -{ - struct index_entry *it = INDEX_ENTRY(db_get(index, key)); - if (it) { - set_remove(&it->ie_set, value); - db_autosave(index); - } -} - -bool index_has(struct database *index, const gchar *key, unsigned int value) -{ - struct index_entry *it = INDEX_ENTRY(db_get(index, key)); - - if (!it) - return false; - return set_has(&it->ie_set, value); -} - -#ifdef CONFIG_TESTING -const struct db_ops *test_index_ops() { return &index_ops; } -#endif /* CONFIG_TESTING */ diff --git a/include/core/containers/index.h b/include/core/containers/index.h deleted file mode 100644 index f40ad126..00000000 --- a/include/core/containers/index.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2014 (c) Anna Schumaker. - * - * The struct index_entry is used to associate a database key - * with a set of integers, creating an inverted index. - */ -#ifndef OCARINA_CORE_CONTAINERS_INDEX_H -#define OCARINA_CORE_CONTAINERS_INDEX_H - -#include -#include - - -struct index_entry { - gchar *ie_key; - struct set ie_set; - struct db_entry ie_dbe; -}; - -#define INDEX_ENTRY(dbe) ((struct index_entry *)DBE_DATA(dbe)) - - -/* Initialize a database for use as an index. */ -void index_init(struct database *, const gchar *, bool); - -/* Add a value to an index item with the specified key. */ -struct index_entry *index_insert(struct database *, const gchar *, unsigned int); - -/* Remove a value from an index item with the specified key. */ -void index_remove(struct database *, const gchar *, unsigned int); - -/* Called to check if the index has the specified (key, value) pair. */ -bool index_has(struct database *, const gchar *, unsigned int); - -#ifdef CONFIG_TESTING -const struct db_ops *test_index_ops(); -#endif /* CONFIG_TESTING */ -#endif /* OCARINA_CORE_CONTAINERS_INDEX_H */ diff --git a/include/core/playlist.h b/include/core/playlist.h index 7313f1b6..b7cf0fa5 100644 --- a/include/core/playlist.h +++ b/include/core/playlist.h @@ -8,7 +8,6 @@ #ifndef OCARINA_CORE_PLAYLIST_H #define OCARINA_CORE_PLAYLIST_H -#include #include diff --git a/tests/core/.gitignore b/tests/core/.gitignore index 41aa4cc7..5706f8d0 100644 --- a/tests/core/.gitignore +++ b/tests/core/.gitignore @@ -5,7 +5,6 @@ date idle containers/set containers/database -containers/index filter tags/artist tags/album diff --git a/tests/core/containers/Sconscript b/tests/core/containers/Sconscript index bd135497..9897662f 100644 --- a/tests/core/containers/Sconscript +++ b/tests/core/containers/Sconscript @@ -12,6 +12,5 @@ def ContainerTest(name): res += [ ContainerTest("set") ] res += [ ContainerTest("database") ] -res += [ ContainerTest("index") ] Return("res") diff --git a/tests/core/containers/index.c b/tests/core/containers/index.c deleted file mode 100644 index 66f474f9..00000000 --- a/tests/core/containers/index.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2014 (c) Anna Schumaker. - * Test a Database - */ -#include -#include - - -static void test_entry() -{ - const struct db_ops *index_ops = test_index_ops(); - struct index_entry *ie; - struct set_iter it; - unsigned int i; - struct file f; - - ie = INDEX_ENTRY(index_ops->dbe_alloc("Link")); - test_equal(index_ops->dbe_key(&ie->ie_dbe), "Link"); - set_insert(&ie->ie_set, 0); - set_insert(&ie->ie_set, 1); - set_insert(&ie->ie_set, 2); - - i = 0; - set_for_each(&ie->ie_set, &it) { - test_loop_equal(it.it_val, i, i); - i++; - } test_loop_passed(); - - file_init(&f, "index_entry", 0, 0); - file_open(&f, OPEN_WRITE); - file_writef(&f, "Zelda\n0 \n"); - index_ops->dbe_write(&f, &ie->ie_dbe); - file_close(&f); - g_free(ie->ie_key); - index_ops->dbe_free(&ie->ie_dbe); - - file_open(&f, OPEN_READ); - ie = INDEX_ENTRY(index_ops->dbe_read(&f)); - test_equal(index_ops->dbe_key(&ie->ie_dbe), "Zelda"); - test_equal(set_size(&ie->ie_set), 0); - g_free(ie->ie_key); - index_ops->dbe_free(&ie->ie_dbe); - - ie = INDEX_ENTRY(index_ops->dbe_read(&f)); - test_equal(ie->ie_key, "Link"); - test_equal(index_ops->dbe_key(&ie->ie_dbe), "Link"); - test_equal(set_size(&ie->ie_set), 3); - file_close(&f); - - i = 0; - set_for_each(&ie->ie_set, &it) { - test_loop_equal(it.it_val, i, i); - i++; - } test_loop_passed(); - - g_free(ie->ie_key); - index_ops->dbe_free(&ie->ie_dbe); -} - -static void __test_stress(unsigned int N) -{ - const struct db_ops *index_ops = test_index_ops(); - struct index_entry *ie, *ie2; - struct database index; - unsigned int i; - gchar key[2] = ""; - char c; - - index_init(&index, "stress.idx", false); - - /* index_insert() */ - for (c = 'a'; c <= 'z'; c++) { - g_strlcpy(key, &c, 2); - ie = index_insert(&index, key, 0); - test_loop_not_equal((void *)ie, NULL, c - 'a'); - test_loop_equal(index_ops->dbe_key(&ie->ie_dbe), key, c - 'a'); - for (i = 0; i < N; i++) - ie2 = index_insert(&index, key, i); - test_loop_equal((void *)ie, (void *)ie2, c - 'a'); - test_loop_equal(set_size(&ie->ie_set), N, c - 'a'); - test_loop_equal(index.db_size, c - 'a' + 1, c - 'a'); - } test_loop_passed(); - test_equal(index.db_size, 26); - - /* index_has() */ - for (c = 'a'; c <= 'z'; c += 4) { - g_strlcpy(key, &c, 2); - for (i = 0; i < N; i++) - test_loop_equal(index_has(&index, key, i), (bool)true, i); - test_loop_equal(index_has(&index, key, N), (bool)false, c - 'a'); - } test_loop_passed(); - - /* index_remove() */ - for (c = 'a'; c <= 'z'; c += 4) { - g_strlcpy(key, &c, 2); - for (i = 0; i < N; i++) - index_remove(&index, key, i); - ie = INDEX_ENTRY(db_find(&index, key)); - test_loop_not_equal((void *)ie, NULL, c - 'a'); - test_loop_equal(set_size(&ie->ie_set), 0, c - 'a'); - } test_loop_passed(); - index_remove(&index, "ZZ", 42); - test_equal(index.db_size, 26); - - db_deinit(&index); -} - -static void test_basics() { __test_stress(10); } -static void test_stress() { __test_stress(100000); } - -DECLARE_UNIT_TESTS( - UNIT_TEST("Index Entry", test_entry), - UNIT_TEST("Index Basics (N = 10)", test_basics), - UNIT_TEST("Index Stress (N = 100,000)", test_stress), -);