diff options
| -rw-r--r-- | src/01/01a/Makefile | 2 | ||||
| -rw-r--r-- | src/01/01a/main.c | 22 | ||||
| -rw-r--r-- | src/01/01a/priority_queue.c | 12 | ||||
| -rw-r--r-- | src/01/01a/priority_queue.h | 1 | ||||
| -rw-r--r-- | src/01/01a/priority_queue_test.c | 23 |
5 files changed, 38 insertions, 22 deletions
diff --git a/src/01/01a/Makefile b/src/01/01a/Makefile index 43a68da..5001cd2 100644 --- a/src/01/01a/Makefile +++ b/src/01/01a/Makefile @@ -1,7 +1,7 @@ #!/usr/bin/make -f SHELL=/bin/sh -CC=gcc +CC=clang TEST_LIBS = -lcgreen BUILDDIR := build diff --git a/src/01/01a/main.c b/src/01/01a/main.c index 0d9ec46..717469b 100644 --- a/src/01/01a/main.c +++ b/src/01/01a/main.c @@ -1,24 +1,24 @@ #include <stdio.h> +#include <stdlib.h> #include "priority_queue.h" int main(int argc, char *argv[]) { - printf("hello world\n"); - + printf("=== COMP-272 - Assignment 1 - Question 1a ===\n"); PriorityQueue *queue = initialize(); - add(queue, create_node(2, 200)); - add(queue, create_node(1, 100)); - add(queue, create_node(3, 300)); + for (int i = 0; i < 10; i++) { + int priority = rand() % 10; + int data = rand() % 1000; - printf("%d\n", size(queue)); + printf("Enqueue: %d\t%d\n", priority, data); + add(queue, priority, data); + } + printf("\n"); while (size(queue) > 0) { - Node *tmp = delete_min(queue); - if (tmp) - printf("%d\n", tmp->data); - else - printf("%d\n", size(queue)); + printf("Dequeue: %d\n", delete_min(queue)); + inspect(queue); } printf("Bye\n"); return 0; diff --git a/src/01/01a/priority_queue.c b/src/01/01a/priority_queue.c index e4d94a7..d9bfe7f 100644 --- a/src/01/01a/priority_queue.c +++ b/src/01/01a/priority_queue.c @@ -1,4 +1,5 @@ #include "priority_queue.h" +#include <stdio.h> #include <stdlib.h> PriorityQueue *initialize() { @@ -73,6 +74,17 @@ int delete_min(PriorityQueue *queue) { return 0; } +void inspect(PriorityQueue *queue) { + Node *tmp = queue->head; + + printf("Items (%d): [ ", size(queue)); + while(tmp) { + printf("%d ", tmp->data); + tmp = tmp->next; + } + printf("]\n"); +} + void destroy(PriorityQueue *queue) { Node *current = queue->head; Node *tmp; diff --git a/src/01/01a/priority_queue.h b/src/01/01a/priority_queue.h index c172411..95cc242 100644 --- a/src/01/01a/priority_queue.h +++ b/src/01/01a/priority_queue.h @@ -16,3 +16,4 @@ int size(PriorityQueue *queue); void add(PriorityQueue *queue, int priority, int data); int delete_min(PriorityQueue *queue); void destroy(PriorityQueue *queue); +void inspect(PriorityQueue *queue); diff --git a/src/01/01a/priority_queue_test.c b/src/01/01a/priority_queue_test.c index 4f4824e..abe30c5 100644 --- a/src/01/01a/priority_queue_test.c +++ b/src/01/01a/priority_queue_test.c @@ -12,16 +12,6 @@ Implement the methods of the priority queue interface using a singly-linked list Analyze the running time of the `add(x)` and `deletMin()` operations based on this implementation. */ -static void inspect(PriorityQueue *queue) { - Node *tmp = queue->head; - - printf("Inspecting...\n"); - while(tmp) { - printf("%d\n", tmp->data); - tmp = tmp->next; - } -} - Describe(PriorityQueue); BeforeEach(PriorityQueue){ } AfterEach(PriorityQueue){ } @@ -94,6 +84,19 @@ Ensure(PriorityQueue, when_removing_the_last_node_it_decrements_the_count_correc destroy(queue); } +Ensure(PriorityQueue, when_adding_random_values_with_random_priority_it_returns_the_minimum_priority_value_correctly) { + PriorityQueue *queue = initialize(); + + for (int i = 0; i < 10; i++) + add(queue, rand() % 10, rand() % 1000); + + while (size(queue) > 0) + delete_min(queue); + + assert_that(size(queue), is_equal_to(0)); + destroy(queue); +} + TestSuite *priority_queue_tests() { TestSuite *suite = create_test_suite(); |
