aboutsummaryrefslogtreecommitdiff
path: root/tests/test_vec.c
blob: 502335b440dec175b136801696ff00e10e2f85d8 (plain) (blame)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

#include "../include/testing.h"
#include "../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;
}