diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test.h | 2 | ||||
-rw-r--r-- | tests/test_hashmap.c | 38 |
2 files changed, 34 insertions, 6 deletions
diff --git a/tests/test.h b/tests/test.h index f860ee2..7a82d08 100644 --- a/tests/test.h +++ b/tests/test.h @@ -6,6 +6,8 @@ #define START_TESTS int main() { #define END_TESTS } #define TEST(name) strcpy(current_test, #name); +#define assert_null(actual) _assert(actual == NULL, __FILE__, __LINE__, "invalid value: expected NULL, got %s", actual) + #define assert_str(actual, expected) _assert(actual != NULL && strcmp(actual, expected) == 0, __FILE__, __LINE__, "invalid string: expected %s, got %s", expected, actual) #define assert(assertion, format, ...) _assert(assertion, __FILE__, __LINE__, format, ##__VA_ARGS__) #define ARRAY_SIZE(arr) sizeof arr / sizeof arr[0] diff --git a/tests/test_hashmap.c b/tests/test_hashmap.c index 14ec552..82f340c 100644 --- a/tests/test_hashmap.c +++ b/tests/test_hashmap.c @@ -5,23 +5,49 @@ START_TESTS TEST(hashmap) { struct hashmap *hm = hashmap_new(); - assert(hashmap_get(hm, "foo") == NULL, "expected NULL"); - hashmap_insert(hm, "foo", "bar"); char *value = hashmap_get(hm, "foo"); + assert_null(value); + value = hashmap_insert(hm, "foo", "bar"); + assert_null(value); + value = hashmap_get(hm, "foo"); assert_str(value, "bar"); hashmap_free(hm); } TEST(dot_notation) { + void *val; struct hashmap *user = hashmap_new(); - hashmap_insert(user, "name", "Danny"); + val = hashmap_insert(user, "name", "Danny"); + assert_null(val); struct hashmap *hm = hashmap_new(); - hashmap_insert(hm, "user", user); + val = hashmap_insert(hm, "user", user); + assert_null(val); assert(hashmap_resolve(hm, "user") == user, "expected user hashmap, got something else"); - char *value = (char *) hashmap_resolve(hm, "user.name"); - assert_str(value, "Danny"); + val = hashmap_resolve(hm, "user.name"); + assert_str(val, "Danny"); hashmap_free(user); hashmap_free(hm); } +TEST(hashmap_remove) { + struct hashmap *hm = hashmap_new(); + hashmap_insert(hm, "foo", "bar"); + char *value = hashmap_get(hm, "foo"); + assert_str(value, "bar"); + + // remove once + value = hashmap_remove(hm, "foo"); + assert_str(value, "bar"); + value = hashmap_get(hm, "foo"); + assert_null(value); + + // remove again (should no-op) + value = hashmap_remove(hm, "foo"); + assert_null(value); + value = hashmap_get(hm, "foo"); + assert_null(value); + + hashmap_free(hm); +} + END_TESTS
\ No newline at end of file |