Commit 7510ecb

mo khan <mo.khan@gmail.com>
2020-06-29 19:02:17
Split src/test code
1 parent c131d50
src/01/01a/priority_queue.c
@@ -0,0 +1,68 @@
+#include "priority_queue.h"
+#include <stdlib.h>
+
+PriorityQueue *initialize() {
+  PriorityQueue *queue = malloc(sizeof(PriorityQueue));
+  queue->size = 0;
+  queue->head = NULL;
+  return queue;
+}
+
+Node *create_node(int priority, int data) {
+  Node *node = malloc(sizeof(Node));
+  node->priority = priority;
+  node->data = data;
+  node->next = NULL;
+  return node;
+}
+
+// This function is constant time O(1)
+int size(PriorityQueue *queue) {
+  return queue->size;
+}
+
+// This function is linear time O(n)
+void add(PriorityQueue *queue, Node *node) {
+  queue->size++;
+
+  if (queue->head == NULL) {
+    queue->head = node;
+    return;
+  }
+
+  Node *tmp = queue->head;
+  Node *prev = NULL;
+
+  while(tmp != NULL) {
+    if (tmp->data > node->data) {
+      node->next = tmp;
+      if (tmp == queue->head)
+        queue->head = node;
+      else if (prev != NULL)
+        prev->next = node;
+      break;
+    }
+    prev = tmp;
+    tmp = tmp->next;
+  }
+}
+
+// This function is constant time O(1)
+Node *delete_min(PriorityQueue *queue) {
+  Node *tmp = queue->head;
+  queue->head = tmp->next;
+  return tmp;
+}
+
+void destroy(PriorityQueue *queue) {
+  Node *current = queue->head;
+  Node *tmp;
+
+  while(current) {
+    tmp = current, current = current->next;
+
+    if (tmp) free(tmp);
+  }
+  free(queue);
+}
+
src/01/01a/priority_queue.h
@@ -0,0 +1,20 @@
+struct node {
+  int priority;
+  int data;
+  struct node *next;
+};
+
+typedef struct node Node;
+
+typedef struct {
+  Node *head;
+  int size;
+} PriorityQueue;
+
+
+PriorityQueue *initialize();
+Node *create_node(int priority, int data);
+int size(PriorityQueue *queue);
+void add(PriorityQueue *queue, Node *node);
+Node *delete_min(PriorityQueue *queue);
+void destroy(PriorityQueue *queue);
src/01/01a/priority_queue_test.c
@@ -1,5 +1,6 @@
 #include <cgreen/cgreen.h>
 #include <string.h>
+#include "priority_queue.h"
 
 /*
 Implement the methods of the priority queue interface using a singly-linked list.
@@ -10,73 +11,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.
 */
-struct node {
-  int priority;
-  int data;
-  struct node *next;
-};
-
-typedef struct node Node;
-
-typedef struct {
-  Node *head;
-  int size;
-} PriorityQueue;
-
-
-// https://en.wikipedia.org/wiki/Priority_queue
-static PriorityQueue *initialize() {
-  PriorityQueue *queue = malloc(sizeof(PriorityQueue));
-  queue->size = 0;
-  queue->head = NULL;
-  return queue;
-}
-
-static Node *create_node(int priority, int data) {
-  Node *node = malloc(sizeof(Node));
-  node->priority = priority;
-  node->data = data;
-  node->next = NULL;
-  return node;
-}
-
-// This function is constant time O(1)
-static int size(PriorityQueue *queue) {
-  return queue->size;
-}
-
-// This function is linear time O(n)
-static void add(PriorityQueue *queue, Node *node) {
-  queue->size++;
-
-  if (queue->head == NULL) {
-    queue->head = node;
-    return;
-  }
-
-  Node *tmp = queue->head;
-  Node *prev = NULL;
-
-  while(tmp != NULL) {
-    if (tmp->data > node->data) {
-      node->next = tmp;
-      if (tmp == queue->head)
-        queue->head = node;
-      else if (prev != NULL)
-        prev->next = node;
-      break;
-    }
-    prev = tmp;
-    tmp = tmp->next;
-  }
-}
-
-// This function is constant time O(1)
-static Node *delete_min(PriorityQueue *queue) {
-  Node *tmp = queue->head;
-  queue->head = tmp->next;
-  return tmp;
-}
 
 static void inspect(PriorityQueue *queue) {
   Node *tmp = queue->head;
@@ -87,18 +21,6 @@ static void inspect(PriorityQueue *queue) {
   }
 }
 
-static void destroy(PriorityQueue *queue) {
-  Node *current = queue->head;
-  Node *tmp;
-
-  while(current) {
-    tmp = current, current = current->next;
-
-    if (tmp) free(tmp);
-  }
-  free(queue);
-}
-
 Describe(PriorityQueue);
 BeforeEach(PriorityQueue){ }
 AfterEach(PriorityQueue){ }
@@ -148,3 +70,9 @@ TestSuite *priority_queue_tests() {
 
   return suite;
 }
+
+int main(int argc, char **argv) {
+  TestSuite *suite = create_test_suite();
+  add_suite(suite, priority_queue_tests());
+  return run_test_suite(suite, create_text_reporter());
+}
.gitignore
@@ -1,3 +1,3 @@
 *.o
-main
+program
 build/