master
1#include "meldable_heap.h"
2#include <cgreen/cgreen.h>
3#include <string.h>
4
5Ensure(add_inserts_item_into_right_subtree) {
6 MeldableHeap *heap = meldable_heap_initialize(5);
7 heap = meldable_heap_add(heap, 3);
8
9 assert_that(heap->value, is_equal_to(3));
10 assert_that(heap->right->value, is_equal_to(5));
11}
12
13Ensure(add_inserts_item_into_left_subtree) {
14 MeldableHeap *heap = meldable_heap_initialize(5);
15 heap = meldable_heap_add(heap, 8);
16
17 assert_that(heap->value, is_equal_to(5));
18 assert_that(heap->right->value, is_equal_to(8));
19}
20
21/*
22 (1)
23 / \
24 (3) (2)
25 / \ / \
26 (10) (6) (7) (4)
27 / \ /
28 (9) (8)(5)
29*/
30Ensure(add_inserts_multiple_items_into_the_subtree) {
31 MeldableHeap *heap = NULL;
32
33 for (int i = 1; i <= 10; ++i)
34 heap = meldable_heap_add(heap, i);
35
36 assert_that(heap->value, is_equal_to(1));
37
38 assert_that(heap->right->value, is_equal_to(2));
39 assert_that(heap->right->right->value, is_equal_to(4));
40 assert_that(heap->right->right->left->value, is_equal_to(5));
41
42 assert_that(heap->right->left->value, is_equal_to(7));
43 assert_that(heap->right->left->left->value, is_equal_to(9));
44 assert_that(heap->right->left->right->value, is_equal_to(8));
45
46 assert_that(heap->left->value, is_equal_to(3));
47 assert_that(heap->left->left->value, is_equal_to(10));
48 assert_that(heap->left->right->value, is_equal_to(6));
49}
50
51/*
52 (1)
53 / \
54 (3) (2)
55 / \ / \
56 (10) (6) (7) (4)
57 / \ /
58 (9) (8)(5)
59
60 to
61
62 (1)
63 / \
64 (3) (2)
65 / \ / \
66 (10) (6) (4)
67 / \ /
68 (9) (8)(5)
69*/
70Ensure(remove_removes_the_node_from_the_tree) {
71 MeldableHeap *heap = NULL;
72
73 for (int i = 1; i <= 10; ++i)
74 heap = meldable_heap_add(heap, i);
75
76 meldable_heap_remove(heap->right->left);
77
78 assert_that(heap->value, is_equal_to(1));
79
80 assert_that(heap->right->value, is_equal_to(2));
81 assert_that(heap->right->right->value, is_equal_to(4));
82 assert_that(heap->right->right->left->value, is_equal_to(5));
83
84 assert_that(heap->right->left->value, is_equal_to(8));
85 assert_that(heap->right->left->left->value, is_equal_to(9));
86 assert_that(heap->right->left->right, is_equal_to(NULL));
87
88 assert_that(heap->left->value, is_equal_to(3));
89 assert_that(heap->left->left->value, is_equal_to(10));
90 assert_that(heap->left->right->value, is_equal_to(6));
91}
92
93TestSuite *meldable_heap_tests() {
94 TestSuite *x = create_test_suite();
95
96 add_test(x, add_inserts_item_into_right_subtree);
97 add_test(x, add_inserts_item_into_left_subtree);
98 add_test(x, add_inserts_multiple_items_into_the_subtree);
99 add_test(x, remove_removes_the_node_from_the_tree);
100 return x;
101}