Add test for dict with Open Addressing
This commit is contained in:
1 parent
4b908fb22d
commit
bb6764f9d9
1 file changed
+44
-7
+44
-7
@@ -34,17 +34,29 @@ END_COVERAGE
|
|||||||
DICT_SET_DEF2(setstr, string_t, STRING_OPLIST)
|
DICT_SET_DEF2(setstr, string_t, STRING_OPLIST)
|
||||||
|
|
||||||
ARRAY_DEF(string, string_t, STRING_OPLIST)
|
ARRAY_DEF(string, string_t, STRING_OPLIST)
|
||||||
array_string_t v;
|
array_string_t v_str;
|
||||||
|
|
||||||
|
static inline bool oor_equal_p(int k, unsigned char n)
|
||||||
|
{
|
||||||
|
return k == (int)-n-1;
|
||||||
|
}
|
||||||
|
static inline void oor_set(int *k, unsigned char n)
|
||||||
|
{
|
||||||
|
*k = (int)-n-1;
|
||||||
|
}
|
||||||
|
DICT_OA_DEF2(oa_int, int, M_OPEXTEND(M_DEFAULT_OPLIST, OOR_EQUAL(oor_equal_p), OOR_SET(oor_set M_IPTR)), int, M_DEFAULT_OPLIST)
|
||||||
|
|
||||||
|
|
||||||
static void init_data(int data_size)
|
static void init_data(int data_size)
|
||||||
{
|
{
|
||||||
uint32_t x = 11;
|
uint32_t x = 11;
|
||||||
string_t s;
|
string_t s;
|
||||||
string_init (s);
|
string_init (s);
|
||||||
|
array_string_init(v_str);
|
||||||
for (int i = 0; i < data_size; ++i) {
|
for (int i = 0; i < data_size; ++i) {
|
||||||
int j = (unsigned)(data_size * ((double)x / UINT_MAX) / 4) * 271828183u;
|
int j = (unsigned)(data_size * ((double)x / UINT_MAX) / 4) * 271828183u;
|
||||||
string_printf(s, "%x", j);
|
string_printf(s, "%x", j);
|
||||||
array_string_push_back (v, s);
|
array_string_push_back (v_str, s);
|
||||||
x = 1664525L * x + 1013904223L;
|
x = 1664525L * x + 1013904223L;
|
||||||
}
|
}
|
||||||
string_clear(s);
|
string_clear(s);
|
||||||
@@ -52,17 +64,17 @@ static void init_data(int data_size)
|
|||||||
|
|
||||||
static void clear_data(void)
|
static void clear_data(void)
|
||||||
{
|
{
|
||||||
array_string_clear(v);
|
array_string_clear(v_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_data(void)
|
static void test_data(void)
|
||||||
{
|
{
|
||||||
dict_str_t dict;
|
dict_str_t dict;
|
||||||
int data_size = (int) array_string_size(v);
|
int data_size = (int) array_string_size(v_str);
|
||||||
|
|
||||||
dict_str_init (dict);
|
dict_str_init (dict);
|
||||||
for (int i = 0; i < data_size; ++i) {
|
for (int i = 0; i < data_size; ++i) {
|
||||||
dict_str_set_at(dict, *array_string_cget(v, i), *array_string_cget(v, (i+1) % data_size));
|
dict_str_set_at(dict, *array_string_cget(v_str, i), *array_string_cget(v_str, (i+1) % data_size));
|
||||||
}
|
}
|
||||||
assert(dict_str_size(dict) == 1227176);
|
assert(dict_str_size(dict) == 1227176);
|
||||||
|
|
||||||
@@ -120,7 +132,7 @@ static void test_set(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
static void test1(void)
|
||||||
{
|
{
|
||||||
dict_str_t dict;
|
dict_str_t dict;
|
||||||
string_t key, ref;
|
string_t key, ref;
|
||||||
@@ -169,7 +181,6 @@ int main(void)
|
|||||||
check1 = true;
|
check1 = true;
|
||||||
if (string_cmp_str((*r)->value, "BSD3") == 0)
|
if (string_cmp_str((*r)->value, "BSD3") == 0)
|
||||||
check2 = true;
|
check2 = true;
|
||||||
//printf ("key=%s value=%s\n", string_get_cstr((*r)->key), string_get_cstr((*r)->value));
|
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
assert(s == 19);
|
assert(s == 19);
|
||||||
@@ -184,7 +195,33 @@ int main(void)
|
|||||||
init_data(5000000);
|
init_data(5000000);
|
||||||
test_data();
|
test_data();
|
||||||
clear_data();
|
clear_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_oa(void)
|
||||||
|
{
|
||||||
|
dict_oa_int_t d;
|
||||||
|
dict_oa_int_init(d);
|
||||||
|
|
||||||
|
for(size_t i = 0 ; i < 150; i+= 3)
|
||||||
|
dict_oa_int_set_at(d, i, i*i);
|
||||||
|
assert(dict_oa_int_size(d) == 50);
|
||||||
|
for(size_t i = 0 ; i < 150; i++) {
|
||||||
|
int *p = dict_oa_int_get(d, i);
|
||||||
|
if ((i % 3) == 0) {
|
||||||
|
assert (p != NULL);
|
||||||
|
assert (*p == M_ASSIGN_CAST(int, i*i));
|
||||||
|
} else {
|
||||||
|
assert (p == NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dict_oa_int_clear(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
test1();
|
||||||
test_set();
|
test_set();
|
||||||
|
test_oa();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user