summaryrefslogtreecommitdiff
path: root/src/tests/arena_tests.c
blob: b1c8aa8a92f9f1de5c8d79200c718c50e6be7cda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "test.h"
#include "../utils/arena.h"
#include <stdlib.h>
#include <string.h>

char *ArenaAllocation() {
    Arena arena = {0};
    ArenaInit(&arena, 1024);

    // Init
    size_t elements = 10;
    int *arr = ArenaAlloc(&arena, sizeof(int) * elements);
    if (arr == NULL) return "The int array allocation failed";
    for (int i = 0; i < elements; ++i) {
        arr[i] = i;
    }
    char *duped = ArenaStrdup(&arena, "Test string");
    if (arr == NULL) return "The string array allocation failed";

    // Access
    for (int i = 0; i < elements; ++i) {
        if (arr[i] != i) return "Arena memory corruption in the int array";
    }
    if (strcmp(duped, "Test string") != 0) {
        return "Arena memory corruption in the string duping";
    }

    free(arena.mem);
    return NULL;
}

char *ArenaOutOfMemory() {
    Arena arena = {0};
    ArenaInit(&arena, sizeof(int) * 2);
    int *arr = ArenaAlloc(&arena, sizeof(int) * 3);
    free(arena.mem);
    if (arr != NULL) return "The int array allocation did not fail";
    return NULL;
}