#ifdef WITH_TESTS #include "../Tests.h" #include "../../data/RingBuffer.h" TEST(RingBuffer, reset) { RingBuffer buf(4); ASSERT_EQ(0, buf.size()); ASSERT_TRUE(buf.empty()); buf.add(3); ASSERT_EQ(1, buf.size()); ASSERT_FALSE(buf.empty()); buf.reset(); ASSERT_EQ(0, buf.size()); ASSERT_TRUE(buf.empty()); buf.add(4); ASSERT_EQ(1, buf.size()); ASSERT_FALSE(buf.empty()); ASSERT_EQ(4, buf.get()); } TEST(RingBuffer, add) { RingBuffer buf(4); ASSERT_EQ(0, buf.size()); ASSERT_TRUE(buf.empty()); buf.add(9); ASSERT_EQ(1, buf.size()); ASSERT_FALSE(buf.empty()); ASSERT_EQ(9, buf.get()); ASSERT_TRUE(buf.empty()); buf.add(2); buf.add(4); buf.add(3); ASSERT_EQ(3, buf.size()); ASSERT_FALSE(buf.empty()); ASSERT_EQ(2, buf.get()); ASSERT_EQ(4, buf.get()); ASSERT_EQ(3, buf.get()); ASSERT_TRUE(buf.empty()); buf.add(5); buf.add(7); buf.add(8); ASSERT_EQ(3, buf.size()); ASSERT_FALSE(buf.empty()); ASSERT_EQ(5, buf.get()); ASSERT_EQ(7, buf.get()); ASSERT_EQ(8, buf.get()); ASSERT_TRUE(buf.empty()); } TEST(RingBuffer, peek) { RingBuffer buf(4); buf.add(11); ASSERT_EQ(11, buf.peek(0)); buf.add(13); ASSERT_EQ(11, buf.peek(0)); ASSERT_EQ(13, buf.peek(1)); buf.add(10); ASSERT_EQ(11, buf.peek(0)); ASSERT_EQ(13, buf.peek(1)); ASSERT_EQ(10, buf.peek(2)); buf.add(17); ASSERT_EQ(11, buf.peek(0)); ASSERT_EQ(13, buf.peek(1)); ASSERT_EQ(10, buf.peek(2)); ASSERT_EQ(17, buf.peek(3)); buf.add(18); ASSERT_EQ(18, buf.peek(0)); ASSERT_EQ(13, buf.peek(1)); ASSERT_EQ(10, buf.peek(2)); ASSERT_EQ(17, buf.peek(3)); buf.add(9); ASSERT_EQ(18, buf.peek(0)); ASSERT_EQ( 9, buf.peek(1)); ASSERT_EQ(10, buf.peek(2)); ASSERT_EQ(17, buf.peek(3)); buf.add(88); ASSERT_EQ(18, buf.peek(0)); ASSERT_EQ( 9, buf.peek(1)); ASSERT_EQ(88, buf.peek(2)); ASSERT_EQ(17, buf.peek(3)); buf.add(54); ASSERT_EQ(18, buf.peek(0)); ASSERT_EQ( 9, buf.peek(1)); ASSERT_EQ(88, buf.peek(2)); ASSERT_EQ(54, buf.peek(3)); buf.add(1); ASSERT_EQ( 1, buf.peek(0)); ASSERT_EQ( 9, buf.peek(1)); ASSERT_EQ(88, buf.peek(2)); ASSERT_EQ(54, buf.peek(3)); } TEST(RingBuffer, contains) { RingBuffer buf(4); ASSERT_FALSE(buf.contains(0)); buf.add(0); ASSERT_TRUE(buf.contains(0)); ASSERT_FALSE(buf.contains(3)); buf.add(3); ASSERT_TRUE(buf.contains(0)); ASSERT_TRUE(buf.contains(3)); ASSERT_FALSE(buf.contains(7)); buf.add(7); ASSERT_TRUE(buf.contains(0)); ASSERT_TRUE(buf.contains(3)); ASSERT_TRUE(buf.contains(7)); ASSERT_FALSE(buf.contains(8)); buf.add(8); ASSERT_TRUE(buf.contains(0)); ASSERT_TRUE(buf.contains(3)); ASSERT_TRUE(buf.contains(7)); ASSERT_TRUE(buf.contains(8)); ASSERT_FALSE(buf.contains(11)); buf.add(11); ASSERT_FALSE(buf.contains(0)); ASSERT_TRUE(buf.contains(3)); ASSERT_TRUE(buf.contains(7)); ASSERT_TRUE(buf.contains(8)); ASSERT_TRUE(buf.contains(11)); } TEST(RingBuffer, iterator) { RingBuffer buf(4); int sum; buf.add(1); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(1, sum); buf.add(2); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(1+2, sum); buf.add(3); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(1+2+3, sum); buf.add(4); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(1+2+3+4, sum); // prevent overflow buf.get(); buf.add(5); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(2+3+4+5, sum); ASSERT_EQ(2, buf.get()); ASSERT_EQ(3, buf.size()); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(3+4+5, sum); buf.get(); ASSERT_EQ(2, buf.size()); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(4+5, sum); buf.get(); ASSERT_EQ(1, buf.size()); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(5, sum); buf.get(); ASSERT_EQ(0, buf.size()); sum = 0; for (int i : buf) {sum += i;} ASSERT_EQ(0, sum); } #endif