Adding functions table to hashset and fixing root makefile

This commit is contained in:
Leonardo committed 2020-02-06 14:10:12 -03:00
1 parent 7dd6218017
commit fa49fddd8f
5 files changed
+190 -124

No files matched your search

+2 -1
View File
@@ -42,7 +42,8 @@ CMC_CREATE_UNIT(hashmap_test, true, {
});
CMC_CREATE_TEST(new[capacity = UINT64_MAX], {
struct hashmap *map = hm_new(UINT64_MAX, 0.99, hm_ftab_key, hm_ftab_val);
struct hashmap *map =
hm_new(UINT64_MAX, 0.99, hm_ftab_key, hm_ftab_val);
cmc_assert_equals(ptr, NULL, map);
});
+95 -51
View File
@@ -7,32 +7,40 @@
CMC_GENERATE_HASHSET(hs, hashset, size_t)
struct hashset_ftab_val *hs_ftab_val =
&(struct hashset_ftab_val){ .cmp = cmp,
.cpy = copy,
.str = str,
.free = custom_free,
.hash = hash,
.pri = pri };
CMC_CREATE_UNIT(hashset_test, true, {
CMC_CREATE_TEST(new, {
struct hashset *set = hs_new(943722, 0.6, cmp, hash);
struct hashset *set = hs_new(943722, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_not_equals(ptr, NULL, set->buffer);
cmc_assert_equals(size_t, 0, hs_count(set));
cmc_assert_greater_equals(size_t, (943722 / 0.6), hs_capacity(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(new[capacity = 0], {
struct hashset *set = hs_new(0, 0.6, cmp, hash);
struct hashset *set = hs_new(0, 0.6, hs_ftab_val);
cmc_assert_equals(ptr, NULL, set);
});
CMC_CREATE_TEST(new[capacity = UINT64_MAX], {
struct hashset *set = hs_new(UINT64_MAX, 0.99, cmp, hash);
struct hashset *set = hs_new(UINT64_MAX, 0.99, hs_ftab_val);
cmc_assert_equals(ptr, NULL, set);
});
CMC_CREATE_TEST(clear[count capacity], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -41,38 +49,41 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert_equals(size_t, 50, hs_count(set));
hs_clear(set, NULL);
hs_clear(set);
cmc_assert_equals(size_t, 0, hs_count(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(insert, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert(hs_insert(set, 1));
cmc_assert_equals(size_t, 1, hs_count(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(insert[smallest capacity], {
struct hashset *set = hs_new(1, 0.99, cmp, hash);
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_equals(size_t, cmc_hashtable_primes[0], hs_capacity(set));
cmc_assert(hs_insert(set, 1));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(insert[element position], {
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
// Temporary change
// Using the numhash the key is the hash itself
struct hashset *set = hs_new(1, 0.99, cmp, numhash);
hs_ftab_val->hash = numhash;
cmc_assert_not_equals(ptr, NULL, set);
@@ -87,11 +98,16 @@ CMC_CREATE_UNIT(hashset_test, true, {
set->buffer[capacity - 1].value);
cmc_assert_equals(size_t, capacity, set->buffer[0].value);
hs_free(set, NULL);
hs_ftab_val->hash = hash;
hs_free(set);
});
CMC_CREATE_TEST(insert[distance], {
struct hashset *set = hs_new(500, 0.6, cmp, hash0);
struct hashset *set = hs_new(500, 0.6, hs_ftab_val);
// Temporary change
hs_ftab_val->hash = hash0;
cmc_assert_not_equals(ptr, NULL, set);
@@ -103,11 +119,16 @@ CMC_CREATE_UNIT(hashset_test, true, {
for (size_t i = 0; i < 200; i++)
cmc_assert_equals(size_t, i, set->buffer[i].dist);
hs_free(set, NULL);
hs_ftab_val->hash = hash;
hs_free(set);
});
CMC_CREATE_TEST(insert[distance wrap], {
struct hashset *set = hs_new(1, 0.99, cmp, hashcapminus1);
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
// Temporary change
hs_ftab_val->hash = hashcapminus1;
cmc_assert_not_equals(ptr, NULL, set);
@@ -124,11 +145,34 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert_equals(size_t, 0, set->buffer[capacity - 1].dist);
cmc_assert_equals(size_t, 1, set->buffer[0].dist);
hs_free(set, NULL);
hs_ftab_val->hash = hash;
hs_free(set);
});
CMC_CREATE_TEST(insert[distances], {
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
// Temporary change
hs_ftab_val->hash = hashcapminus4;
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_equals(size_t, cmc_hashtable_primes[0], hs_capacity(set));
for (size_t i = 0; i < 6; i++)
cmc_assert(hs_insert(set, i));
for (size_t i = 0; i < 6; i++)
cmc_assert_equals(size_t, i, hs_impl_get_entry(set, i)->dist);
hs_ftab_val->hash = hash;
hs_free(set);
});
CMC_CREATE_TEST(insert[buffer growth and item preservation], {
struct hashset *set = hs_new(1, 0.99, cmp, hash);
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -148,11 +192,11 @@ CMC_CREATE_UNIT(hashset_test, true, {
for (size_t i = 0; i < 100000; i++)
cmc_assert(hs_contains(set, i));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(remove, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -162,22 +206,22 @@ CMC_CREATE_UNIT(hashset_test, true, {
for (size_t i = 0; i < 100; i++)
cmc_assert(hs_remove(set, i));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(remove[count = 0], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
for (size_t i = 100; i < 200; i++)
cmc_assert(!hs_remove(set, i));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(remove[key not found], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -187,11 +231,11 @@ CMC_CREATE_UNIT(hashset_test, true, {
for (size_t i = 100; i < 200; i++)
cmc_assert(!hs_remove(set, i));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(max, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -203,21 +247,21 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert_equals(size_t, 100, val);
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(max[count = 0], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert(!hs_min(set, NULL));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(min, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -229,21 +273,21 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert_equals(size_t, 1, val);
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(min[count = 0], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert(!hs_min(set, NULL));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(contains, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -251,21 +295,21 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert(hs_contains(set, 987654321));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(contains[count = 0], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert(!hs_contains(set, 987654321));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(contains[sum], {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -279,11 +323,11 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert_equals(size_t, 15050, sum);
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(empty, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -293,12 +337,12 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert(!hs_empty(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(full, {
struct hashset *set =
hs_new(cmc_hashtable_primes[0], 0.99999, cmp, hash);
hs_new(cmc_hashtable_primes[0], 0.99999, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -315,11 +359,11 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert(!hs_full(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(count, {
struct hashset *set = hs_new(100, 0.6, cmp, hash);
struct hashset *set = hs_new(100, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -329,37 +373,37 @@ CMC_CREATE_UNIT(hashset_test, true, {
cmc_assert_equals(size_t, i, hs_count(set));
}
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(capacity, {
struct hashset *set = hs_new(2500, 0.6, cmp, hash);
struct hashset *set = hs_new(2500, 0.6, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_greater_equals(size_t, (size_t)(2500 / 0.6),
hs_capacity(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(capacity[small], {
struct hashset *set = hs_new(1, 0.99, cmp, hash);
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_equals(size_t, cmc_hashtable_primes[0], hs_capacity(set));
hs_free(set, NULL);
hs_free(set);
});
CMC_CREATE_TEST(load, {
struct hashset *set = hs_new(1, 0.99, cmp, hash);
struct hashset *set = hs_new(1, 0.99, hs_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_in_range(double, 0.99 - 0.0001, 0.99 + 0.0001, hs_load(set));
hs_free(set, NULL);
hs_free(set);
});
});
+6 -4
View File
@@ -24,8 +24,10 @@ int main(void)
&(struct bmap_ftab_val){ 0 }, NULL, NULL);
struct deque *d =
d_new_custom(100, &(struct deque_ftab_val){ 0 }, NULL, NULL);
struct hmap *hm = hm_new_custom(100, 0.6, NULL, NULL, NULL, NULL);
struct hset *hs = hs_new_custom(100, 0.6, NULL, NULL, NULL, NULL);
struct hmap *hm = hm_new_custom(100, 0.6, &(struct hmap_ftab_key){ 0 },
&(struct hmap_ftab_val){ 0 }, NULL, NULL);
struct hset *hs =
hs_new_custom(100, 0.6, &(struct hset_ftab_val){ 0 }, NULL, NULL);
struct heap *h = h_new_custom(100, cmc_max_heap, NULL, NULL, NULL);
struct iheap *ih = ih_new_custom(100, NULL, NULL, NULL);
struct linked *ll = ll_new_custom(NULL, NULL);
@@ -56,8 +58,8 @@ int main(void)
bm_free(bm);
d_free(d);
hm_free(hm, NULL);
hs_free(hs, NULL);
hm_free(hm);
hs_free(hs);
h_free(h, NULL);
ih_free(ih, NULL);
ll_free(ll, NULL);