From 1d51ea1bdc78cb81823c6e27c9e1c68bff5d8ae8 Mon Sep 17 00:00:00 2001 From: mo khan Date: Tue, 30 Jun 2020 14:29:08 -0600 Subject: Add random values to priority queue --- src/01/01a/Makefile | 2 +- src/01/01a/main.c | 22 +++++++++++----------- src/01/01a/priority_queue.c | 12 ++++++++++++ src/01/01a/priority_queue.h | 1 + src/01/01a/priority_queue_test.c | 23 +++++++++++++---------- 5 files changed, 38 insertions(+), 22 deletions(-) (limited to 'src') 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 +#include #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 #include 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(); -- cgit v1.2.3