1488570ebSJim Harris /* SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse * Copyright (C) 2016 Intel Corporation.
3a4381cfeSDaniel Verkamp * All rights reserved.
4a4381cfeSDaniel Verkamp */
5a4381cfeSDaniel Verkamp
6a4381cfeSDaniel Verkamp #include "spdk/stdinc.h"
7a4381cfeSDaniel Verkamp
8ae431e31SKonrad Sztyber #include "spdk_internal/cunit.h"
9a4381cfeSDaniel Verkamp
107ffe586aSJim Harris #include "util/bit_array.c"
1145593f39SJim Harris #include "common/lib/test_env.c"
12a4381cfeSDaniel Verkamp
13a4381cfeSDaniel Verkamp static void
test_1bit(void)14a4381cfeSDaniel Verkamp test_1bit(void)
15a4381cfeSDaniel Verkamp {
16a4381cfeSDaniel Verkamp struct spdk_bit_array *ba;
17a4381cfeSDaniel Verkamp
18a4381cfeSDaniel Verkamp ba = spdk_bit_array_create(1);
19a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
20a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 1);
21a4381cfeSDaniel Verkamp
22a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
23a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == UINT32_MAX);
24a4381cfeSDaniel Verkamp
25a4381cfeSDaniel Verkamp /* Set bit 0 */
26a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 0) == 0);
27a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == true);
28a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == 0);
29a4381cfeSDaniel Verkamp
30a4381cfeSDaniel Verkamp /* Clear bit 0 */
31a4381cfeSDaniel Verkamp spdk_bit_array_clear(ba, 0);
32a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
33a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == UINT32_MAX);
34a4381cfeSDaniel Verkamp
35a4381cfeSDaniel Verkamp spdk_bit_array_free(&ba);
36a4381cfeSDaniel Verkamp CU_ASSERT(ba == NULL);
37a4381cfeSDaniel Verkamp }
38a4381cfeSDaniel Verkamp
39a4381cfeSDaniel Verkamp static void
test_64bit(void)40a4381cfeSDaniel Verkamp test_64bit(void)
41a4381cfeSDaniel Verkamp {
42a4381cfeSDaniel Verkamp struct spdk_bit_array *ba;
43a4381cfeSDaniel Verkamp
44a4381cfeSDaniel Verkamp ba = spdk_bit_array_create(64);
45a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
46a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 64);
47a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
48a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 63) == false);
49a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 64) == false);
50a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1000) == false);
51a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == UINT32_MAX);
52a4381cfeSDaniel Verkamp
53a4381cfeSDaniel Verkamp /* Set bit 1 */
54a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 1) == 0);
55a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
56a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == true);
57a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == 1);
58a4381cfeSDaniel Verkamp
59a4381cfeSDaniel Verkamp /* Set bit 63 (1 still set) */
60a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 63) == 0);
61a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
62a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == true);
63a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 63) == true);
64a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == 1);
65a4381cfeSDaniel Verkamp
66a4381cfeSDaniel Verkamp /* Clear bit 1 (63 still set) */
67a4381cfeSDaniel Verkamp spdk_bit_array_clear(ba, 1);
68a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == false);
69a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == 63);
70a4381cfeSDaniel Verkamp
71a4381cfeSDaniel Verkamp /* Clear bit 63 (no bits set) */
72a4381cfeSDaniel Verkamp spdk_bit_array_clear(ba, 63);
73a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 63) == false);
74a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 0) == UINT32_MAX);
75a4381cfeSDaniel Verkamp
76a4381cfeSDaniel Verkamp spdk_bit_array_free(&ba);
77a4381cfeSDaniel Verkamp }
78a4381cfeSDaniel Verkamp
79a4381cfeSDaniel Verkamp static void
test_find(void)80a4381cfeSDaniel Verkamp test_find(void)
81a4381cfeSDaniel Verkamp {
82a4381cfeSDaniel Verkamp struct spdk_bit_array *ba;
83a4381cfeSDaniel Verkamp uint32_t i;
84a4381cfeSDaniel Verkamp
85a4381cfeSDaniel Verkamp ba = spdk_bit_array_create(256);
86a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
87a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 256);
88a4381cfeSDaniel Verkamp
89a4381cfeSDaniel Verkamp /* Set all bits */
90a4381cfeSDaniel Verkamp for (i = 0; i < 256; i++) {
91a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, i) == 0);
92a4381cfeSDaniel Verkamp }
93a4381cfeSDaniel Verkamp
94a4381cfeSDaniel Verkamp /* Verify that find_first_set and find_first_clear work for each starting position */
95a4381cfeSDaniel Verkamp for (i = 0; i < 256; i++) {
96a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, i) == i);
977c56c393SJim Harris CU_ASSERT(spdk_bit_array_find_first_clear(ba, i) == UINT32_MAX);
98a4381cfeSDaniel Verkamp }
99a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, 256) == UINT32_MAX);
1007c56c393SJim Harris CU_ASSERT(spdk_bit_array_find_first_clear(ba, 256) == UINT32_MAX);
101a4381cfeSDaniel Verkamp
102a4381cfeSDaniel Verkamp /* Clear bits 0 through 31 */
103a4381cfeSDaniel Verkamp for (i = 0; i < 32; i++) {
104a4381cfeSDaniel Verkamp spdk_bit_array_clear(ba, i);
105a4381cfeSDaniel Verkamp }
106a4381cfeSDaniel Verkamp
107a4381cfeSDaniel Verkamp for (i = 0; i < 32; i++) {
108a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, i) == 32);
109a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_clear(ba, i) == i);
110a4381cfeSDaniel Verkamp }
111a4381cfeSDaniel Verkamp
112a4381cfeSDaniel Verkamp for (i = 32; i < 256; i++) {
113a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, i) == i);
1147c56c393SJim Harris CU_ASSERT(spdk_bit_array_find_first_clear(ba, i) == UINT32_MAX);
115a4381cfeSDaniel Verkamp }
116a4381cfeSDaniel Verkamp
117a4381cfeSDaniel Verkamp /* Clear bit 255 */
118a4381cfeSDaniel Verkamp spdk_bit_array_clear(ba, 255);
119a4381cfeSDaniel Verkamp
120a4381cfeSDaniel Verkamp for (i = 0; i < 32; i++) {
121a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, i) == 32);
122a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_clear(ba, i) == i);
123a4381cfeSDaniel Verkamp }
124a4381cfeSDaniel Verkamp
125a4381cfeSDaniel Verkamp for (i = 32; i < 255; i++) {
126a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_set(ba, i) == i);
127a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_find_first_clear(ba, i) == 255);
128a4381cfeSDaniel Verkamp }
129a4381cfeSDaniel Verkamp
1307c56c393SJim Harris CU_ASSERT(spdk_bit_array_find_first_clear(ba, 256) == UINT32_MAX);
131a4381cfeSDaniel Verkamp
132a4381cfeSDaniel Verkamp spdk_bit_array_free(&ba);
133a4381cfeSDaniel Verkamp }
134a4381cfeSDaniel Verkamp
135a4381cfeSDaniel Verkamp static void
test_resize(void)136a4381cfeSDaniel Verkamp test_resize(void)
137a4381cfeSDaniel Verkamp {
138a4381cfeSDaniel Verkamp struct spdk_bit_array *ba;
139a4381cfeSDaniel Verkamp
140a4381cfeSDaniel Verkamp /* Start with a 0 bit array */
141a4381cfeSDaniel Verkamp ba = spdk_bit_array_create(0);
142a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
143a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 0);
144a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
145a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 0) == -EINVAL);
146a4381cfeSDaniel Verkamp spdk_bit_array_clear(ba, 0);
147a4381cfeSDaniel Verkamp
148a4381cfeSDaniel Verkamp /* Increase size to 1 bit */
149a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(spdk_bit_array_resize(&ba, 1) == 0);
150a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
151a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 1);
152a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
153a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 0) == 0);
154a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == true);
155a4381cfeSDaniel Verkamp
156a4381cfeSDaniel Verkamp /* Increase size to 2 bits */
157a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(spdk_bit_array_resize(&ba, 2) == 0);
158a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
159a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 2);
160a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == false);
161a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 1) == 0);
162a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == true);
163a4381cfeSDaniel Verkamp
164a4381cfeSDaniel Verkamp /* Shrink size back to 1 bit */
165a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(spdk_bit_array_resize(&ba, 1) == 0);
166a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
167a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 1);
168a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == true);
169a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == false);
170a4381cfeSDaniel Verkamp
171a4381cfeSDaniel Verkamp /* Increase size to 65 bits */
172a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(spdk_bit_array_resize(&ba, 65) == 0);
173a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
174a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 65);
175a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == true);
176a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == false);
177a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_set(ba, 64) == 0);
178a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 64) == true);
179a4381cfeSDaniel Verkamp
180a4381cfeSDaniel Verkamp /* Shrink size back to 0 bits */
181a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(spdk_bit_array_resize(&ba, 0) == 0);
182a4381cfeSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
183a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_capacity(ba) == 0);
184a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 0) == false);
185a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_get(ba, 1) == false);
186a4381cfeSDaniel Verkamp
187a4381cfeSDaniel Verkamp spdk_bit_array_free(&ba);
188a4381cfeSDaniel Verkamp }
189a4381cfeSDaniel Verkamp
190a4381cfeSDaniel Verkamp static void
test_errors(void)191a4381cfeSDaniel Verkamp test_errors(void)
192a4381cfeSDaniel Verkamp {
193a4381cfeSDaniel Verkamp /* Passing NULL to resize should fail. */
194a4381cfeSDaniel Verkamp CU_ASSERT(spdk_bit_array_resize(NULL, 0) == -EINVAL);
195a4381cfeSDaniel Verkamp
196a4381cfeSDaniel Verkamp /* Passing NULL to free is a no-op. */
197a4381cfeSDaniel Verkamp spdk_bit_array_free(NULL);
198a4381cfeSDaniel Verkamp }
199a4381cfeSDaniel Verkamp
200a1c7c58fSDaniel Verkamp static void
test_count(void)201a1c7c58fSDaniel Verkamp test_count(void)
202a1c7c58fSDaniel Verkamp {
203a1c7c58fSDaniel Verkamp struct spdk_bit_array *ba;
204a1c7c58fSDaniel Verkamp uint32_t i;
205a1c7c58fSDaniel Verkamp
206a1c7c58fSDaniel Verkamp /* 0-bit array should have 0 bits set and 0 bits clear */
207a1c7c58fSDaniel Verkamp ba = spdk_bit_array_create(0);
208a1c7c58fSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
209a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 0);
210a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 0);
211a1c7c58fSDaniel Verkamp spdk_bit_array_free(&ba);
212a1c7c58fSDaniel Verkamp
213a1c7c58fSDaniel Verkamp /* 1-bit array */
214a1c7c58fSDaniel Verkamp ba = spdk_bit_array_create(1);
215a1c7c58fSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
216a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 0);
217a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 1);
218a1c7c58fSDaniel Verkamp spdk_bit_array_set(ba, 0);
219a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 1);
220a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 0);
221a1c7c58fSDaniel Verkamp spdk_bit_array_free(&ba);
222a1c7c58fSDaniel Verkamp
223a1c7c58fSDaniel Verkamp /* 65-bit array */
224a1c7c58fSDaniel Verkamp ba = spdk_bit_array_create(65);
225a1c7c58fSDaniel Verkamp SPDK_CU_ASSERT_FATAL(ba != NULL);
226a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 0);
227a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 65);
228a1c7c58fSDaniel Verkamp spdk_bit_array_set(ba, 0);
229a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 1);
230a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 64);
231a1c7c58fSDaniel Verkamp spdk_bit_array_set(ba, 5);
232a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 2);
233a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 63);
234a1c7c58fSDaniel Verkamp spdk_bit_array_set(ba, 13);
235a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 3);
236a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 62);
237a1c7c58fSDaniel Verkamp spdk_bit_array_clear(ba, 0);
238a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 2);
239a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 63);
240a1c7c58fSDaniel Verkamp for (i = 0; i < 65; i++) {
241a1c7c58fSDaniel Verkamp spdk_bit_array_set(ba, i);
242a1c7c58fSDaniel Verkamp }
243a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 65);
244a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == 0);
245a1c7c58fSDaniel Verkamp for (i = 0; i < 65; i++) {
246a1c7c58fSDaniel Verkamp spdk_bit_array_clear(ba, i);
247a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_set(ba) == 65 - i - 1);
248a1c7c58fSDaniel Verkamp CU_ASSERT(spdk_bit_array_count_clear(ba) == i + 1);
249a1c7c58fSDaniel Verkamp }
250a1c7c58fSDaniel Verkamp spdk_bit_array_free(&ba);
251a1c7c58fSDaniel Verkamp }
252a1c7c58fSDaniel Verkamp
253212eb893SWojciech Malikowski #define TEST_MASK_SIZE 128
254212eb893SWojciech Malikowski #define TEST_BITS_NUM (TEST_MASK_SIZE * 8 - 3)
255212eb893SWojciech Malikowski static void
test_mask_store_load(void)256212eb893SWojciech Malikowski test_mask_store_load(void)
257212eb893SWojciech Malikowski {
258212eb893SWojciech Malikowski struct spdk_bit_array *ba;
259212eb893SWojciech Malikowski uint8_t mask[TEST_MASK_SIZE] = { 0 };
260212eb893SWojciech Malikowski uint32_t i;
261212eb893SWojciech Malikowski
262212eb893SWojciech Malikowski ba = spdk_bit_array_create(TEST_BITS_NUM);
263212eb893SWojciech Malikowski
264212eb893SWojciech Malikowski /* Check if stored mask is consistent with bit array mask */
265212eb893SWojciech Malikowski spdk_bit_array_set(ba, 0);
266212eb893SWojciech Malikowski spdk_bit_array_set(ba, TEST_BITS_NUM / 2);
267212eb893SWojciech Malikowski spdk_bit_array_set(ba, TEST_BITS_NUM - 1);
268212eb893SWojciech Malikowski
269212eb893SWojciech Malikowski spdk_bit_array_store_mask(ba, mask);
270212eb893SWojciech Malikowski
271212eb893SWojciech Malikowski for (i = 0; i < TEST_BITS_NUM; i++) {
272212eb893SWojciech Malikowski if (i == 0 || i == TEST_BITS_NUM / 2 || i == TEST_BITS_NUM - 1) {
273212eb893SWojciech Malikowski CU_ASSERT((mask[i / 8] & (1U << (i % 8))));
274212eb893SWojciech Malikowski } else {
275212eb893SWojciech Malikowski CU_ASSERT(!(mask[i / 8] & (1U << (i % 8))));
276212eb893SWojciech Malikowski }
277212eb893SWojciech Malikowski }
278212eb893SWojciech Malikowski
279212eb893SWojciech Malikowski /* Check if loaded mask is consistent with bit array mask */
280212eb893SWojciech Malikowski memset(mask, 0, TEST_MASK_SIZE);
281212eb893SWojciech Malikowski mask[0] = 1;
282212eb893SWojciech Malikowski mask[TEST_MASK_SIZE - 1] = 1U << 4;
283212eb893SWojciech Malikowski
284212eb893SWojciech Malikowski spdk_bit_array_load_mask(ba, mask);
285212eb893SWojciech Malikowski
286212eb893SWojciech Malikowski CU_ASSERT(spdk_bit_array_get(ba, 0));
287212eb893SWojciech Malikowski CU_ASSERT(spdk_bit_array_get(ba, TEST_BITS_NUM - 1));
288212eb893SWojciech Malikowski
289212eb893SWojciech Malikowski spdk_bit_array_clear(ba, 0);
290212eb893SWojciech Malikowski spdk_bit_array_clear(ba, TEST_BITS_NUM - 1);
291212eb893SWojciech Malikowski
292212eb893SWojciech Malikowski for (i = 0; i < TEST_BITS_NUM; i++) {
293212eb893SWojciech Malikowski CU_ASSERT(!spdk_bit_array_get(ba, i));
294212eb893SWojciech Malikowski }
295212eb893SWojciech Malikowski
296212eb893SWojciech Malikowski spdk_bit_array_free(&ba);
297212eb893SWojciech Malikowski }
298212eb893SWojciech Malikowski
299212eb893SWojciech Malikowski static void
test_mask_clear(void)300212eb893SWojciech Malikowski test_mask_clear(void)
301212eb893SWojciech Malikowski {
302212eb893SWojciech Malikowski struct spdk_bit_array *ba;
303212eb893SWojciech Malikowski uint32_t i;
304212eb893SWojciech Malikowski
305212eb893SWojciech Malikowski ba = spdk_bit_array_create(TEST_BITS_NUM);
306212eb893SWojciech Malikowski
307212eb893SWojciech Malikowski for (i = 0; i < TEST_BITS_NUM; i++) {
308212eb893SWojciech Malikowski spdk_bit_array_set(ba, i);
309212eb893SWojciech Malikowski }
310212eb893SWojciech Malikowski
311212eb893SWojciech Malikowski spdk_bit_array_clear_mask(ba);
312212eb893SWojciech Malikowski
313212eb893SWojciech Malikowski for (i = 0; i < TEST_BITS_NUM; i++) {
314212eb893SWojciech Malikowski CU_ASSERT(!spdk_bit_array_get(ba, i));
315212eb893SWojciech Malikowski }
316212eb893SWojciech Malikowski
317212eb893SWojciech Malikowski spdk_bit_array_free(&ba);
318212eb893SWojciech Malikowski }
319212eb893SWojciech Malikowski
320a4381cfeSDaniel Verkamp int
main(int argc,char ** argv)321a4381cfeSDaniel Verkamp main(int argc, char **argv)
322a4381cfeSDaniel Verkamp {
323a4381cfeSDaniel Verkamp CU_pSuite suite = NULL;
324a4381cfeSDaniel Verkamp unsigned int num_failures;
325a4381cfeSDaniel Verkamp
32678b696bcSVitaliy Mysak CU_initialize_registry();
327a4381cfeSDaniel Verkamp
328a4381cfeSDaniel Verkamp suite = CU_add_suite("bit_array", NULL, NULL);
329a4381cfeSDaniel Verkamp
330dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_1bit);
331dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_64bit);
332dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_find);
333dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_resize);
334dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_errors);
335dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_count);
336dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_mask_store_load);
337dcf0ca15SVitaliy Mysak CU_ADD_TEST(suite, test_mask_clear);
338a4381cfeSDaniel Verkamp
339a4381cfeSDaniel Verkamp
340*ea941caeSKonrad Sztyber num_failures = spdk_ut_run_tests(argc, argv, NULL);
341a4381cfeSDaniel Verkamp
342a4381cfeSDaniel Verkamp CU_cleanup_registry();
343a4381cfeSDaniel Verkamp
344a4381cfeSDaniel Verkamp return num_failures;
345a4381cfeSDaniel Verkamp }
346