Blame tests/core/oidmap.c

Packit Service 20376f
#include "clar_libgit2.h"
Packit Service 20376f
#include "oidmap.h"
Packit Service 20376f
Packit Service 20376f
typedef struct {
Packit Service 20376f
	git_oid oid;
Packit Service 20376f
	size_t extra;
Packit Service 20376f
} oidmap_item;
Packit Service 20376f
Packit Service 20376f
#define NITEMS 0x0fff
Packit Service 20376f
Packit Service 20376f
void test_core_oidmap__basic(void)
Packit Service 20376f
{
Packit Service 20376f
	git_oidmap *map;
Packit Service 20376f
	oidmap_item items[NITEMS];
Packit Service 20376f
	uint32_t i, j;
Packit Service 20376f
Packit Service 20376f
	for (i = 0; i < NITEMS; ++i) {
Packit Service 20376f
		items[i].extra = i;
Packit Service 20376f
		for (j = 0; j < GIT_OID_RAWSZ / 4; ++j) {
Packit Service 20376f
			items[i].oid.id[j * 4    ] = (unsigned char)i;
Packit Service 20376f
			items[i].oid.id[j * 4 + 1] = (unsigned char)(i >> 8);
Packit Service 20376f
			items[i].oid.id[j * 4 + 2] = (unsigned char)(i >> 16);
Packit Service 20376f
			items[i].oid.id[j * 4 + 3] = (unsigned char)(i >> 24);
Packit Service 20376f
		}
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
	map = git_oidmap_alloc();
Packit Service 20376f
	cl_assert(map != NULL);
Packit Service 20376f
Packit Service 20376f
	for (i = 0; i < NITEMS; ++i) {
Packit Service 20376f
		khiter_t pos;
Packit Service 20376f
		int ret;
Packit Service 20376f
Packit Service 20376f
		pos = git_oidmap_lookup_index(map, &items[i].oid);
Packit Service 20376f
		cl_assert(!git_oidmap_valid_index(map, pos));
Packit Service 20376f
Packit Service 20376f
		pos = git_oidmap_put(map, &items[i].oid, &ret;;
Packit Service 20376f
		cl_assert(ret != 0);
Packit Service 20376f
Packit Service 20376f
		git_oidmap_set_value_at(map, pos, &items[i]);
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
	for (i = 0; i < NITEMS; ++i) {
Packit Service 20376f
		khiter_t pos;
Packit Service 20376f
Packit Service 20376f
		pos = git_oidmap_lookup_index(map, &items[i].oid);
Packit Service 20376f
		cl_assert(git_oidmap_valid_index(map, pos));
Packit Service 20376f
Packit Service 20376f
		cl_assert_equal_p(git_oidmap_value_at(map, pos), &items[i]);
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
	git_oidmap_free(map);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_core_oidmap__hash_collision(void)
Packit Service 20376f
{
Packit Service 20376f
	git_oidmap *map;
Packit Service 20376f
	oidmap_item items[NITEMS];
Packit Service 20376f
	uint32_t i, j;
Packit Service 20376f
Packit Service 20376f
	for (i = 0; i < NITEMS; ++i) {
Packit Service 20376f
		uint32_t segment = i / 8;
Packit Service 20376f
		int modi = i - (segment * 8);
Packit Service 20376f
Packit Service 20376f
		items[i].extra = i;
Packit Service 20376f
Packit Service 20376f
		for (j = 0; j < GIT_OID_RAWSZ / 4; ++j) {
Packit Service 20376f
			items[i].oid.id[j * 4    ] = (unsigned char)modi;
Packit Service 20376f
			items[i].oid.id[j * 4 + 1] = (unsigned char)(modi >> 8);
Packit Service 20376f
			items[i].oid.id[j * 4 + 2] = (unsigned char)(modi >> 16);
Packit Service 20376f
			items[i].oid.id[j * 4 + 3] = (unsigned char)(modi >> 24);
Packit Service 20376f
		}
Packit Service 20376f
Packit Service 20376f
		items[i].oid.id[ 8] = (unsigned char)i;
Packit Service 20376f
		items[i].oid.id[ 9] = (unsigned char)(i >> 8);
Packit Service 20376f
		items[i].oid.id[10] = (unsigned char)(i >> 16);
Packit Service 20376f
		items[i].oid.id[11] = (unsigned char)(i >> 24);
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
	map = git_oidmap_alloc();
Packit Service 20376f
	cl_assert(map != NULL);
Packit Service 20376f
Packit Service 20376f
	for (i = 0; i < NITEMS; ++i) {
Packit Service 20376f
		khiter_t pos;
Packit Service 20376f
		int ret;
Packit Service 20376f
Packit Service 20376f
		pos = git_oidmap_lookup_index(map, &items[i].oid);
Packit Service 20376f
		cl_assert(!git_oidmap_valid_index(map, pos));
Packit Service 20376f
Packit Service 20376f
		pos = git_oidmap_put(map, &items[i].oid, &ret;;
Packit Service 20376f
		cl_assert(ret != 0);
Packit Service 20376f
Packit Service 20376f
		git_oidmap_set_value_at(map, pos, &items[i]);
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
	for (i = 0; i < NITEMS; ++i) {
Packit Service 20376f
		khiter_t pos;
Packit Service 20376f
Packit Service 20376f
		pos = git_oidmap_lookup_index(map, &items[i].oid);
Packit Service 20376f
		cl_assert(git_oidmap_valid_index(map, pos));
Packit Service 20376f
Packit Service 20376f
		cl_assert_equal_p(git_oidmap_value_at(map, pos), &items[i]);
Packit Service 20376f
	}
Packit Service 20376f
Packit Service 20376f
	git_oidmap_free(map);
Packit Service 20376f
}