@@ -366,6 +366,48 @@ ZTEST(test_spsc_pbuf, test_largest_alloc)
366
366
PACKET_WRITE (pb , SPSC_PBUF_MAX_LEN - 1 , 0 , 1 , 12 );
367
367
}
368
368
369
+ ZTEST (test_spsc_pbuf , test_utilization )
370
+ {
371
+ static uint8_t buffer [64 ] __aligned (MAX (CONFIG_SPSC_PBUF_CACHE_LINE , 4 ));
372
+ struct spsc_pbuf * pb ;
373
+ uint32_t capacity ;
374
+ uint16_t len1 , len2 , len3 ;
375
+ int u ;
376
+
377
+ pb = spsc_pbuf_init (buffer , sizeof (buffer ), 0 );
378
+
379
+ if (!IS_ENABLED (CONFIG_SPSC_PBUF_UTILIZATION )) {
380
+ zassert_equal (spsc_pbuf_get_utilization (pb ), - ENOTSUP , NULL );
381
+ return ;
382
+ }
383
+ capacity = spsc_pbuf_capacity (pb );
384
+
385
+ len1 = 10 ;
386
+ PACKET_WRITE (pb , len1 , len1 , 0 , len1 );
387
+ u = spsc_pbuf_get_utilization (pb );
388
+ zassert_equal (u , 0 , NULL );
389
+
390
+ PACKET_CONSUME (pb , len1 , 0 );
391
+ u = spsc_pbuf_get_utilization (pb );
392
+ zassert_equal (u , ROUND_UP (len1 , sizeof (uint32_t )) + sizeof (uint32_t ), NULL );
393
+
394
+ len2 = 11 ;
395
+ PACKET_WRITE (pb , len2 , len2 , 1 , len2 );
396
+ PACKET_CONSUME (pb , len2 , 1 );
397
+ u = spsc_pbuf_get_utilization (pb );
398
+ zassert_equal (u , ROUND_UP (len2 , sizeof (uint32_t )) + sizeof (uint32_t ), NULL );
399
+
400
+ len3 = capacity - ROUND_UP (len1 , sizeof (uint32_t )) - ROUND_UP (len2 , sizeof (uint32_t ))
401
+ - 3 * sizeof (uint32_t ) + sizeof (uint32_t );
402
+ PACKET_WRITE (pb , SPSC_PBUF_MAX_LEN , len3 , 2 , len3 );
403
+ PACKET_CONSUME (pb , len3 , 2 );
404
+
405
+ u = spsc_pbuf_get_utilization (pb );
406
+ int exp_u = ROUND_UP (len3 , sizeof (uint32_t )) + sizeof (uint32_t );
407
+
408
+ zassert_equal (u , exp_u , NULL );
409
+ }
410
+
369
411
struct stress_data {
370
412
struct spsc_pbuf * pbuf ;
371
413
uint32_t capacity ;
0 commit comments