core: bugfix: ringbuffer_remove

This commit is contained in:
Simon Brummer 2017-03-01 22:01:26 +01:00
parent 289febc1dd
commit 68581a8fbe
2 changed files with 20 additions and 2 deletions

View File

@ -117,12 +117,12 @@ unsigned ringbuffer_remove(ringbuffer_t *restrict rb, unsigned n)
rb->start = rb->avail = 0; rb->start = rb->avail = 0;
} }
else { else {
rb->start -= n; rb->start += n;
rb->avail -= n; rb->avail -= n;
/* compensate underflow */ /* compensate underflow */
if (rb->start > rb->size) { if (rb->start > rb->size) {
rb->start += rb->size; rb->start -= rb->size;
} }
} }

View File

@ -114,10 +114,28 @@ static void tests_core_ringbuffer(void)
run_add(); run_add();
} }
static void tests_core_ringbuffer_remove(void)
{
char mem[3];
ringbuffer_t buf;
ringbuffer_init(&buf, mem, sizeof(mem));
ringbuffer_add_one(&buf, 0);
ringbuffer_add_one(&buf, 1);
ringbuffer_add_one(&buf, 2);
ringbuffer_remove(&buf, 1);
TEST_ASSERT_EQUAL_INT(1, ringbuffer_get_one(&buf));
TEST_ASSERT_EQUAL_INT(2, ringbuffer_get_one(&buf));
}
Test *tests_core_ringbuffer_tests(void) Test *tests_core_ringbuffer_tests(void)
{ {
EMB_UNIT_TESTFIXTURES(fixtures) { EMB_UNIT_TESTFIXTURES(fixtures) {
new_TestFixture(tests_core_ringbuffer), new_TestFixture(tests_core_ringbuffer),
new_TestFixture(tests_core_ringbuffer_remove),
}; };
EMB_UNIT_TESTCALLER(ringbuffer_tests, NULL, NULL, fixtures); EMB_UNIT_TESTCALLER(ringbuffer_tests, NULL, NULL, fixtures);