aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test.h2
-rw-r--r--tests/test_hashmap.c38
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