diff options
-rw-r--r-- | src/base/circular_queue.hh | 10 | ||||
-rw-r--r-- | src/base/circular_queue.test.cc | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/base/circular_queue.hh b/src/base/circular_queue.hh index f368ed0d1..da3da8b28 100644 --- a/src/base/circular_queue.hh +++ b/src/base/circular_queue.hh @@ -323,12 +323,12 @@ class CircularQueue : private std::vector<T> assert(_cq); /* C does not do euclidean division, so we have to adjust */ - if (t >= 0) + if (t >= 0) { _round += (-t + _idx) / _cq->capacity(); - else - _round += (-t + _idx - _cq->capacity() + 1) / _cq->capacity(); - - _idx = _cq->moduloSub(_idx, t); + _idx = _cq->moduloSub(_idx, t); + } else { + *this += -t; + } return *this; } diff --git a/src/base/circular_queue.test.cc b/src/base/circular_queue.test.cc index cce6cb0b6..fd63f7203 100644 --- a/src/base/circular_queue.test.cc +++ b/src/base/circular_queue.test.cc @@ -198,8 +198,10 @@ TEST(CircularQueueTest, IteratorsOp) cq.push_back(first_value); cq.push_back(second_value); + auto negative_offset = -(cq_size + 1); auto it_1 = cq.begin(); auto it_2 = cq.begin() + 1; + auto it_3 = cq.begin() - negative_offset; // Operators test ASSERT_TRUE(it_1 != it_2); @@ -213,6 +215,7 @@ TEST(CircularQueueTest, IteratorsOp) ASSERT_EQ(it_1, it_2 - 1); ASSERT_EQ(it_2 - it_1, 1); ASSERT_EQ(it_1 - it_2, -1); + ASSERT_EQ(it_3._round, 1); auto temp_it = it_1; ASSERT_EQ(++temp_it, it_2); |