From 26d4a6072cbf59708071dac8393c88ddacd69a37 Mon Sep 17 00:00:00 2001
From: Sander Vrijders <sander.vrijders@ugent.be>
Date: Thu, 14 Sep 2017 13:43:09 +0200
Subject: lib: Add reordering queue to FRCT

This adds a reordering queue to FRCT so that SDUs can be delivered
in-order when requested.
---
 src/lib/tests/CMakeLists.txt |   1 +
 src/lib/tests/rq_test.c      | 115 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 116 insertions(+)
 create mode 100644 src/lib/tests/rq_test.c

(limited to 'src/lib/tests')

diff --git a/src/lib/tests/CMakeLists.txt b/src/lib/tests/CMakeLists.txt
index a93bf321..0edd4a42 100644
--- a/src/lib/tests/CMakeLists.txt
+++ b/src/lib/tests/CMakeLists.txt
@@ -14,6 +14,7 @@ create_test_sourcelist(${PARENT_DIR}_tests test_suite.c
   crc32_test.c
   hashtable_test.c
   md5_test.c
+  rq_test.c
   sha3_test.c
   time_utils_test.c
   ${TIMERWHEEL_TEST}
diff --git a/src/lib/tests/rq_test.c b/src/lib/tests/rq_test.c
new file mode 100644
index 00000000..e2d0f435
--- /dev/null
+++ b/src/lib/tests/rq_test.c
@@ -0,0 +1,115 @@
+/*
+ * Ouroboros - Copyright (C) 2016 - 2017
+ *
+ * Reordering queue test
+ *
+ *    Dimitri Staessens <dimitri.staessens@ugent.be>
+ *    Sander Vrijders   <sander.vrijders@ugent.be>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., http://www.fsf.org/about/contact/.
+ */
+
+#include <ouroboros/rq.h>
+
+#include <stdio.h>
+
+#define Q_SIZE 5
+
+int rq_test(int     argc,
+            char ** argv)
+{
+        struct rq * q;
+        int         i;
+
+        (void) argc;
+        (void) argv;
+
+        q = rq_create(Q_SIZE);
+        if (q == NULL) {
+                printf("Failed to create.\n");
+                return -1;
+        }
+
+        if (rq_push(q, 1, 1)) {
+                printf("Failed to insert.\n");
+                return -1;
+        }
+
+        if (!rq_has(q, 1)) {
+                printf("Inserted item not present.\n");
+                return -1;
+        }
+
+        if (rq_peek(q) != 1) {
+                printf("Inserted item not present.\n");
+                return -1;
+        }
+
+        if (rq_pop(q) != 1) {
+                printf("Bad pop.\n");
+                return -1;
+        }
+
+        if (rq_push(q, 3, 5)) {
+                printf("Failed to insert.\n");
+                return -1;
+        }
+
+        if (rq_push(q, 1, 3)) {
+                printf("Failed to insert.\n");
+                return -1;
+        }
+
+        if (rq_push(q, 2, 7)) {
+                printf("Failed to insert.\n");
+                return -1;
+        }
+
+        if (!rq_has(q, 3)) {
+                printf("Inserted item not present.\n");
+                return -1;
+        }
+
+        if (rq_has(q, 4)) {
+                printf("Item present that was not inserted.\n");
+                return -1;
+        }
+
+        if (rq_peek(q) != 1) {
+                printf("Inserted item not present.\n");
+                return -1;
+        }
+
+        if (rq_pop(q) != 3) {
+                printf("Bad pop.\n");
+                return -1;
+        }
+
+        if (rq_peek(q) != 2) {
+                printf("Inserted item not present.\n");
+                return -1;
+        }
+
+        if (rq_pop(q) != 7) {
+                printf("Bad pop.\n");
+                return -1;
+        }
+
+        for (i = 0; i < Q_SIZE + 1; i++)
+                rq_push(q, i, i);
+
+        rq_destroy(q);
+
+        return 0;
+}
-- 
cgit v1.2.3