diff options
| author | mo khan <mo.khan@gmail.com> | 2020-07-04 12:02:21 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-07-04 12:02:21 -0600 |
| commit | acd51492a20ce4ac6c55bda5760bdf251b89d3c2 (patch) | |
| tree | 0b8d52b79160f3c7a38c18d2238391f08c4d25a5 /src | |
| parent | 15a81cbf436f08b8649f36d5afffc135f1803bc1 (diff) | |
Attach previous tail
Diffstat (limited to 'src')
| -rw-r--r-- | src/01/01a/priority_queue.c | 4 | ||||
| -rw-r--r-- | src/01/01a/priority_queue_test.c | 27 |
2 files changed, 27 insertions, 4 deletions
diff --git a/src/01/01a/priority_queue.c b/src/01/01a/priority_queue.c index d9bfe7f..ec51288 100644 --- a/src/01/01a/priority_queue.c +++ b/src/01/01a/priority_queue.c @@ -41,7 +41,9 @@ void enqueue(Node *self, int priority, int data) { return enqueue(self->next, priority, data); } + Node *tmp = self->next; self->next = create_node(priority, data); + self->next->next = tmp; } // This function is linear time O(n) @@ -79,7 +81,7 @@ void inspect(PriorityQueue *queue) { printf("Items (%d): [ ", size(queue)); while(tmp) { - printf("%d ", tmp->data); + printf("(%d,%d) ", tmp->priority, tmp->data); tmp = tmp->next; } printf("]\n"); diff --git a/src/01/01a/priority_queue_test.c b/src/01/01a/priority_queue_test.c index abe30c5..97e788f 100644 --- a/src/01/01a/priority_queue_test.c +++ b/src/01/01a/priority_queue_test.c @@ -84,10 +84,29 @@ Ensure(PriorityQueue, when_removing_the_last_node_it_decrements_the_count_correc destroy(queue); } +Ensure(PriorityQueue, when_adding_data_out_of_order) { + PriorityQueue *queue = initialize(); + + add(queue, 7, 700); + add(queue, 3, 300); + add(queue, 0, 100); + add(queue, 4, 400); + + assert_that(size(queue), is_equal_to(4)); + assert_that(delete_min(queue), is_equal_to(100)); + assert_that(delete_min(queue), is_equal_to(300)); + assert_that(delete_min(queue), is_equal_to(400)); + assert_that(delete_min(queue), is_equal_to(700)); + assert_that(size(queue), is_equal_to(0)); + + destroy(queue); +} + Ensure(PriorityQueue, when_adding_random_values_with_random_priority_it_returns_the_minimum_priority_value_correctly) { PriorityQueue *queue = initialize(); + int n = 10; - for (int i = 0; i < 10; i++) + for (int i = 0; i < n; i++) add(queue, rand() % 10, rand() % 1000); while (size(queue) > 0) @@ -100,11 +119,13 @@ Ensure(PriorityQueue, when_adding_random_values_with_random_priority_it_returns_ 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, returns_size); + add_test_with_context(suite, PriorityQueue, when_adding_data_out_of_order); + add_test_with_context(suite, PriorityQueue, when_adding_random_values_with_random_priority_it_returns_the_minimum_priority_value_correctly); add_test_with_context(suite, PriorityQueue, when_removing_it_decreases_the_size); + add_test_with_context(suite, PriorityQueue, when_removing_node_from_empty_queue); add_test_with_context(suite, PriorityQueue, when_removing_the_last_node_it_decrements_the_count_correctly); return suite; |
