aboutsummaryrefslogtreecommitdiff
path: root/tests/un/lists.c
blob: bacb3588fe997f90f76c66ad8c7dfd6ee523516a (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
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <ungrateful.h>

int main(void) {
    u64 i, v, times, size;
    List list = { 0 };

    size = UN_LIST_STANDARD_CAPACITY;
    times = 4;

    {
        list.alloc = un_allocator_get_temporary();
        list.element_size = sizeof(u64);

        assert(un_list_get(&list, 0) == NULL);

        for (i = 0; i < size; i++) {
            v = i * times;

            assert(un_list_append(&list, (void *)(&v)));
        }

        assert(*(u64*)un_list_get(&list, size - 1) == ((size - 1) * times));

        for (i = 0; i < size; i++) {
            v = *(u64*)un_list_get(&list, i);
            assert(v == i * times);
        }

        un_list_remove(&list, 0);
        assert(*(u64*)un_list_get(&list, 0) == times);

        un_list_remove(&list, list.count); // will be ignored
        assert(list.count == (size - 1));

        un_list_remove(&list, list.count - 1);
        assert(list.count == (size - 2));

        for (i = 0; i < size; i++) {
            v = i * times;
            assert(un_list_append(&list, (void *)(&v)));
        }

        assert(list.capacity == (size * 2));

        un_list_destroy(&list, true);

        assert(list.data == NULL);
    }
    
    return 0;
}