@@ -14220,6 +14220,45 @@ START_TEST(test_fifo_push_wrap_multiple) {
1422014220}
1422114221END_TEST
1422214222
14223+ START_TEST(test_fifo_push_wrap_tail_equals_needed)
14224+ {
14225+ struct fifo f;
14226+ uint8_t buffer[64];
14227+ uint8_t payload[8] = {0xAA, 0xBB, 0xCC, 0xDD, 0x11, 0x22, 0x33, 0x44};
14228+ uint32_t needed = (uint32_t)(sizeof(struct pkt_desc) + sizeof(payload));
14229+ struct pkt_desc *desc;
14230+
14231+ fifo_init(&f, buffer, sizeof(buffer));
14232+ f.head = 60;
14233+ f.tail = needed;
14234+ f.h_wrap = 0;
14235+
14236+ ck_assert_int_eq(fifo_push(&f, payload, sizeof(payload)), 0);
14237+ ck_assert_uint_eq(f.h_wrap, 60U);
14238+ ck_assert_uint_eq(f.head, needed);
14239+
14240+ desc = (struct pkt_desc *)buffer;
14241+ ck_assert_uint_eq(desc->pos, 0U);
14242+ ck_assert_uint_eq(desc->len, sizeof(payload));
14243+ }
14244+ END_TEST
14245+
14246+ START_TEST(test_fifo_can_push_len_wrap_tail_equals_needed)
14247+ {
14248+ struct fifo f;
14249+ uint8_t buffer[64];
14250+ uint32_t len = 8U;
14251+ uint32_t needed = (uint32_t)(sizeof(struct pkt_desc) + len);
14252+
14253+ fifo_init(&f, buffer, sizeof(buffer));
14254+ f.head = 60;
14255+ f.tail = needed;
14256+ f.h_wrap = 0;
14257+
14258+ ck_assert_int_eq(fifo_can_push_len(&f, len), 1);
14259+ }
14260+ END_TEST
14261+
1422314262START_TEST(test_fifo_space_wrap_sets_hwrap)
1422414263{
1422514264 struct fifo f;
@@ -16991,6 +17030,8 @@ Suite *wolf_suite(void)
1699117030 tcase_add_test(tc_core, test_fifo_can_push_len_head_at_wrap_boundary);
1699217031 tcase_add_test(tc_core, test_fifo_push_wrap);
1699317032 tcase_add_test(tc_core, test_fifo_push_wrap_multiple);
17033+ tcase_add_test(tc_core, test_fifo_push_wrap_tail_equals_needed);
17034+ tcase_add_test(tc_core, test_fifo_can_push_len_wrap_tail_equals_needed);
1699417035 tcase_add_test(tc_core, test_fifo_space_wrap_sets_hwrap);
1699517036 tcase_add_test(tc_core, test_fifo_space_wrap_returns_zero);
1699617037 tcase_add_test(tc_core, test_fifo_peek_wrap_to_start);
0 commit comments