Adding functions table to multimap and multiset

This commit is contained in:
Leonardo committed 2020-02-08 00:01:46 -03:00
1 parent 683decfa64
commit 147e622580
4 files changed
+326 -231

No files matched your search

+37 -21
View File
@@ -7,32 +7,48 @@
CMC_GENERATE_MULTIMAP(mm, multimap, size_t, size_t)
struct multimap_ftab_key *mm_ftab_key =
&(struct multimap_ftab_key){ .cmp = cmp,
.cpy = copy,
.str = str,
.free = custom_free,
.hash = hash,
.pri = pri };
struct multimap_ftab_val *mm_ftab_val =
&(struct multimap_ftab_val){ .cmp = cmp,
.cpy = copy,
.str = str,
.free = custom_free,
.hash = hash,
.pri = pri };
CMC_CREATE_UNIT(multimap_test, true, {
CMC_CREATE_TEST(new, {
struct multimap *map = mm_new(943722, 0.8, cmp, hash);
struct multimap *map = mm_new(943722, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
cmc_assert_not_equals(ptr, NULL, map->buffer);
cmc_assert_equals(size_t, 0, mm_count(map));
cmc_assert_greater_equals(size_t, (943722 / 0.8), mm_capacity(map));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(new[capacity = 0], {
struct multimap *map = mm_new(0, 0.8, cmp, hash);
struct multimap *map = mm_new(0, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_equals(ptr, NULL, map);
});
CMC_CREATE_TEST(new[capacity = UINT64_MAX], {
struct multimap *map = mm_new(UINT64_MAX, 0.99, cmp, hash);
struct multimap *map = mm_new(UINT64_MAX, 0.99, mm_ftab_key, mm_ftab_val);
cmc_assert_equals(ptr, NULL, map);
});
CMC_CREATE_TEST(clear[count capacity], {
struct multimap *map = mm_new(100, 0.8, cmp, hash);
struct multimap *map = mm_new(100, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
@@ -41,15 +57,15 @@ CMC_CREATE_UNIT(multimap_test, true, {
cmc_assert_equals(size_t, 50, mm_count(map));
mm_clear(map, NULL);
mm_clear(map);
cmc_assert_equals(size_t, 0, mm_count(map));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(insert[count], {
struct multimap *map = mm_new(100, 0.8, cmp, hash);
struct multimap *map = mm_new(100, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
@@ -58,11 +74,11 @@ CMC_CREATE_UNIT(multimap_test, true, {
cmc_assert_equals(size_t, 100, mm_count(map));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(remove[count], {
struct multimap *map = mm_new(100, 0.8, cmp, hash);
struct multimap *map = mm_new(100, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
@@ -76,11 +92,11 @@ CMC_CREATE_UNIT(multimap_test, true, {
cmc_assert_equals(size_t, 140, mm_count(map));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(remove[count = 0], {
struct multimap *map = mm_new(100, 0.8, cmp, hash);
struct multimap *map = mm_new(100, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
@@ -88,11 +104,11 @@ CMC_CREATE_UNIT(multimap_test, true, {
cmc_assert(!mm_remove(map, 10, &r));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(remove[count = 1], {
struct multimap *map = mm_new(100, 0.8, cmp, hash);
struct multimap *map = mm_new(100, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
@@ -101,27 +117,27 @@ CMC_CREATE_UNIT(multimap_test, true, {
cmc_assert(mm_insert(map, 10, 11));
cmc_assert(mm_remove(map, 10, &r));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(get[key ordering], {
struct multimap *map = mm_new(100, 0.8, cmp, hash);
struct multimap *map = mm_new(100, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
/* Assert that the value 100 is accessed before the value 101 for the
* same key */
/* Assert that the value 100 is accessed before the value 101 for */
/* the same key */
cmc_assert(mm_insert(map, 10, 100));
cmc_assert(mm_insert(map, 20, 102));
cmc_assert(mm_insert(map, 10, 101));
cmc_assert_equals(size_t, 100, mm_get(map, 10));
mm_free(map, NULL);
mm_free(map);
});
CMC_CREATE_TEST(key_count, {
struct multimap *map = mm_new(50, 0.8, cmp, hash);
struct multimap *map = mm_new(50, 0.8, mm_ftab_key, mm_ftab_val);
cmc_assert_not_equals(ptr, NULL, map);
@@ -133,6 +149,6 @@ CMC_CREATE_UNIT(multimap_test, true, {
for (size_t i = 0; i < 20; i++)
cmc_assert_equals(size_t, 50, mm_key_count(map, i));
mm_free(map, NULL);
mm_free(map);
});
});
+23 -15
View File
@@ -7,9 +7,17 @@
CMC_GENERATE_MULTISET(ms, multiset, size_t)
struct multiset_ftab_val *ms_ftab_val =
&(struct multiset_ftab_val){ .cmp = cmp,
.cpy = copy,
.str = str,
.free = custom_free,
.hash = hash,
.pri = pri };
CMC_CREATE_UNIT(multiset_test, true, {
CMC_CREATE_TEST(new, {
struct multiset *set = ms_new(943722, 0.6, cmp, hash);
struct multiset *set = ms_new(943722, 0.6, ms_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
cmc_assert_not_equals(ptr, NULL, set->buffer);
@@ -17,23 +25,23 @@ CMC_CREATE_UNIT(multiset_test, true, {
cmc_assert_greater_equals(size_t, ((size_t)(943722 / 0.6)),
ms_capacity(set));
ms_free(set, NULL);
ms_free(set);
});
CMC_CREATE_TEST(new[capacity = 0], {
struct multiset *set = ms_new(0, 0.6, cmp, hash);
struct multiset *set = ms_new(0, 0.6, ms_ftab_val);
cmc_assert_equals(ptr, NULL, set);
});
CMC_CREATE_TEST(new[capacity = UINT64_MAX], {
struct multiset *set = ms_new(UINT64_MAX, 0.99, cmp, hash);
struct multiset *set = ms_new(UINT64_MAX, 0.99, ms_ftab_val);
cmc_assert_equals(ptr, NULL, set);
});
CMC_CREATE_TEST(clear[count capacity], {
struct multiset *set = ms_new(100, 0.6, cmp, hash);
struct multiset *set = ms_new(100, 0.6, ms_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -42,15 +50,15 @@ CMC_CREATE_UNIT(multiset_test, true, {
cmc_assert_equals(size_t, 50, ms_count(set));
ms_clear(set, NULL);
ms_clear(set);
cmc_assert_equals(size_t, 0, ms_count(set));
ms_free(set, NULL);
ms_free(set);
});
CMC_CREATE_TEST(insert[count cardinality multiplicity], {
struct multiset *set = ms_new(100, 0.6, cmp, hash);
struct multiset *set = ms_new(100, 0.6, ms_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -67,11 +75,11 @@ CMC_CREATE_UNIT(multiset_test, true, {
for (size_t i = 0; i <= 3; i++)
cmc_assert_equals(size_t, i, ms_multiplicity_of(set, i));
ms_free(set, NULL);
ms_free(set);
});
CMC_CREATE_TEST(remove[count cardinality multiplicity], {
struct multiset *set = ms_new(100, 0.6, cmp, hash);
struct multiset *set = ms_new(100, 0.6, ms_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -100,11 +108,11 @@ CMC_CREATE_UNIT(multiset_test, true, {
cmc_assert_equals(size_t, 1, ms_multiplicity_of(set, 2));
cmc_assert_equals(size_t, 2, ms_multiplicity_of(set, 3));
ms_free(set, NULL);
ms_free(set);
});
CMC_CREATE_TEST(remove_all[count cardinality multiplicity], {
struct multiset *set = ms_new(100, 0.6, cmp, hash);
struct multiset *set = ms_new(100, 0.6, ms_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -132,11 +140,11 @@ CMC_CREATE_UNIT(multiset_test, true, {
cmc_assert_equals(size_t, 2, ms_multiplicity_of(set, 2));
cmc_assert_equals(size_t, 0, ms_multiplicity_of(set, 3));
ms_free(set, NULL);
ms_free(set);
});
CMC_CREATE_TEST(multiplicity, {
struct multiset *set = ms_new(50, 0.6, cmp, hash);
struct multiset *set = ms_new(50, 0.6, ms_ftab_val);
cmc_assert_not_equals(ptr, NULL, set);
@@ -149,6 +157,6 @@ CMC_CREATE_UNIT(multiset_test, true, {
for (size_t i = 0; i < 20; i++)
cmc_assert_equals(size_t, 50, ms_multiplicity_of(set, i));
ms_free(set, NULL);
ms_free(set);
});
});