mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-24 22:13:52 +01:00
Merge pull request #13034 from MyCodeMyMoney/master
core/ringbuffer: compensate 'ringbuffer_remove' underflow error
This commit is contained in:
commit
56ed36f3e3
@ -121,7 +121,7 @@ unsigned ringbuffer_remove(ringbuffer_t *restrict rb, unsigned n)
|
||||
rb->avail -= n;
|
||||
|
||||
/* compensate underflow */
|
||||
if (rb->start > rb->size) {
|
||||
if (rb->start >= rb->size) {
|
||||
rb->start -= rb->size;
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,11 +131,33 @@ static void tests_core_ringbuffer_remove(void)
|
||||
|
||||
}
|
||||
|
||||
static void tests_core_ringbuffer_remove_underflow(void)
|
||||
{
|
||||
char mem[3];
|
||||
ringbuffer_t buf;
|
||||
ringbuffer_init(&buf, mem, sizeof(mem));
|
||||
|
||||
ringbuffer_add_one(&buf, 0);
|
||||
ringbuffer_add_one(&buf, 1);
|
||||
|
||||
ringbuffer_remove(&buf, 2);
|
||||
TEST_ASSERT_EQUAL_INT(1, ringbuffer_empty(&buf));
|
||||
|
||||
ringbuffer_add_one(&buf, 0);
|
||||
ringbuffer_add_one(&buf, 1);
|
||||
|
||||
ringbuffer_remove(&buf,1);
|
||||
|
||||
TEST_ASSERT_EQUAL_INT(1, ringbuffer_get_one(&buf));
|
||||
TEST_ASSERT_EQUAL_INT(1, ringbuffer_empty(&buf));
|
||||
}
|
||||
|
||||
Test *tests_core_ringbuffer_tests(void)
|
||||
{
|
||||
EMB_UNIT_TESTFIXTURES(fixtures) {
|
||||
new_TestFixture(tests_core_ringbuffer),
|
||||
new_TestFixture(tests_core_ringbuffer_remove),
|
||||
new_TestFixture(tests_core_ringbuffer_remove_underflow),
|
||||
};
|
||||
|
||||
EMB_UNIT_TESTCALLER(ringbuffer_tests, NULL, NULL, fixtures);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user