summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/arena_tests.c39
-rw-r--r--src/tests/runner.c37
-rw-r--r--src/tests/test.h16
3 files changed, 92 insertions, 0 deletions
diff --git a/src/tests/arena_tests.c b/src/tests/arena_tests.c
new file mode 100644
index 0000000..b1c8aa8
--- /dev/null
+++ b/src/tests/arena_tests.c
@@ -0,0 +1,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;
+}
diff --git a/src/tests/runner.c b/src/tests/runner.c
new file mode 100644
index 0000000..68c17bf
--- /dev/null
+++ b/src/tests/runner.c
@@ -0,0 +1,37 @@
+#include "test.h"
+#include <stdio.h>
+
+const UnitTest TESTS[] = {
+ (UnitTest) { .Name = "Arena out of mem", .Function = ArenaOutOfMemory },
+ (UnitTest) { .Name = "Arena allocation", .Function = ArenaAllocation },
+};
+
+void SetGreenColor() {
+ printf("\x1b[32m");
+}
+
+void SetRedColor() {
+ printf("\x1b[31m");
+}
+
+void ResetColor() {
+ printf("\x1b[39m");
+}
+
+int main(void) {
+ size_t length = sizeof(TESTS) / sizeof(TESTS[0]);
+ SetGreenColor();
+ for (size_t i = 0; i < length; ++i) {
+ const UnitTest *test = &TESTS[i];
+ char *outp = test->Function();
+ if (outp == NULL) {
+ printf("Test '%s' passed\n", test->Name);
+ } else {
+ SetRedColor();
+ printf("test '%s' failed: %s\n", test->Name, outp);
+ return 1;
+ }
+ }
+ ResetColor();
+ return 0;
+}
diff --git a/src/tests/test.h b/src/tests/test.h
new file mode 100644
index 0000000..d2c4aeb
--- /dev/null
+++ b/src/tests/test.h
@@ -0,0 +1,16 @@
+#ifndef TESTS_H
+#define TESTS_H
+
+typedef struct {
+ char *Name;
+ // The test function. If it returns an error message
+ // the test is concidered as failed
+ char *(*Function)();
+} UnitTest;
+
+// ========== TESTS ==========
+
+char *ArenaAllocation();
+char *ArenaOutOfMemory();
+
+#endif // TESTS_H