| 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 | |
| 9 | static struct minheap_node *nodes[MINHEAP_TEST_TIMES] = {0}; |
| 10 | |
| 11 | static 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 | |
| 21 | TEST_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 |