check_PROGRAMS = \
test-leapsec \
+ test-ntp_prio_q \
test-rc_cmdlength \
$(NULL)
tests_SOURCES = $(top_srcdir)/sntp/tests_main.cpp \
g_ntpdtest.cpp \
$(top_srcdir)/ntpd/ntp_leapsec.c \
+ $(top_srcdir)/ntpd/ntp_prio_q.c \
$(top_srcdir)/ntpd/rc_cmdlength.c \
g_leapsec.cpp \
$(NULL)
BUILT_SOURCES += \
$(srcdir)/run-leapsec.c \
+ $(srcdir)/run-ntp_prio_q.c \
$(srcdir)/run-rc_cmdlength.c \
$(NULL)
$(srcdir)/run-leapsec.c: $(srcdir)/leapsec.c $(std_unity_list)
$(run_unity) leapsec.c run-leapsec.c
+
+###
+test_ntp_prio_q_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_prio_q_LDADD = \
+ $(unity_tests_LDADD) \
+ ../../ntpd/ntpdsim-ntp_prio_q.o \
+ $(NULL)
+
+test_ntp_prio_q_SOURCES = \
+ ntp_prio_q.c \
+ run-ntp_prio_q.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+$(srcdir)/run-ntp_prio_q.c: $(srcdir)/ntp_prio_q.c $(std_unity_list)
+ $(run_unity) ntp_prio_q.c run-ntp_prio_q.c
+
+
###
test_rc_cmdlength_CFLAGS = \
-I$(top_srcdir)/sntp/unity \
$(run_unity) rc_cmdlength.c run-rc_cmdlength.c
+
TESTS =
if !NTP_CROSSCOMPILE
../../sntp/unity/libunity.a:
cd ../../sntp/unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
+$(top_builddir)/ntpd/ntpdsim-ntp_prio_q.o:
+ cd ../../ntpd/ && $(MAKE) $(AM_MAKEFLAGS) ntpdsim-ntp_prio_q.o
+
include $(top_srcdir)/depsver.mf
include $(top_srcdir)/includes.mf
--- /dev/null
+#include "config.h"
+
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+
+#include "ntp_prio_q.h"
+
+#include "unity.h"
+
+
+
+#include <string.h>
+/*
+TODO:
+-fix the includes
+-makefile: ntpdsim-ntp_prio_q.o - make sure it's okay
+*/
+
+
+/* helpers */
+
+typedef struct Element
+{
+ char str[37]; // 37 seems like a nice candidate to break stuff
+ int number;
+
+} element;
+
+int
+compare_elements(const void * e1, const void * e2)
+{
+ return ((element*)e1)->number < ((element*)e2)->number;
+}
+
+/* tests */
+
+void
+test_AllocateDeallocateNode(void) {
+ element* e_ptr = debug_get_node(sizeof(element));
+ free_node(e_ptr);
+}
+
+
+void
+test_EmptyQueue(void) {
+ queue* q = create_queue();
+
+ TEST_ASSERT_NOT_NULL(q);
+ TEST_ASSERT_TRUE(empty(q));
+ TEST_ASSERT_NULL(queue_head(q));
+ TEST_ASSERT_NULL(dequeue(q));
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+
+ destroy_queue(q);
+}
+
+
+void
+test_OneElementQueue(void) {
+ queue* q = create_queue();
+
+ TEST_ASSERT_NOT_NULL(q);
+
+ element e = {"string", 3};
+ element* e_ptr = debug_get_node(sizeof(element));
+ enqueue(q, e_ptr);
+ *e_ptr = e;
+
+ TEST_ASSERT_FALSE(empty(q));
+ TEST_ASSERT_NOT_NULL(queue_head(q));
+ TEST_ASSERT_EQUAL(1, get_no_of_elements(q));
+
+ element* e_ptr_returned = dequeue(q);
+
+ TEST_ASSERT_NOT_NULL(e_ptr_returned);
+ TEST_ASSERT_EQUAL_STRING(e_ptr_returned->str, "string");
+ TEST_ASSERT_EQUAL_PTR(e_ptr_returned, e_ptr);
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+ TEST_ASSERT_TRUE(empty(q));
+ TEST_ASSERT_NULL(dequeue(q));
+
+ destroy_queue(q);
+}
+
+
+void
+test_MultipleElementQueue(void) {
+ queue* q = create_queue();
+
+ TEST_ASSERT_NOT_NULL(q);
+
+ element *e1_ptr, *e2_ptr, *e3_ptr;
+
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+
+ enqueue(q, e1_ptr);
+ enqueue(q, e2_ptr);
+ enqueue(q, e3_ptr);
+
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
+
+ dequeue(q);
+ enqueue(q, e1_ptr);
+
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
+
+ dequeue(q);
+ dequeue(q);
+ enqueue(q, e3_ptr);
+ enqueue(q, e2_ptr);
+
+ TEST_ASSERT_EQUAL_PTR(dequeue(q), e1_ptr);
+ TEST_ASSERT_EQUAL_PTR(dequeue(q), e3_ptr);
+ TEST_ASSERT_EQUAL_PTR(dequeue(q), e2_ptr);
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+ TEST_ASSERT_NULL(dequeue(q));
+
+ destroy_queue(q);
+}
+
+
+void
+test_CustomOrderQueue(void) {
+ queue* q = debug_create_priority_queue(compare_elements);
+ element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+ e4_ptr = (element*)debug_get_node(sizeof(element));
+ e5_ptr = (element*)debug_get_node(sizeof(element));
+ e6_ptr = (element*)debug_get_node(sizeof(element));
+
+ e1_ptr->number = 1;
+ e2_ptr->number = 1;
+ e3_ptr->number = 10;
+ e4_ptr->number = 10;
+ e5_ptr->number = 100;
+ e6_ptr->number = 100;
+
+ enqueue(q, e3_ptr);
+ enqueue(q, e5_ptr);
+ enqueue(q, e2_ptr);
+ enqueue(q, e1_ptr);
+ enqueue(q, e4_ptr);
+ enqueue(q, e6_ptr);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
+
+ TEST_ASSERT_TRUE(empty(q));
+
+ destroy_queue(q);
+
+ free_node(e1_ptr);
+ free_node(e2_ptr);
+ free_node(e3_ptr);
+ free_node(e4_ptr);
+ free_node(e5_ptr);
+ free_node(e6_ptr);
+}
+
+
+void
+test_DestroyNonEmptyQueue(void) {
+ queue* q = create_queue();
+ element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+ e4_ptr = (element*)debug_get_node(sizeof(element));
+ e5_ptr = (element*)debug_get_node(sizeof(element));
+ e6_ptr = (element*)debug_get_node(sizeof(element));
+
+ enqueue(q, e3_ptr);
+ enqueue(q, e2_ptr);
+ enqueue(q, e4_ptr);
+ enqueue(q, e1_ptr);
+ enqueue(q, e6_ptr);
+ enqueue(q, e5_ptr);
+
+ destroy_queue(q);
+}
+
+void
+test_AppendQueues(void) {
+ queue* q1 = create_queue();
+ queue* q2 = create_queue();
+ queue* q3 = create_queue();
+ queue* q4 = create_queue();
+ queue* q5 = create_queue();
+
+ // append empty queue to empty queue
+ append_queue(q1, q2);
+
+ element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+ e4_ptr = (element*)debug_get_node(sizeof(element));
+ e5_ptr = (element*)debug_get_node(sizeof(element));
+ e6_ptr = (element*)debug_get_node(sizeof(element));
+
+ enqueue(q1, e1_ptr);
+ enqueue(q1, e2_ptr);
+ enqueue(q1, e3_ptr);
+
+
+ // append empty queue to non empty queue
+ append_queue(q1, q3);
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q1));
+
+ // append non empty queue to empty queue
+ append_queue(q4, q1);
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q4));
+
+ enqueue(q5, e4_ptr);
+ enqueue(q5, e5_ptr);
+
+ // append non empty queue to non empty queue
+ append_queue(q4, q5);
+ TEST_ASSERT_EQUAL(5, get_no_of_elements(q4));
+
+ dequeue(q4);
+ dequeue(q4);
+ dequeue(q4);
+ dequeue(q4);
+ dequeue(q4);
+
+ free_node(e1_ptr);
+ free_node(e2_ptr);
+ free_node(e3_ptr);
+ free_node(e4_ptr);
+ free_node(e5_ptr);
+
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q4));
+
+ destroy_queue(q1);
+ destroy_queue(q2);
+ destroy_queue(q3);
+ destroy_queue(q4);
+}
--- /dev/null
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+void resetTest(void);
+extern void test_AllocateDeallocateNode(void);
+extern void test_EmptyQueue(void);
+extern void test_OneElementQueue(void);
+extern void test_MultipleElementQueue(void);
+extern void test_CustomOrderQueue(void);
+extern void test_DestroyNonEmptyQueue(void);
+extern void test_AppendQueues(void);
+
+
+//=======Test Reset Option=====
+void resetTest()
+{
+ tearDown();
+ setUp();
+}
+
+char *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ Unity.TestFile = "ntp_prio_q.c";
+ UnityBegin("ntp_prio_q.c");
+ RUN_TEST(test_AllocateDeallocateNode, 39);
+ RUN_TEST(test_EmptyQueue, 46);
+ RUN_TEST(test_OneElementQueue, 60);
+ RUN_TEST(test_MultipleElementQueue, 88);
+ RUN_TEST(test_CustomOrderQueue, 126);
+ RUN_TEST(test_DestroyNonEmptyQueue, 183);
+ RUN_TEST(test_AppendQueues, 205);
+
+ return (UnityEnd());
+}