Commit 1d51ea1

mo khan <mo.khan@gmail.com>
2020-06-30 20:29:08
Add random values to priority queue
1 parent 2eb5e96
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;
src/01/01a/Makefile
@@ -1,7 +1,7 @@
 #!/usr/bin/make -f
 SHELL=/bin/sh
 
-CC=gcc
+CC=clang
 TEST_LIBS = -lcgreen
 
 BUILDDIR := build
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;
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);
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();