arduino_midi_library/test/unit-tests/tests/unit-tests_RingBuffer.cpp

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