u_arena: Added basic setup
authorLukas Krickl <lukas@krickl.dev>
Mon, 23 Feb 2026 18:53:21 +0000 (19:53 +0100)
committerLukas Krickl <lukas@krickl.dev>
Mon, 23 Feb 2026 18:53:21 +0000 (19:53 +0100)
src/tests/t_arena.c
src/u_arena.c

index ba243c3be27a99e35ca888f57851300cbadaa393..f56be8c2616e285b4ab5d4ad5887121f77c2ff33 100644 (file)
@@ -13,12 +13,26 @@ int t_test_arena(void) {
        
        /* alloc */
        p1 = u_arena_alloc(&a, 1);
-       T_ASSERT((char *)p1 - (char*)a.data == 0, ("Unable to alloc index is at %d\n", a.o_index));
-       T_ASSERT(a.o_index, ("o_index bad\n"));
+       T_ASSERT((char *)p1 - (char*)a.data == 0, ("Unable to alloc index is at %d start address: %p; ptr: %p\n", 
+                               a.o_index,
+                               a.data,
+                               p1));
+       T_ASSERT(a.o_index == 1, ("o_index bad\n"));
+
+       p1 = u_arena_alloc(&a, 2);
+       T_ASSERT((char *)p1 - (char*)a.data == 2, ("Unable to alloc index is at %d start address: %p; ptr: %p\n", 
+                               a.o_index,
+                               a.data,
+                               p1));
+       T_ASSERT(a.o_index == 3, ("o_index bad\n"));
 
        /* reset */
+       u_arena_clear(&a);
+       T_ASSERT(a.o_index == 0, ("Index not 0"));
 
        /* free */
+       u_arena_free(&a);
+       T_ASSERT(a.data == LRTS_NULL, ("data not null"));
 
        return 0;
 }
index 6992532f1f713f7a0c5068ad844a0451d06aad8d..9349a784006055250f5f3975860cd4923a3b1516 100644 (file)
@@ -32,8 +32,20 @@ void *u_arena_alloc(struct u_arena *a, u32 n) {
        }
        
        /* get the new start address */
-       p = (char *)a->data + a->o_index + a->o_size * n;
+       p = (char *)a->data + a->o_index * a->o_size;
        a->o_index = new_o_index;
 
        return p;
 }
+
+void u_arena_clear(struct u_arena *a) {
+       lrts_assert(a);
+       a->o_index = 0;
+}
+
+void u_arena_free(struct u_arena *a) {
+       lrts_assert(a);
+       lrts_assert(a->data);
+       u_free(a->data);
+       a->data = LRTS_NULL;
+}