|
Packit |
ae9e2a |
#include "clar_libgit2.h"
|
|
Packit |
ae9e2a |
#include "sortedcache.h"
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
static int name_only_cmp(const void *a, const void *b)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
return strcmp(a, b);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
void test_core_sortedcache__name_only(void)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
git_sortedcache *sc;
|
|
Packit |
ae9e2a |
void *item;
|
|
Packit |
ae9e2a |
size_t pos;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_new(
|
|
Packit |
ae9e2a |
&sc, 0, NULL, NULL, name_only_cmp, NULL));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_wlock(sc));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert(&item, sc, "aaa"));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert(&item, sc, "bbb"));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert(&item, sc, "zzz"));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert(&item, sc, "mmm"));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert(&item, sc, "iii"));
|
|
Packit |
ae9e2a |
git_sortedcache_wunlock(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(5, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "aaa")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("aaa", item);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "mmm")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("mmm", item);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "zzz")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("zzz", item);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "qqq") == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 0)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("aaa", item);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 1)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("bbb", item);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 2)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("iii", item);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 3)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("mmm", item);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 4)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("zzz", item);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 5) == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "aaa"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "iii"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(2, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "zzz"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(4, pos);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(
|
|
Packit |
ae9e2a |
GIT_ENOTFOUND, git_sortedcache_lookup_index(&pos, sc, "abc"));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_clear(sc, true);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 0) == NULL);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "aaa") == NULL);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 0) == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_free(sc);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
typedef struct {
|
|
Packit |
ae9e2a |
int value;
|
|
Packit |
ae9e2a |
char smaller_value;
|
|
Packit |
ae9e2a |
char path[GIT_FLEX_ARRAY];
|
|
Packit |
ae9e2a |
} sortedcache_test_struct;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
static int sortedcache_test_struct_cmp(const void *a_, const void *b_)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
const sortedcache_test_struct *a = a_, *b = b_;
|
|
Packit |
ae9e2a |
return strcmp(a->path, b->path);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
static void sortedcache_test_struct_free(void *payload, void *item_)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
sortedcache_test_struct *item = item_;
|
|
Packit |
ae9e2a |
int *count = payload;
|
|
Packit |
ae9e2a |
(*count)++;
|
|
Packit |
ae9e2a |
item->smaller_value = 0;
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
void test_core_sortedcache__in_memory(void)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
git_sortedcache *sc;
|
|
Packit |
ae9e2a |
sortedcache_test_struct *item;
|
|
Packit |
ae9e2a |
int free_count = 0;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_new(
|
|
Packit |
ae9e2a |
&sc, offsetof(sortedcache_test_struct, path),
|
|
Packit |
ae9e2a |
sortedcache_test_struct_free, &free_count,
|
|
Packit |
ae9e2a |
sortedcache_test_struct_cmp, NULL));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_wlock(sc));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "aaa"));
|
|
Packit |
ae9e2a |
item->value = 10;
|
|
Packit |
ae9e2a |
item->smaller_value = 1;
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "bbb"));
|
|
Packit |
ae9e2a |
item->value = 20;
|
|
Packit |
ae9e2a |
item->smaller_value = 2;
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "zzz"));
|
|
Packit |
ae9e2a |
item->value = 30;
|
|
Packit |
ae9e2a |
item->smaller_value = 26;
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "mmm"));
|
|
Packit |
ae9e2a |
item->value = 40;
|
|
Packit |
ae9e2a |
item->smaller_value = 14;
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "iii"));
|
|
Packit |
ae9e2a |
item->value = 50;
|
|
Packit |
ae9e2a |
item->smaller_value = 9;
|
|
Packit |
ae9e2a |
git_sortedcache_wunlock(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(5, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_rlock(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "aaa")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("aaa", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "mmm")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("mmm", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(40, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "zzz")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("zzz", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(30, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "abc") == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
/* not on Windows:
|
|
Packit |
ae9e2a |
* cl_git_pass(git_sortedcache_rlock(sc)); -- grab more than one
|
|
Packit |
ae9e2a |
*/
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 0)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("aaa", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 1)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("bbb", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(20, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 2)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("iii", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(50, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 3)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("mmm", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(40, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 4)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("zzz", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(30, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 5) == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_runlock(sc);
|
|
Packit |
ae9e2a |
/* git_sortedcache_runlock(sc); */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(0, free_count);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_clear(sc, true);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(5, free_count);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 0) == NULL);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "aaa") == NULL);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 0) == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
free_count = 0;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_wlock(sc));
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "testing"));
|
|
Packit |
ae9e2a |
item->value = 10;
|
|
Packit |
ae9e2a |
item->smaller_value = 3;
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "again"));
|
|
Packit |
ae9e2a |
item->value = 20;
|
|
Packit |
ae9e2a |
item->smaller_value = 1;
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, "final"));
|
|
Packit |
ae9e2a |
item->value = 30;
|
|
Packit |
ae9e2a |
item->smaller_value = 2;
|
|
Packit |
ae9e2a |
git_sortedcache_wunlock(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(3, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "testing")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("testing", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "again")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("again", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(20, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "final")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("final", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(30, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "zzz") == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 0)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("again", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(20, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 1)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("final", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(30, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 2)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("testing", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 3) == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
size_t pos;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_wlock(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "again"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_remove(sc, pos));
|
|
Packit |
ae9e2a |
cl_assert_equal_i(
|
|
Packit |
ae9e2a |
GIT_ENOTFOUND, git_sortedcache_lookup_index(&pos, sc, "again"));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(2, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "testing"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(1, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_remove(sc, pos));
|
|
Packit |
ae9e2a |
cl_assert_equal_i(
|
|
Packit |
ae9e2a |
GIT_ENOTFOUND, git_sortedcache_lookup_index(&pos, sc, "testing"));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(1, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "final"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_remove(sc, pos));
|
|
Packit |
ae9e2a |
cl_assert_equal_i(
|
|
Packit |
ae9e2a |
GIT_ENOTFOUND, git_sortedcache_lookup_index(&pos, sc, "final"));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_wunlock(sc);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_free(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(3, free_count);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
static void sortedcache_test_reload(git_sortedcache *sc)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
int count = 0;
|
|
Packit |
ae9e2a |
git_buf buf = GIT_BUF_INIT;
|
|
Packit |
ae9e2a |
char *scan, *after;
|
|
Packit |
ae9e2a |
sortedcache_test_struct *item;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lockandload(sc, &buf) > 0);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_clear(sc, false); /* clear once we already have lock */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
for (scan = buf.ptr; *scan; scan = after + 1) {
|
|
Packit |
ae9e2a |
int val = strtol(scan, &after, 0);
|
|
Packit |
ae9e2a |
cl_assert(after > scan);
|
|
Packit |
ae9e2a |
scan = after;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
for (scan = after; git__isspace(*scan); ++scan) /* find start */;
|
|
Packit |
ae9e2a |
for (after = scan; *after && *after != '\n'; ++after) /* find eol */;
|
|
Packit |
ae9e2a |
*after = '\0';
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_upsert((void **)&item, sc, scan));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
item->value = val;
|
|
Packit |
ae9e2a |
item->smaller_value = (char)(count++);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_wunlock(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_buf_free(&buf;;
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
void test_core_sortedcache__on_disk(void)
|
|
Packit |
ae9e2a |
{
|
|
Packit |
ae9e2a |
git_sortedcache *sc;
|
|
Packit |
ae9e2a |
sortedcache_test_struct *item;
|
|
Packit |
ae9e2a |
int free_count = 0;
|
|
Packit |
ae9e2a |
size_t pos;
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_mkfile("cacheitems.txt", "10 abc\n20 bcd\n30 cde\n");
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_new(
|
|
Packit |
ae9e2a |
&sc, offsetof(sortedcache_test_struct, path),
|
|
Packit |
ae9e2a |
sortedcache_test_struct_free, &free_count,
|
|
Packit |
ae9e2a |
sortedcache_test_struct_cmp, "cacheitems.txt"));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
/* should need to reload the first time */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
sortedcache_test_reload(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
/* test what we loaded */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(3, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "abc")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("abc", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "cde")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("cde", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(30, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "aaa") == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 0)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("abc", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 1)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("bcd", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(20, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_entry(sc, 3) == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
/* should not need to reload this time */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(0, git_sortedcache_lockandload(sc, NULL));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
/* rewrite ondisk file and reload */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(0, free_count);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_rewritefile(
|
|
Packit |
ae9e2a |
"cacheitems.txt", "100 abc\n200 zzz\n500 aaa\n10 final\n");
|
|
Packit |
ae9e2a |
sortedcache_test_reload(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(3, free_count);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
/* test what we loaded */
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(4, git_sortedcache_entrycount(sc));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "abc")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("abc", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(100, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_lookup(sc, "final")) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("final", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert(git_sortedcache_lookup(sc, "cde") == NULL);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 0)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("aaa", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(500, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 2)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("final", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(10, item->value);
|
|
Packit |
ae9e2a |
cl_assert((item = git_sortedcache_entry(sc, 3)) != NULL);
|
|
Packit |
ae9e2a |
cl_assert_equal_s("zzz", item->path);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(200, item->value);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "aaa"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(0, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "abc"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(1, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "final"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(2, pos);
|
|
Packit |
ae9e2a |
cl_git_pass(git_sortedcache_lookup_index(&pos, sc, "zzz"));
|
|
Packit |
ae9e2a |
cl_assert_equal_sz(3, pos);
|
|
Packit |
ae9e2a |
cl_assert_equal_i(
|
|
Packit |
ae9e2a |
GIT_ENOTFOUND, git_sortedcache_lookup_index(&pos, sc, "missing"));
|
|
Packit |
ae9e2a |
cl_assert_equal_i(
|
|
Packit |
ae9e2a |
GIT_ENOTFOUND, git_sortedcache_lookup_index(&pos, sc, "cde"));
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
git_sortedcache_free(sc);
|
|
Packit |
ae9e2a |
|
|
Packit |
ae9e2a |
cl_assert_equal_i(7, free_count);
|
|
Packit |
ae9e2a |
}
|
|
Packit |
ae9e2a |
|