]>
git.proxmox.com Git - mirror_frr.git/blob - pceplib/test/pcep_utils_queue_test.c
1 // SPDX-License-Identifier: LGPL-2.1-or-later
3 * This file is part of the PCEPlib, a PCEP protocol library.
5 * Copyright (C) 2020 Volta Networks https://voltanet.io/
7 * Author : Brady Johnson <brady@voltanet.io>
17 #include <CUnit/CUnit.h>
19 #include "pcep_utils_queue.h"
20 #include "pcep_utils_queue_test.h"
22 typedef struct node_data_
{
28 void test_empty_queue()
30 queue_handle
*handle
= queue_initialize();
32 CU_ASSERT_PTR_NOT_NULL(handle
);
33 assert(handle
!= NULL
);
34 CU_ASSERT_PTR_NULL(handle
->head
);
35 CU_ASSERT_EQUAL(handle
->num_entries
, 0);
37 queue_destroy(handle
);
41 void test_null_queue_handle()
43 /* test each method handles a NULL handle without crashing */
46 void *ptr
= queue_enqueue(NULL
, &data
);
47 CU_ASSERT_PTR_NULL(ptr
);
49 ptr
= queue_dequeue(NULL
);
50 CU_ASSERT_PTR_NULL(ptr
);
56 node_data data1
, data2
, data3
;
61 queue_handle
*handle
= queue_initialize();
63 queue_enqueue(handle
, &data1
);
64 queue_enqueue(handle
, &data2
);
65 queue_enqueue(handle
, &data3
);
67 CU_ASSERT_EQUAL(handle
->num_entries
, 3);
69 queue_node
*node
= handle
->head
;
70 CU_ASSERT_PTR_EQUAL(node
->data
, &data1
);
72 node
= node
->next_node
;
73 CU_ASSERT_PTR_EQUAL(node
->data
, &data2
);
75 node
= node
->next_node
;
76 CU_ASSERT_PTR_EQUAL(node
->data
, &data3
);
78 node
= node
->next_node
;
79 CU_ASSERT_PTR_NULL(node
);
81 queue_destroy(handle
);
85 void test_enqueue_with_limit()
87 node_data data1
, data2
, data3
;
92 queue_handle
*handle
= queue_initialize_with_size(2);
94 queue_node
*node
= queue_enqueue(handle
, &data1
);
95 CU_ASSERT_PTR_NOT_NULL(node
);
97 node
= queue_enqueue(handle
, &data2
);
98 CU_ASSERT_PTR_NOT_NULL(node
);
100 node
= queue_enqueue(handle
, &data3
);
101 CU_ASSERT_PTR_NULL(node
);
103 CU_ASSERT_EQUAL(handle
->num_entries
, 2);
106 CU_ASSERT_PTR_EQUAL(node
->data
, &data1
);
108 node
= node
->next_node
;
109 CU_ASSERT_PTR_EQUAL(node
->data
, &data2
);
111 node
= node
->next_node
;
112 CU_ASSERT_PTR_NULL(node
);
114 queue_destroy(handle
);
120 node_data data1
, data2
, data3
;
125 queue_handle
*handle
= queue_initialize();
127 /* first test dequeue handles an empty queue */
128 void *node_data
= queue_dequeue(handle
);
129 CU_ASSERT_PTR_NULL(node_data
);
131 queue_enqueue(handle
, &data1
);
132 queue_enqueue(handle
, &data2
);
133 queue_enqueue(handle
, &data3
);
135 node_data
= queue_dequeue(handle
);
136 CU_ASSERT_PTR_EQUAL(node_data
, &data1
);
137 CU_ASSERT_EQUAL(handle
->num_entries
, 2);
139 node_data
= queue_dequeue(handle
);
140 CU_ASSERT_PTR_EQUAL(node_data
, &data2
);
141 CU_ASSERT_EQUAL(handle
->num_entries
, 1);
143 node_data
= queue_dequeue(handle
);
144 CU_ASSERT_PTR_EQUAL(node_data
, &data3
);
145 CU_ASSERT_EQUAL(handle
->num_entries
, 0);
147 node_data
= queue_dequeue(handle
);
148 CU_ASSERT_PTR_NULL(node_data
);
150 queue_destroy(handle
);