diff options
| author | mo khan <mo.khan@gmail.com> | 2020-09-26 18:53:30 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-09-26 18:53:30 -0600 |
| commit | b1efa9cd26f037f8b7fa6e38ca1ccd9064093f39 (patch) | |
| tree | a2fb2a96496d9396f77777560008dfa889576aa3 /src/03/meldable_heap_test.c | |
| parent | 6b0b89527daa45ec94b96900bbe268d3828fcfad (diff) | |
feat: build a meldable heap
Diffstat (limited to 'src/03/meldable_heap_test.c')
| -rw-r--r-- | src/03/meldable_heap_test.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/03/meldable_heap_test.c b/src/03/meldable_heap_test.c new file mode 100644 index 0000000..a8503e0 --- /dev/null +++ b/src/03/meldable_heap_test.c @@ -0,0 +1,103 @@ +#include "meldable_heap.h" +#include <cgreen/cgreen.h> +#include <string.h> + +Ensure(add_inserts_item_into_right_subtree) { + MeldableHeap *heap = meldable_heap_initialize(5); + heap = meldable_heap_add(heap, 3); + + assert_that(heap->value, is_equal_to(3)); + assert_that(heap->right->value, is_equal_to(5)); +} + +Ensure(add_inserts_item_into_left_subtree) { + MeldableHeap *heap = meldable_heap_initialize(5); + heap = meldable_heap_add(heap, 8); + + assert_that(heap->value, is_equal_to(5)); + assert_that(heap->right->value, is_equal_to(8)); +} + +/* + (1) + / \ + (3) (2) + / \ / \ + (10) (6) (7) (4) + / \ / + (9) (8)(5) +*/ +Ensure(add_inserts_multiple_items_into_the_subtree) { + MeldableHeap *heap = NULL; + + for (int i = 1; i <= 10; ++i) + heap = meldable_heap_add(heap, i); + + assert_that(heap->value, is_equal_to(1)); + + assert_that(heap->right->value, is_equal_to(2)); + assert_that(heap->right->right->value, is_equal_to(4)); + assert_that(heap->right->right->left->value, is_equal_to(5)); + + assert_that(heap->right->left->value, is_equal_to(7)); + assert_that(heap->right->left->left->value, is_equal_to(9)); + assert_that(heap->right->left->right->value, is_equal_to(8)); + + assert_that(heap->left->value, is_equal_to(3)); + assert_that(heap->left->left->value, is_equal_to(10)); + assert_that(heap->left->right->value, is_equal_to(6)); +} + +/* + (1) + / \ + (3) (2) + / \ / \ + (10) (6) (7) (4) + / \ / + (9) (8)(5) + + to + + (1) + / \ + (3) (2) + / \ / \ + (10) (6) (4) + / \ / + (9) (8)(5) +*/ +Ensure(remove_removes_the_node_from_the_tree) { + MeldableHeap *heap = NULL; + + for (int i = 1; i <= 10; ++i) + heap = meldable_heap_add(heap, i); + + meldable_heap_inspect(heap); + meldable_heap_remove(heap->right->left); + meldable_heap_inspect(heap); + + assert_that(heap->value, is_equal_to(1)); + + assert_that(heap->right->value, is_equal_to(2)); + assert_that(heap->right->right->value, is_equal_to(4)); + assert_that(heap->right->right->left->value, is_equal_to(5)); + + assert_that(heap->right->left->value, is_equal_to(8)); + assert_that(heap->right->left->left->value, is_equal_to(9)); + assert_that(heap->right->left->right, is_equal_to(NULL)); + + assert_that(heap->left->value, is_equal_to(3)); + assert_that(heap->left->left->value, is_equal_to(10)); + assert_that(heap->left->right->value, is_equal_to(6)); +} + +TestSuite *meldable_heap_tests() { + TestSuite *x = create_test_suite(); + + add_test(x, add_inserts_item_into_right_subtree); + add_test(x, add_inserts_item_into_left_subtree); + add_test(x, add_inserts_multiple_items_into_the_subtree); + add_test(x, remove_removes_the_node_from_the_tree); + return x; +} |
