4 #include "ntp_calendar.h"
5 #include "ntp_stdlib.h"
7 #include "ntp_prio_q.h"
17 -makefile: ntpdsim-ntp_prio_q.o - make sure it's okay
23 typedef struct Element
25 char str[37]; // 37 seems like a nice candidate to break stuff
31 compare_elements(const void * e1, const void * e2)
33 return ((element*)e1)->number < ((element*)e2)->number;
39 test_AllocateDeallocateNode(void) {
40 element* e_ptr = debug_get_node(sizeof(element));
46 test_EmptyQueue(void) {
47 queue* q = create_queue();
49 TEST_ASSERT_NOT_NULL(q);
50 TEST_ASSERT_TRUE(empty(q));
51 TEST_ASSERT_NULL(queue_head(q));
52 TEST_ASSERT_NULL(dequeue(q));
53 TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
60 test_OneElementQueue(void) {
61 queue* q = create_queue();
63 TEST_ASSERT_NOT_NULL(q);
65 element e = {"string", 3};
66 element* e_ptr = debug_get_node(sizeof(element));
70 TEST_ASSERT_FALSE(empty(q));
71 TEST_ASSERT_NOT_NULL(queue_head(q));
72 TEST_ASSERT_EQUAL(1, get_no_of_elements(q));
74 element* e_ptr_returned = dequeue(q);
76 TEST_ASSERT_NOT_NULL(e_ptr_returned);
77 TEST_ASSERT_EQUAL_STRING(e_ptr_returned->str, "string");
78 TEST_ASSERT_EQUAL_PTR(e_ptr_returned, e_ptr);
79 TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
80 TEST_ASSERT_TRUE(empty(q));
81 TEST_ASSERT_NULL(dequeue(q));
88 test_MultipleElementQueue(void) {
89 queue* q = create_queue();
91 TEST_ASSERT_NOT_NULL(q);
93 element *e1_ptr, *e2_ptr, *e3_ptr;
95 e1_ptr = (element*)debug_get_node(sizeof(element));
96 e2_ptr = (element*)debug_get_node(sizeof(element));
97 e3_ptr = (element*)debug_get_node(sizeof(element));
103 TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
108 TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
115 TEST_ASSERT_EQUAL_PTR(dequeue(q), e1_ptr);
116 TEST_ASSERT_EQUAL_PTR(dequeue(q), e3_ptr);
117 TEST_ASSERT_EQUAL_PTR(dequeue(q), e2_ptr);
118 TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
119 TEST_ASSERT_NULL(dequeue(q));
126 test_CustomOrderQueue(void) {
127 queue* q = debug_create_priority_queue(compare_elements);
128 element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
130 e1_ptr = (element*)debug_get_node(sizeof(element));
131 e2_ptr = (element*)debug_get_node(sizeof(element));
132 e3_ptr = (element*)debug_get_node(sizeof(element));
133 e4_ptr = (element*)debug_get_node(sizeof(element));
134 e5_ptr = (element*)debug_get_node(sizeof(element));
135 e6_ptr = (element*)debug_get_node(sizeof(element));
141 e5_ptr->number = 100;
142 e6_ptr->number = 100;
151 TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
152 TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
154 TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
155 TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
157 TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
158 TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
160 TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
161 TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
163 TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
164 TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
166 TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
167 TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
169 TEST_ASSERT_TRUE(empty(q));
183 test_DestroyNonEmptyQueue(void) {
184 queue* q = create_queue();
185 element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
187 e1_ptr = (element*)debug_get_node(sizeof(element));
188 e2_ptr = (element*)debug_get_node(sizeof(element));
189 e3_ptr = (element*)debug_get_node(sizeof(element));
190 e4_ptr = (element*)debug_get_node(sizeof(element));
191 e5_ptr = (element*)debug_get_node(sizeof(element));
192 e6_ptr = (element*)debug_get_node(sizeof(element));
205 test_AppendQueues(void) {
206 queue* q1 = create_queue();
207 queue* q2 = create_queue();
208 queue* q3 = create_queue();
209 queue* q4 = create_queue();
210 queue* q5 = create_queue();
212 // append empty queue to empty queue
213 append_queue(q1, q2); // destroys q2
215 element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
216 e1_ptr = (element*)debug_get_node(sizeof(element));
217 e2_ptr = (element*)debug_get_node(sizeof(element));
218 e3_ptr = (element*)debug_get_node(sizeof(element));
219 e4_ptr = (element*)debug_get_node(sizeof(element));
220 e5_ptr = (element*)debug_get_node(sizeof(element));
221 e6_ptr = (element*)debug_get_node(sizeof(element));
228 // append empty queue to non empty queue
229 append_queue(q1, q3); // destroys q3
230 TEST_ASSERT_EQUAL(3, get_no_of_elements(q1));
232 // append non empty queue to empty queue
233 append_queue(q4, q1); // destroys q1
234 TEST_ASSERT_EQUAL(3, get_no_of_elements(q4));
239 // append non empty queue to non empty queue
240 append_queue(q4, q5); // destroys q5
241 TEST_ASSERT_EQUAL(5, get_no_of_elements(q4));
256 TEST_ASSERT_EQUAL(0, get_no_of_elements(q4));
258 // destroy_queue(q1); // destroyed already
259 // destroy_queue(q2); // destroyed already
260 // destroy_queue(q3); // destroyed already
262 // destroy_queue(q5); // destroyed already