aboutsummaryrefslogtreecommitdiff
path: root/src/std/test_vec.c
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-04-08 13:14:27 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-04-08 13:15:01 +0200
commitcf534d762754860ed5b714974f99acd282d48b3b (patch)
treebf22341cedfb50ee7bcd4e15f85add2329783f31 /src/std/test_vec.c
parent630fcb1846aed16b9ab62bcf700f668883f4521f (diff)
Restructure into src/{std,json}/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/std/test_vec.c')
-rw-r--r--src/std/test_vec.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/std/test_vec.c b/src/std/test_vec.c
new file mode 100644
index 0000000..e95a1b6
--- /dev/null
+++ b/src/std/test_vec.c
@@ -0,0 +1,88 @@
+#include "testing.h"
+#include "vec.h"
+
+typedef struct {
+ i32 x;
+ i32 y;
+} Point;
+
+i32 test_int_vec() {
+ Arena perm = Arena_new(128e3);
+
+ Vec vec = Vec_new(&perm, i32, 2);
+ i32 *tmp = new(&perm, i32, 1);
+ *tmp = 1;
+ Vec_push(&perm, &vec, tmp);
+ *tmp = 2;
+ Vec_push(&perm, &vec, tmp);
+
+ t_assert_equal(*Vec_get(vec, i32, 0), 1);
+ t_assert_equal(*Vec_get(vec, i32, 1), 2);
+ t_assert_equal(vec.cap, 2);
+
+ *tmp = 3;
+ Vec_push(&perm, &vec, tmp);
+
+ t_assert_equal(*Vec_get(vec, i32, 2), 3);
+ t_assert_equal(vec.cap, 4);
+
+ return 0;
+}
+
+i32 test_vec_push() {
+ Arena perm = Arena_new(128e3);
+ Vec v = Vec_new(&perm, i32, 4);
+
+ i32 vals[] = {10, 20, 30};
+ for (i32 i = 0; i < 3; i++) Vec_push(&perm, &v, &vals[i]);
+
+ t_assert_equal(v.len, 3);
+ t_assert_equal(*Vec_get(v, i32, 0), 10);
+ t_assert_equal(*Vec_get(v, i32, 1), 20);
+ t_assert_equal(*Vec_get(v, i32, 2), 30);
+ t_assert_equal(Arena_get_used(perm), v.cap * sizeof(i32));
+
+ return 0;
+}
+
+i32 test_vec_grow() {
+ Arena perm = Arena_new(128e3);
+ Vec v = Vec_new(&perm, i32, 2);
+
+ for (i32 i = 0; i < 8; i++) Vec_push(&perm, &v, &i);
+
+ t_assert_equal(v.len, 8);
+ t_assert_equal(Arena_get_used(perm), sizeof(i32) * (2 + 4 + 8));
+
+ return 0;
+}
+
+i32 test_vec_struct() {
+ Arena perm = Arena_new(128e3);
+ Vec v = Vec_new(&perm, Point, 2);
+
+ Point p1 = {1, 2}, p2 = {3, 4};
+ Vec_push(&perm, &v, &p1);
+ Vec_push(&perm, &v, &p2);
+
+ Point *r0 = Vec_get(v, Point, 0);
+ Point *r1 = Vec_get(v, Point, 1);
+ t_assert_equal(r0->x, 1);
+ t_assert_equal(r0->y, 2);
+ t_assert_equal(r1->x, 3);
+ t_assert_equal(r1->y, 4);
+ t_assert_equal(Arena_get_used(perm), 16);
+
+ return 0;
+}
+
+i32 test_vec_initial_len() {
+ Arena perm = Arena_new(128e3);
+ Vec v = Vec_new(&perm, i32, 4);
+
+ t_assert_equal(v.len, 0);
+ t_assert_equal(v.cap, 4);
+ t_assert_equal(Arena_get_used(perm), 16);
+
+ return 0;
+}