]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/generic/queue: add some tests
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 25 Sep 2018 10:37:45 +0000 (12:37 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 12 Oct 2018 15:36:45 +0000 (17:36 +0200)
lib/generic/queue.h
tests/test_queue.c [new file with mode: 0644]
tests/unit.mk

index 7fcbccc7fadfd7957a57f52db9953719c5ed4d41..a93ebdeb04158778146b0823e37fb62dcec1664b 100644 (file)
@@ -17,8 +17,6 @@
  * @file queue.h
  * @brief A queue, usable for FIFO and LIFO simultaneously.
  *
- * FIXME: unit tests
- *
  * Both the head and tail of the queue can be accessed and pushed to,
  * but only the head can be popped from.
  *
diff --git a/tests/test_queue.c b/tests/test_queue.c
new file mode 100644 (file)
index 0000000..547adb9
--- /dev/null
@@ -0,0 +1,65 @@
+/*  Copyright (C) 2018 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "tests/test.h"
+#include "lib/generic/queue.h"
+
+/* The main intention is to use queues with pointers, so we test the same-sized int. */
+typedef queue_t(ptrdiff_t) queue_int_t;
+
+static void test_int(void **state_)
+{
+       queue_int_t q;
+       queue_init(q);
+
+       queue_push_head(q, 2);
+       queue_push_head(q, 1);
+       queue_push_head(q, 0);
+       for (int i = 0; i < 100; ++i) {
+               assert_int_equal(queue_head(q), i);
+               queue_push(q, i + 3);
+               queue_pop(q);
+       }
+       assert_int_equal(queue_len(q), 3);
+       for (int i = 99; i > 0; --i) {
+               assert_int_equal(queue_head(q), i + 1);
+               queue_push_head(q, i);
+       }
+       assert_int_equal(queue_len(q), 3 + 99);
+
+       queue_deinit(q);
+       queue_init(q);
+
+       for (int i = 0; i < 100; ++i) {
+               queue_push(q, 2*i);
+               queue_push(q, 2*i + 1);
+               assert_int_equal(queue_head(q), i);
+               queue_pop(q);
+       }
+
+       queue_deinit(q);
+}
+
+
+int main(void)
+{
+       const UnitTest tests[] = {
+               unit_test(test_int),
+       };
+
+       return run_tests(tests);
+}
+
index df3b878fa155157c96a1fbb1ba12dbef9655c478..8ff93582c16a2465c08553588640538f851ea3f0 100644 (file)
@@ -3,15 +3,16 @@
 #
 
 tests_BIN := \
-       test_set \
-       test_map \
        test_array \
-       test_pack \
        test_lru \
-       test_utils \
+       test_map \
        test_module \
+       test_pack \
+       test_queue \
+       test_rplan \
+       test_set \
+       test_utils \
        test_zonecut \
-       test_rplan
        #test_cache TODO: re-consider how best to test cache
 
 mock_cmodule_CFLAGS := -fPIC