diff dowa/dowa_test.c @ 2:8a43dedbe530

[Dowa] Added HashMap and Updated Arena naming.
author June Park <parkjune1995@gmail.com>
date Wed, 24 Sep 2025 13:15:32 -0700
parents
children 3e12bf044589
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dowa/dowa_test.c	Wed Sep 24 13:15:32 2025 -0700
@@ -0,0 +1,100 @@
+#include "dowa.h"
+
+static void TestArena() {
+  const size_t capacity = 64;
+  Dowa_PArena arena = Dowa_Arena_Initialize(capacity);
+  assert(arena != NULL);
+  assert(arena->offset == 0);
+  assert(arena->capacity == capacity);
+
+  // Allocate within capacity
+  void *p1 = Dowa_Arena_Allocate(arena, 16);
+  // assert(p1 != NULL);
+  assert(arena->offset == 16);
+
+  // Allocate more
+  void *p2 = Dowa_Arena_Allocate(arena, 32);
+  assert(p2 != NULL);
+  assert(arena->offset == 48);
+
+  // Overflow allocation should return NULL and not advance offset
+  void *p3 = Dowa_Arena_Allocate(arena, 20);
+  assert(p3 == NULL);
+  assert(arena->offset == 48);
+
+  Dowa_Arena_Free(arena);
+}
+
+static void TestHashMap() {
+  const size_t capacity = 10;
+  Dowa_PHashMap map = Dowa_HashMap_Create(capacity);
+  assert(map != NULL);
+  assert(map->capacity == capacity);
+  assert(map->current_capacity == 0);
+
+  // Insert "foo" -> 42
+  int val1 = 42;
+  Dowa_HashMap_PushValue(map, "foo", &val1, sizeof(val1));
+  assert(map->current_capacity == 1);
+
+  int idx_foo = Dowa_HashMap_GetPosition(map, "foo");
+  Dowa_PHashEntry e_foo = map->entries[idx_foo];
+  assert(e_foo != NULL);
+  assert(strcmp(e_foo->key, "foo") == 0);
+  assert(*(int*)e_foo->buffer == 42);
+
+  // Overwrite "foo" -> 100
+  int val2 = 100;
+  Dowa_HashMap_PushValue(map, "foo", &val2, sizeof(val2));
+  // current_capacity increments again according to your implementation
+  assert(map->current_capacity == 2);
+
+  Dowa_PHashEntry e_foo2 = map->entries[idx_foo];
+  assert(e_foo2 != NULL);
+  assert(strcmp(e_foo2->key, "foo") == 0);
+  assert(*(int*)e_foo2->buffer == 100);
+
+  // Insert "bar" -> -7
+  int val3 = -7;
+  Dowa_HashMap_PushValue(map, "bar", &val3, sizeof(val3));
+  assert(map->current_capacity == 3);
+
+  int idx_bar = Dowa_HashMap_GetPosition(map, "bar");
+  Dowa_PHashEntry e_bar = map->entries[idx_bar];
+  assert(e_bar != NULL);
+  assert(strcmp(e_bar->key, "bar") == 0);
+  assert(*(int*)e_bar->buffer == -7);
+
+  // Pop "foo"
+  Dowa_HashMap_PopKey(map, "foo");
+  assert(map->entries[idx_foo] == NULL);
+  assert(map->current_capacity == 2);
+
+  // Pop "bar"
+  Dowa_HashMap_PopKey(map, "bar");
+  assert(map->entries[idx_bar] == NULL);
+  assert(map->current_capacity == 1);
+
+  // Clean up remaining entries and the map itself
+  for (size_t i = 0; i < map->capacity; ++i) {
+    Dowa_PHashEntry ent = map->entries[i];
+    if (ent) {
+      free(ent->key);
+      free(ent->buffer);
+      free(ent);
+    }
+  }
+  free(map->entries);
+  free(map);
+}
+
+int main(void) {
+  TestArena();
+  printf("Arena tests passed.\n");
+
+  TestHashMap();
+  printf("HashMap tests passed.\n");
+
+  return 0;
+}
+