204 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "unit-tests.h"
 | |
| #include <src/midi_RingBuffer.h>
 | |
| 
 | |
| BEGIN_UNNAMED_NAMESPACE
 | |
| using namespace testing;
 | |
| using Buffer = midi::RingBuffer<uint8_t, 8>;
 | |
| 
 | |
| TEST(RingBuffer, writeScalar)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     EXPECT_EQ(buffer.isEmpty(), true);
 | |
|     EXPECT_EQ(buffer.getLength(), 0);
 | |
|     buffer.write(42);
 | |
|     buffer.write(47);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     EXPECT_EQ(buffer.getLength(), 2);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, readScalar)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     buffer.write(42);
 | |
|     EXPECT_EQ(buffer.getLength(), 1);
 | |
|     buffer.write(47);
 | |
|     EXPECT_EQ(buffer.getLength(), 2);
 | |
|     EXPECT_EQ(buffer.read(), 42);
 | |
|     EXPECT_EQ(buffer.getLength(), 1);
 | |
|     EXPECT_EQ(buffer.read(), 47);
 | |
|     EXPECT_EQ(buffer.isEmpty(), true);
 | |
|     EXPECT_EQ(buffer.getLength(), 0);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, clear)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     buffer.write(42);
 | |
|     buffer.write(47);
 | |
|     buffer.clear();
 | |
|     EXPECT_EQ(buffer.isEmpty(), true);
 | |
|     EXPECT_EQ(buffer.getLength(), 0);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, writeArray)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     const uint8_t input[4] = {
 | |
|         1, 2, 3, 4
 | |
|     };
 | |
|     buffer.write(input, 4);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     EXPECT_EQ(buffer.getLength(), 4);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, writeOverflow)
 | |
| {
 | |
|     Buffer buffer;
 | |
| 
 | |
|     buffer.write(1);
 | |
|     EXPECT_EQ(buffer.getLength(), 1);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(2);
 | |
|     EXPECT_EQ(buffer.getLength(), 2);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(3);
 | |
|     EXPECT_EQ(buffer.getLength(), 3);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(4);
 | |
|     EXPECT_EQ(buffer.getLength(), 4);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(5);
 | |
|     EXPECT_EQ(buffer.getLength(), 5);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(6);
 | |
|     EXPECT_EQ(buffer.getLength(), 6);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(7);
 | |
|     EXPECT_EQ(buffer.getLength(), 7);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(8);
 | |
|     EXPECT_EQ(buffer.getLength(), 8);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(9);
 | |
|     EXPECT_EQ(buffer.getLength(), 8);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(10);
 | |
|     EXPECT_EQ(buffer.getLength(), 8);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(11);
 | |
|     EXPECT_EQ(buffer.getLength(), 8);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     buffer.write(12);
 | |
|     EXPECT_EQ(buffer.getLength(), 8);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, readOverflow)
 | |
| {
 | |
|     Buffer buffer;
 | |
| 
 | |
|     buffer.write(1);
 | |
|     buffer.write(2);
 | |
|     buffer.write(3);
 | |
|     buffer.write(4);
 | |
|     buffer.write(5);
 | |
|     buffer.write(6);
 | |
|     buffer.write(7);
 | |
|     buffer.write(8);
 | |
|     buffer.write(9);
 | |
|     buffer.write(10);
 | |
|     buffer.write(11);
 | |
|     buffer.write(12);
 | |
|     EXPECT_EQ(buffer.read(), 5);
 | |
|     EXPECT_EQ(buffer.getLength(), 7);
 | |
|     EXPECT_EQ(buffer.read(), 6);
 | |
|     EXPECT_EQ(buffer.getLength(), 6);
 | |
|     EXPECT_EQ(buffer.read(), 7);
 | |
|     EXPECT_EQ(buffer.getLength(), 5);
 | |
|     EXPECT_EQ(buffer.read(), 8);
 | |
|     EXPECT_EQ(buffer.getLength(), 4);
 | |
|     EXPECT_EQ(buffer.read(), 9);
 | |
|     EXPECT_EQ(buffer.getLength(), 3);
 | |
|     EXPECT_EQ(buffer.read(), 10);
 | |
|     EXPECT_EQ(buffer.getLength(), 2);
 | |
|     EXPECT_EQ(buffer.read(), 11);
 | |
|     EXPECT_EQ(buffer.getLength(), 1);
 | |
|     EXPECT_EQ(buffer.read(), 12);
 | |
|     EXPECT_EQ(buffer.getLength(), 0);
 | |
|     EXPECT_EQ(buffer.read(), 0);
 | |
|     EXPECT_EQ(buffer.getLength(), 0);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, writeArrayOverflow)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     const uint8_t input[12] = {
 | |
|         1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
 | |
|     };
 | |
|     buffer.write(input, 12);
 | |
|     EXPECT_EQ(buffer.isEmpty(), false);
 | |
|     EXPECT_EQ(buffer.getLength(), 8); // Max size
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, readArray)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     const uint8_t input[4] = {
 | |
|         1, 2, 3, 4
 | |
|     };
 | |
|     uint8_t output[4] = { 0 };
 | |
|     buffer.write(input, 4);
 | |
|     buffer.read(output, 4);
 | |
|     EXPECT_THAT(output, ContainerEq(input));
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, readArrayOverflow)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     const uint8_t input[12] = {
 | |
|         1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
 | |
|     };
 | |
|     const uint8_t expected[8] = {
 | |
|         5, 6, 7, 8, 9, 10, 11, 12,
 | |
|     };
 | |
|     uint8_t output[8] = { 0 };
 | |
| 
 | |
|     buffer.write(input, 12);
 | |
|     buffer.read(output, 8);
 | |
|     EXPECT_THAT(output, ContainerEq(expected));
 | |
|     EXPECT_EQ(buffer.isEmpty(), true);
 | |
|     EXPECT_EQ(buffer.getLength(), 0);
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, peek)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     const uint8_t input[4] = {
 | |
|         1, 2, 3, 4
 | |
|     };
 | |
| 
 | |
|     buffer.write(input, 4);
 | |
|     EXPECT_EQ(1, buffer.peek());
 | |
|     EXPECT_EQ(2, buffer.peek(1));
 | |
|     EXPECT_EQ(3, buffer.peek(2));
 | |
|     EXPECT_EQ(4, buffer.peek(3));
 | |
|     EXPECT_EQ(4, buffer.getLength()) << "Peek should not change buffer length";
 | |
| }
 | |
| 
 | |
| TEST(RingBuffer, pop)
 | |
| {
 | |
|     Buffer buffer;
 | |
|     const uint8_t input[4] = {
 | |
|         1, 2, 3, 4
 | |
|     };
 | |
| 
 | |
|     buffer.write(input, 4);
 | |
|     buffer.pop();
 | |
|     EXPECT_EQ(3, buffer.getLength());
 | |
|     buffer.pop(2);
 | |
|     EXPECT_EQ(1, buffer.getLength());
 | |
| }
 | |
| 
 | |
| END_UNNAMED_NAMESPACE
 | |
| 
 |