@@ -282,6 +282,39 @@ ZTEST(bitarray, test_bitarray_set_clear)
282
282
"sys_bitarray_test_and_clear_bit() erroneously changed bitarray" );
283
283
}
284
284
285
+ static void test_alloc_free_32 (uint32_t mask , uint32_t mask_after , size_t num_bits ,
286
+ size_t exp_offset , int exp_ret )
287
+ {
288
+ int ret ;
289
+ size_t offset ;
290
+
291
+ SYS_BITARRAY_DEFINE (ba_32 , 32 );
292
+
293
+ ba_32 .bundles [0 ] = mask ;
294
+
295
+ ret = sys_bitarray_alloc (& ba_32 , num_bits , & offset );
296
+ zassert_equal (ret , exp_ret , "sys_bitarray_alloc() failed: %d" , ret );
297
+ if (exp_ret < 0 ) {
298
+ return ;
299
+ }
300
+ zassert_equal (offset , exp_offset ,
301
+ "sys_bitarray_alloc() offset expected %d, got %d" , exp_offset , offset );
302
+ zassert_equal (ba_32 .bundles [0 ], mask_after , "sys_bitarray_alloc() failed bits comparison" );
303
+
304
+ ret = sys_bitarray_free (& ba_32 , num_bits , offset );
305
+ zassert_equal (ret , 0 , "sys_bitarray_free() failed: %d" , ret );
306
+ zassert_equal (ba_32 .bundles [0 ], mask , "sys_bitarray_alloc() failed bits comparison" );
307
+ }
308
+
309
+ static void alloc_and_free_32_predefined (void )
310
+ {
311
+ printk ("Testing bit array alloc and free with predefined patterns using 32 bit array\n" );
312
+
313
+ test_alloc_free_32 (0x0F0F070F , 0x0F0FFF0F , 5 , 11 , 0 );
314
+ test_alloc_free_32 (0x33333333 , 0xF3333333 , 3 , 0 , - ENOSPC );
315
+ test_alloc_free_32 (0x33333333 , 0xF3333333 , 2 , 30 , 0 );
316
+ }
317
+
285
318
void alloc_and_free_predefined (void )
286
319
{
287
320
int ret ;
@@ -291,7 +324,7 @@ void alloc_and_free_predefined(void)
291
324
292
325
SYS_BITARRAY_DEFINE (ba_128 , 128 );
293
326
294
- printk ("Testing bit array alloc and free with predefined patterns\n" );
327
+ printk ("Testing bit array alloc and free with predefined patterns using 128 bit array \n" );
295
328
296
329
/* Pre-populate the bits */
297
330
ba_128 .bundles [0 ] = 0x0F0F070F ;
@@ -514,6 +547,7 @@ ZTEST(bitarray, test_bitarray_alloc_free)
514
547
}
515
548
516
549
alloc_and_free_predefined ();
550
+ alloc_and_free_32_predefined ();
517
551
518
552
i = 1 ;
519
553
while (i < 65 ) {
0 commit comments