void *search_remove_elem_hash_table(void *ht, void *key, int key_len, void *compare) { return tommy_hashlin_remove(ht, compare, key, tommy_hash_u32(0, key, key_len)); }
void add_hash_table(void *ht, void *ht_node, void *ll, void *ll_node, void *obj, void *key, int key_len) { tommy_hashlin_insert(ht, ht_node, obj, tommy_hash_u32(0, key, key_len)); tommy_list_insert_tail(ll, ll_node, obj); }
void *find_hash_table(void *ht, void *key, int key_len, void *compare) { return tommy_hashlin_search(ht, compare, key, tommy_hash_u32(0, key, key_len)); }
static void test_hash(void) { unsigned i; unsigned char* seed_aligned; void* seed_alloc; unsigned char* buffer_aligned; void* buffer_alloc; uint32_t seed32; uint64_t seed64; seed_aligned = malloc_nofail_align(HASH_SIZE, &seed_alloc); buffer_aligned = malloc_nofail_align(HASH_TEST_MAX, &buffer_alloc); seed32 = 0xa766795d; seed64 = 0x2f022773a766795dULL; seed_aligned[0] = 0x5d; seed_aligned[1] = 0x79; seed_aligned[2] = 0x66; seed_aligned[3] = 0xa7; seed_aligned[4] = 0x73; seed_aligned[5] = 0x27; seed_aligned[6] = 0x02; seed_aligned[7] = 0x2f; seed_aligned[8] = 0x6a; seed_aligned[9] = 0xa1; seed_aligned[10] = 0x9e; seed_aligned[11] = 0xc1; seed_aligned[12] = 0x14; seed_aligned[13] = 0x8c; seed_aligned[14] = 0x9e; seed_aligned[15] = 0x43; for(i=0;TEST_HASH32[i].data;++i) { uint32_t digest; memcpy(buffer_aligned, TEST_HASH32[i].data, TEST_HASH32[i].len); digest = tommy_hash_u32(seed32, buffer_aligned, TEST_MURMUR3[i].len); if (digest != TEST_HASH32[i].digest) { /* LCOV_EXCL_START */ fprintf(stderr, "Failed hash32 test\n"); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } } for(i=0;TEST_HASH64[i].data;++i) { uint64_t digest; memcpy(buffer_aligned, TEST_HASH64[i].data, TEST_HASH64[i].len); digest = tommy_hash_u64(seed64, buffer_aligned, TEST_MURMUR3[i].len); if (digest != TEST_HASH64[i].digest) { /* LCOV_EXCL_START */ fprintf(stderr, "Failed hash64 test\n"); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } } for(i=0;TEST_MURMUR3[i].data;++i) { unsigned char digest[HASH_SIZE]; memcpy(buffer_aligned, TEST_MURMUR3[i].data, TEST_MURMUR3[i].len); memhash(HASH_MURMUR3, seed_aligned, digest, buffer_aligned, TEST_MURMUR3[i].len); if (memcmp(digest, TEST_MURMUR3[i].digest, HASH_SIZE) != 0) { /* LCOV_EXCL_START */ fprintf(stderr, "Failed Murmur3 test\n"); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } } for(i=0;TEST_SPOOKY2[i].data;++i) { unsigned char digest[HASH_SIZE]; memcpy(buffer_aligned, TEST_SPOOKY2[i].data, TEST_SPOOKY2[i].len); memhash(HASH_SPOOKY2, seed_aligned, digest, buffer_aligned, TEST_SPOOKY2[i].len); if (memcmp(digest, TEST_SPOOKY2[i].digest, HASH_SIZE) != 0) { /* LCOV_EXCL_START */ fprintf(stderr, "Failed Spooky2 test\n"); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } } free(buffer_alloc); free(seed_alloc); }