mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 06:17:02 +00:00

Without this change, compiling with gcc and pedantic generates warning: ISO C does not allow extra ‘;’ outside of a function.
111 lines
2.2 KiB
C
111 lines
2.2 KiB
C
#include "clar_libgit2.h"
|
|
#include "oidmap.h"
|
|
|
|
GIT__USE_OIDMAP
|
|
|
|
typedef struct {
|
|
git_oid oid;
|
|
size_t extra;
|
|
} oidmap_item;
|
|
|
|
#define NITEMS 0x0fff
|
|
|
|
void test_core_oidmap__basic(void)
|
|
{
|
|
git_oidmap *map;
|
|
oidmap_item items[NITEMS];
|
|
uint32_t i, j;
|
|
|
|
for (i = 0; i < NITEMS; ++i) {
|
|
items[i].extra = i;
|
|
for (j = 0; j < GIT_OID_RAWSZ / 4; ++j) {
|
|
items[i].oid.id[j * 4 ] = (unsigned char)i;
|
|
items[i].oid.id[j * 4 + 1] = (unsigned char)(i >> 8);
|
|
items[i].oid.id[j * 4 + 2] = (unsigned char)(i >> 16);
|
|
items[i].oid.id[j * 4 + 3] = (unsigned char)(i >> 24);
|
|
}
|
|
}
|
|
|
|
map = git_oidmap_alloc();
|
|
cl_assert(map != NULL);
|
|
|
|
for (i = 0; i < NITEMS; ++i) {
|
|
khiter_t pos;
|
|
int ret;
|
|
|
|
pos = kh_get(oid, map, &items[i].oid);
|
|
cl_assert(pos == kh_end(map));
|
|
|
|
pos = kh_put(oid, map, &items[i].oid, &ret);
|
|
cl_assert(ret != 0);
|
|
|
|
kh_val(map, pos) = &items[i];
|
|
}
|
|
|
|
|
|
for (i = 0; i < NITEMS; ++i) {
|
|
khiter_t pos;
|
|
|
|
pos = kh_get(oid, map, &items[i].oid);
|
|
cl_assert(pos != kh_end(map));
|
|
|
|
cl_assert_equal_p(kh_val(map, pos), &items[i]);
|
|
}
|
|
|
|
git_oidmap_free(map);
|
|
}
|
|
|
|
void test_core_oidmap__hash_collision(void)
|
|
{
|
|
git_oidmap *map;
|
|
oidmap_item items[NITEMS];
|
|
uint32_t i, j;
|
|
|
|
for (i = 0; i < NITEMS; ++i) {
|
|
uint32_t segment = i / 8;
|
|
int modi = i - (segment * 8);
|
|
|
|
items[i].extra = i;
|
|
|
|
for (j = 0; j < GIT_OID_RAWSZ / 4; ++j) {
|
|
items[i].oid.id[j * 4 ] = (unsigned char)modi;
|
|
items[i].oid.id[j * 4 + 1] = (unsigned char)(modi >> 8);
|
|
items[i].oid.id[j * 4 + 2] = (unsigned char)(modi >> 16);
|
|
items[i].oid.id[j * 4 + 3] = (unsigned char)(modi >> 24);
|
|
}
|
|
|
|
items[i].oid.id[ 8] = (unsigned char)i;
|
|
items[i].oid.id[ 9] = (unsigned char)(i >> 8);
|
|
items[i].oid.id[10] = (unsigned char)(i >> 16);
|
|
items[i].oid.id[11] = (unsigned char)(i >> 24);
|
|
}
|
|
|
|
map = git_oidmap_alloc();
|
|
cl_assert(map != NULL);
|
|
|
|
for (i = 0; i < NITEMS; ++i) {
|
|
khiter_t pos;
|
|
int ret;
|
|
|
|
pos = kh_get(oid, map, &items[i].oid);
|
|
cl_assert(pos == kh_end(map));
|
|
|
|
pos = kh_put(oid, map, &items[i].oid, &ret);
|
|
cl_assert(ret != 0);
|
|
|
|
kh_val(map, pos) = &items[i];
|
|
}
|
|
|
|
|
|
for (i = 0; i < NITEMS; ++i) {
|
|
khiter_t pos;
|
|
|
|
pos = kh_get(oid, map, &items[i].oid);
|
|
cl_assert(pos != kh_end(map));
|
|
|
|
cl_assert_equal_p(kh_val(map, pos), &items[i]);
|
|
}
|
|
|
|
git_oidmap_free(map);
|
|
}
|