Fixing bug 3465649. I still need to make CMPH_BRZ work for small sets.
This commit is contained in:
parent
c1a9eb164e
commit
1b2a7cedff
@ -31,7 +31,7 @@ AC_CHECK_HEADERS([getopt.h math.h])
|
||||
dnl Checks for libraries.
|
||||
LT_LIB_M
|
||||
LDFLAGS="$LIBM $LDFLAGS"
|
||||
CFLAGS="-Wall"
|
||||
#CFLAGS="-Wall -g"
|
||||
|
||||
AC_PROG_CXX
|
||||
CXXFLAGS="-Wall -Wno-unused-function -DNDEBUG -O3 -fomit-frame-pointer $CXXFLAGS"
|
||||
|
@ -1,4 +1,4 @@
|
||||
noinst_PROGRAMS = vector_adapter_ex1 file_adapter_ex2 struct_vector_adapter_ex3
|
||||
noinst_PROGRAMS = vector_adapter_ex1 file_adapter_ex2 struct_vector_adapter_ex3 small_set_test
|
||||
|
||||
INCLUDES = -I../src/
|
||||
|
||||
@ -10,3 +10,6 @@ file_adapter_ex2_SOURCES = file_adapter_ex2.c
|
||||
|
||||
struct_vector_adapter_ex3_LDADD = ../src/libcmph.la
|
||||
struct_vector_adapter_ex3_SOURCES = struct_vector_adapter_ex3.c
|
||||
|
||||
small_set_test_LDADD = ../src/libcmph.la
|
||||
small_set_test_SOURCES = small_set_test.c
|
||||
|
76
examples/small_set_test.c
Normal file
76
examples/small_set_test.c
Normal file
@ -0,0 +1,76 @@
|
||||
#include <cmph.h>
|
||||
|
||||
int test(cmph_uint32* items_to_hash, cmph_uint32 items_len, CMPH_ALGO alg_n)
|
||||
{
|
||||
cmph_t *hash;
|
||||
cmph_config_t *config;
|
||||
cmph_io_adapter_t *source;
|
||||
cmph_uint32 i;
|
||||
|
||||
printf("%s (%u)\n", cmph_names[alg_n], alg_n);
|
||||
|
||||
source = cmph_io_struct_vector_adapter(items_to_hash,
|
||||
(cmph_uint32)sizeof(cmph_uint32),
|
||||
0,
|
||||
(cmph_uint32)sizeof(cmph_uint32),
|
||||
items_len);
|
||||
config = cmph_config_new(source);
|
||||
cmph_config_set_algo(config, alg_n);
|
||||
hash = cmph_new(config);
|
||||
cmph_config_destroy(config);
|
||||
|
||||
printf("packed_size %u\n",cmph_packed_size(hash));
|
||||
|
||||
for (i=0; i<items_len; ++i)
|
||||
printf("%d -> %u\n",
|
||||
items_to_hash[i],
|
||||
cmph_search(hash,
|
||||
(char*)(items_to_hash+i),
|
||||
(cmph_uint32)sizeof(cmph_uint32)));
|
||||
printf("\n");
|
||||
|
||||
cmph_io_vector_adapter_destroy(source);
|
||||
cmph_destroy(hash);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main (void)
|
||||
{
|
||||
cmph_uint32 vec1[] = {1,2,3,4,5};
|
||||
cmph_uint32 vec1_len = 5;
|
||||
|
||||
cmph_uint32 vec2[] = {7576423, 7554496}; //CMPH_FCH, CMPH_BDZ, CMPH_BDZ_PH (4,5,6)
|
||||
cmph_uint32 vec2_len = 2;
|
||||
cmph_uint32 vec3[] = {2184764, 1882984, 1170551}; // CMPH_CHD_PH, CMPH_CHD (7,8)
|
||||
cmph_uint32 vec3_len = 3;
|
||||
cmph_uint32 i;
|
||||
|
||||
// Testing with vec1
|
||||
cmph_uint32* values = (cmph_uint32*)vec1;
|
||||
cmph_uint32 length = vec1_len;
|
||||
printf("TESTING VECTOR WITH %u INTEGERS\n", length);
|
||||
for (i = 0; i < CMPH_COUNT; i++)
|
||||
{
|
||||
test(values, length, i);
|
||||
}
|
||||
|
||||
// Testing with vec2
|
||||
values = (cmph_uint32*)vec2;
|
||||
length = vec2_len;
|
||||
printf("TESTING VECTOR WITH %u INTEGERS\n", length);
|
||||
for (i = 0; i < CMPH_COUNT; i++)
|
||||
{
|
||||
test(values, length, i);
|
||||
}
|
||||
|
||||
// Testing with vec2
|
||||
values = (cmph_uint32*)vec3;
|
||||
length = vec3_len;
|
||||
printf("TESTING VECTOR WITH %u INTEGERS\n", length);
|
||||
for (i = 0; i < CMPH_COUNT; i++)
|
||||
{
|
||||
test(values, length, i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -288,6 +288,11 @@ cmph_t *bdz_new(cmph_config_t *mph, double c)
|
||||
bdz->m = mph->key_source->nkeys;
|
||||
bdz->r = (cmph_uint32)ceil((c * mph->key_source->nkeys)/3);
|
||||
if ((bdz->r % 2) == 0) bdz->r+=1;
|
||||
|
||||
if (bdz->r == 1) { // workaround for small key sets
|
||||
bdz->r = 3;
|
||||
}
|
||||
|
||||
bdz->n = 3*bdz->r;
|
||||
|
||||
bdz->k = (1U << bdz->b);
|
||||
|
@ -254,6 +254,11 @@ cmph_t *bdz_ph_new(cmph_config_t *mph, double c)
|
||||
bdz_ph->m = mph->key_source->nkeys;
|
||||
bdz_ph->r = (cmph_uint32)ceil((c * mph->key_source->nkeys)/3);
|
||||
if ((bdz_ph->r % 2) == 0) bdz_ph->r += 1;
|
||||
|
||||
if (bdz_ph->r == 1) { // workaround for small key sets
|
||||
bdz_ph->r = 3;
|
||||
}
|
||||
|
||||
bdz_ph->n = 3*bdz_ph->r;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user