master
1#include "priority_queue.h"
2#include <cgreen/cgreen.h>
3#include <string.h>
4
5Describe(PriorityQueue);
6BeforeEach(PriorityQueue) {}
7AfterEach(PriorityQueue) {}
8
9Ensure(PriorityQueue, returns_size) {
10 PriorityQueue *queue = initialize();
11
12 assert_that(size(queue), is_equal_to(0));
13
14 destroy(queue);
15}
16
17Ensure(PriorityQueue, adds_a_node) {
18 PriorityQueue *queue = initialize();
19
20 add(queue, 1, 0);
21
22 assert_that(size(queue), is_equal_to(1));
23
24 destroy(queue);
25}
26
27Ensure(PriorityQueue, removes_the_node_with_the_lowest_priority) {
28 PriorityQueue *queue = initialize();
29
30 add(queue, 3, 300);
31 add(queue, 1, 100);
32 add(queue, 2, 200);
33
34 assert_that(size(queue), is_equal_to(3));
35 assert_that(delete_min(queue), is_equal_to(100));
36 assert_that(queue->head->data, is_equal_to(200));
37 assert_that(size(queue), is_equal_to(2));
38
39 destroy(queue);
40};
41
42Ensure(PriorityQueue, when_removing_node_from_empty_queue) {
43 PriorityQueue *queue = initialize();
44
45 assert_that(delete_min(queue), is_equal_to(NULL));
46 assert_that(size(queue), is_equal_to(0));
47
48 destroy(queue);
49}
50
51Ensure(PriorityQueue, when_removing_it_decreases_the_size) {
52 PriorityQueue *queue = initialize();
53
54 add(queue, 1, 0);
55 delete_min(queue);
56
57 assert_that(size(queue), is_equal_to(0));
58
59 destroy(queue);
60}
61
62Ensure(PriorityQueue,
63 when_removing_the_last_node_it_decrements_the_count_correctly) {
64 PriorityQueue *queue = initialize();
65
66 add(queue, 2, 200);
67 add(queue, 1, 100);
68 add(queue, 3, 300);
69
70 delete_min(queue);
71 delete_min(queue);
72 delete_min(queue);
73
74 assert_that(size(queue), is_equal_to(0));
75 destroy(queue);
76}
77
78Ensure(PriorityQueue, when_adding_data_out_of_order) {
79 PriorityQueue *queue = initialize();
80
81 add(queue, 7, 700);
82 add(queue, 3, 300);
83 add(queue, 0, 100);
84 add(queue, 4, 400);
85
86 assert_that(size(queue), is_equal_to(4));
87 assert_that(delete_min(queue), is_equal_to(100));
88 assert_that(delete_min(queue), is_equal_to(300));
89 assert_that(delete_min(queue), is_equal_to(400));
90 assert_that(delete_min(queue), is_equal_to(700));
91 assert_that(size(queue), is_equal_to(0));
92
93 destroy(queue);
94}
95
96Ensure(
97 PriorityQueue,
98 when_adding_random_values_with_random_priority_it_returns_the_minimum_priority_value_correctly) {
99 PriorityQueue *queue = initialize();
100 int n = 10;
101
102 for (int i = 0; i < n; i++)
103 add(queue, rand() % 10, rand() % 1000);
104
105 while (size(queue) > 0)
106 delete_min(queue);
107
108 assert_that(size(queue), is_equal_to(0));
109 destroy(queue);
110}
111
112TestSuite *priority_queue_tests() {
113 TestSuite *suite = create_test_suite();
114
115 add_test_with_context(suite, PriorityQueue, adds_a_node);
116 add_test_with_context(suite, PriorityQueue,
117 removes_the_node_with_the_lowest_priority);
118 add_test_with_context(suite, PriorityQueue, returns_size);
119 add_test_with_context(suite, PriorityQueue, when_adding_data_out_of_order);
120 add_test_with_context(
121 suite, PriorityQueue,
122 when_adding_random_values_with_random_priority_it_returns_the_minimum_priority_value_correctly);
123 add_test_with_context(suite, PriorityQueue,
124 when_removing_it_decreases_the_size);
125 add_test_with_context(suite, PriorityQueue,
126 when_removing_node_from_empty_queue);
127 add_test_with_context(
128 suite, PriorityQueue,
129 when_removing_the_last_node_it_decrements_the_count_correctly);
130
131 return suite;
132}
133
134int main(int argc, char **argv) {
135 TestSuite *suite = create_test_suite();
136 add_suite(suite, priority_queue_tests());
137 return run_test_suite(suite, create_text_reporter());
138}