Commit f708624
Changed files (3)
src
src/01/01a/main.c
@@ -4,5 +4,22 @@
int main(int argc, char *argv[])
{
printf("hello world\n");
+
+ PriorityQueue *queue = initialize();
+
+ add(queue, create_node(2, 200));
+ add(queue, create_node(1, 100));
+ add(queue, create_node(3, 300));
+
+ printf("%d\n", size(queue));
+
+ while (size(queue) > 0) {
+ Node *tmp = delete_min(queue);
+ if (tmp)
+ printf("%d\n", tmp->data);
+ else
+ printf("%d\n", size(queue));
+ }
+ printf("Bye\n");
return 0;
}
src/01/01a/priority_queue.c
@@ -49,9 +49,13 @@ void add(PriorityQueue *queue, Node *node) {
// This function is constant time O(1)
Node *delete_min(PriorityQueue *queue) {
- Node *tmp = queue->head;
- queue->head = tmp->next;
- return tmp;
+ if (queue->head) {
+ Node *tmp = queue->head;
+ queue->head = tmp->next;
+ queue->size--;
+ return tmp;
+ }
+ return NULL;
}
void destroy(PriorityQueue *queue) {
src/01/01a/priority_queue_test.c
@@ -57,16 +57,55 @@ Ensure(PriorityQueue, removes_the_node_with_the_lowest_priority){
assert_that(size(queue), is_equal_to(3));
assert_that(delete_min(queue), is_equal_to(min));
assert_that(queue->head, is_equal_to(mid));
+ assert_that(size(queue), is_equal_to(2));
destroy(queue);
};
+Ensure(PriorityQueue, when_removing_node_from_empty_queue) {
+ PriorityQueue *queue = initialize();
+
+ assert_that(delete_min(queue), is_equal_to(NULL));
+ assert_that(size(queue), is_equal_to(0));
+
+ destroy(queue);
+}
+
+Ensure(PriorityQueue, when_removing_it_decreases_the_size) {
+ PriorityQueue *queue = initialize();
+
+ add(queue, create_node(1, 0));
+ delete_min(queue);
+
+ assert_that(size(queue), is_equal_to(0));
+
+ destroy(queue);
+}
+
+Ensure(PriorityQueue, when_removing_the_last_node_it_decrements_the_count_correctly) {
+ PriorityQueue *queue = initialize();
+
+ add(queue, create_node(2, 200));
+ add(queue, create_node(1, 100));
+ add(queue, create_node(3, 300));
+
+ delete_min(queue);
+ delete_min(queue);
+ delete_min(queue);
+
+ assert_that(size(queue), is_equal_to(0));
+ destroy(queue);
+}
+
TestSuite *priority_queue_tests() {
TestSuite *suite = create_test_suite();
add_test_with_context(suite, PriorityQueue, returns_size);
add_test_with_context(suite, PriorityQueue, adds_a_node);
add_test_with_context(suite, PriorityQueue, removes_the_node_with_the_lowest_priority);
+ add_test_with_context(suite, PriorityQueue, when_removing_node_from_empty_queue);
+ add_test_with_context(suite, PriorityQueue, when_removing_it_decreases_the_size);
+ add_test_with_context(suite, PriorityQueue, when_removing_the_last_node_it_decrements_the_count_correctly);
return suite;
}