From 68581a8fbe9316cf0909428bb41d1cd3404e8029 Mon Sep 17 00:00:00 2001 From: Simon Brummer Date: Wed, 1 Mar 2017 22:01:26 +0100 Subject: [PATCH] core: bugfix: ringbuffer_remove --- core/ringbuffer.c | 4 ++-- .../tests-core/tests-core-ringbuffer.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/ringbuffer.c b/core/ringbuffer.c index d967837e6..b79c7560f 100644 --- a/core/ringbuffer.c +++ b/core/ringbuffer.c @@ -117,12 +117,12 @@ unsigned ringbuffer_remove(ringbuffer_t *restrict rb, unsigned n) rb->start = rb->avail = 0; } else { - rb->start -= n; + rb->start += n; rb->avail -= n; /* compensate underflow */ if (rb->start > rb->size) { - rb->start += rb->size; + rb->start -= rb->size; } } diff --git a/tests/unittests/tests-core/tests-core-ringbuffer.c b/tests/unittests/tests-core/tests-core-ringbuffer.c index e447469e7..216071efc 100644 --- a/tests/unittests/tests-core/tests-core-ringbuffer.c +++ b/tests/unittests/tests-core/tests-core-ringbuffer.c @@ -114,10 +114,28 @@ static void tests_core_ringbuffer(void) 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) { EMB_UNIT_TESTFIXTURES(fixtures) { new_TestFixture(tests_core_ringbuffer), + new_TestFixture(tests_core_ringbuffer_remove), }; EMB_UNIT_TESTCALLER(ringbuffer_tests, NULL, NULL, fixtures);