1#ifdef TEST_MINHEAP
2
3#include <mem/alloc.h>
4#include <structures/minheap.h>
5#include <test.h>
6
7#define MINHEAP_TEST_TIMES 50
8
9static struct minheap_node *nodes[MINHEAP_TEST_TIMES] = {0};
10
11static void mhtest_do_inserts(struct minheap *mh) {
12 for (int i = 0; i < MINHEAP_TEST_TIMES; i++) {
13 struct minheap_node *mhn =
14 kmalloc(sizeof(struct minheap_node), ALLOC_FLAGS_ZERO);
15 mhn->key = MINHEAP_TEST_TIMES - i;
16 nodes[i] = mhn;
17 minheap_insert(heap: mh, node: mhn, key: mhn->key);
18 }
19}
20
21TEST_DECLARE(minheap_test, .tier = TEST_TIER_UNIT) {
22 struct minheap *mh = minheap_create();
23 mhtest_do_inserts(mh);
24 TEST_ASSERT(mh->size == MINHEAP_TEST_TIMES);
25
26 for (int i = 0; i < MINHEAP_TEST_TIMES; i++) {
27 struct minheap_node *mhn = nodes[i];
28 minheap_remove(heap: mh, node: mhn);
29 kfree(mhn);
30 nodes[i] = NULL;
31 }
32
33 TEST_ASSERT(mh->size == 0);
34 mhtest_do_inserts(mh);
35
36 TEST_ASSERT(minheap_peek(mh)->key == 1);
37 TEST_ASSERT(minheap_pop(mh)->key == 1);
38
39 return TEST_SUCCESS;
40}
41
42#endif
43