Index: src/libchcore/Tests/TOrderedBufferQueueTests.cpp =================================================================== diff -u -N -r3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9 -rbef894e38e5c1486824787cf8c47a87a0828b228 --- src/libchcore/Tests/TOrderedBufferQueueTests.cpp (.../TOrderedBufferQueueTests.cpp) (revision 3ccbdb8d3eac3427e6d3354854476e57fdc7ceb9) +++ src/libchcore/Tests/TOrderedBufferQueueTests.cpp (.../TOrderedBufferQueueTests.cpp) (revision bef894e38e5c1486824787cf8c47a87a0828b228) @@ -2,10 +2,201 @@ #include "gtest/gtest.h" #include "gmock/gmock.h" #include "../TOrderedBufferQueue.h" +#include "../GTestMacros.h" using namespace chcore; -TEST(TOrderedBufferQueueTests, DefaultTest) +// no expected position mode +TEST(TOrderedBufferQueueTests, NoExpectedPos_ConstructionSanityTest) { - TOrderedBufferQueue bufferList; + TOrderedBufferQueue queue; + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(nullptr, queue.Peek()); } + +TEST(TOrderedBufferQueueTests, NoExpectedPos_Push) +{ + TOrderedBufferQueue queue; + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + + EXPECT_EQ(1, queue.GetCount()); + EXPECT_EQ(false, queue.IsEmpty()); + EXPECT_SIGNALED(queue.GetHasBuffersEvent()); + EXPECT_EQ(&buffer, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, NoExpectedPos_Pop) +{ + TOrderedBufferQueue queue; + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + EXPECT_EQ(&buffer, queue.Pop()); + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(nullptr, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, NoExpectedPos_Clear) +{ + TOrderedBufferQueue queue; + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + queue.Clear(); + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(nullptr, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, NoExpectedPos_ReleaseBuffers) +{ + TOrderedBufferQueue queue; + TBufferListPtr spReleaseList(std::make_shared()); + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + queue.ReleaseBuffers(spReleaseList); + + EXPECT_EQ(1, spReleaseList->GetCount()); +} + +/////////////////////////////////////////////////////////////////////////////////////////// +// expected position mode +TEST(TOrderedBufferQueueTests, ExpectedPos_ConstructionSanityTest) +{ + TOrderedBufferQueue queue(0); + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(nullptr, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_PushAtExpectedPosition) +{ + TOrderedBufferQueue queue(0); + TOverlappedDataBuffer buffer(1024, nullptr); + buffer.SetFilePosition(0); + + queue.Push(&buffer); + + EXPECT_EQ(1, queue.GetCount()); + EXPECT_EQ(false, queue.IsEmpty()); + EXPECT_SIGNALED(queue.GetHasBuffersEvent()); + EXPECT_EQ(&buffer, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_PushAtOtherPosition) +{ + TOrderedBufferQueue queue(0); + TOverlappedDataBuffer buffer(1024, nullptr); + buffer.SetFilePosition(1000); + + queue.Push(&buffer); + + EXPECT_EQ(1, queue.GetCount()); + EXPECT_EQ(false, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(&buffer, queue.Peek()); + EXPECT_EQ(nullptr, queue.Pop()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_PushOutOfOrder) +{ + TOrderedBufferQueue queue(0); + TOverlappedDataBuffer buffer1(1024, nullptr); + buffer1.SetFilePosition(1000); + buffer1.SetRequestedDataSize(1000); + TOverlappedDataBuffer buffer2(1024, nullptr); + buffer2.SetFilePosition(0); + buffer2.SetRequestedDataSize(1000); + + queue.Push(&buffer1); + queue.Push(&buffer2); + + EXPECT_EQ(2, queue.GetCount()); + EXPECT_EQ(false, queue.IsEmpty()); + EXPECT_SIGNALED(queue.GetHasBuffersEvent()); + EXPECT_EQ(&buffer2, queue.Peek()); + EXPECT_EQ(&buffer2, queue.Pop()); + EXPECT_EQ(&buffer1, queue.Pop()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_Pop) +{ + TOrderedBufferQueue queue(0); + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + EXPECT_EQ(&buffer, queue.Pop()); + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(nullptr, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_Clear) +{ + TOrderedBufferQueue queue(0); + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + queue.Clear(); + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); + EXPECT_EQ(nullptr, queue.Peek()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_ClearUnordered) +{ + TOrderedBufferQueue queue(0); + TOverlappedDataBuffer buffer1(1024, nullptr); + buffer1.SetFilePosition(1000); + buffer1.SetRequestedDataSize(1000); + + queue.Push(&buffer1); + + queue.Clear(); + + EXPECT_EQ(0, queue.GetCount()); + EXPECT_EQ(true, queue.IsEmpty()); + EXPECT_TIMEOUT(queue.GetHasBuffersEvent()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_ReleaseBuffers) +{ + TOrderedBufferQueue queue(0); + TBufferListPtr spReleaseList(std::make_shared()); + TOverlappedDataBuffer buffer(1024, nullptr); + + queue.Push(&buffer); + queue.ReleaseBuffers(spReleaseList); + + EXPECT_EQ(1, spReleaseList->GetCount()); +} + +TEST(TOrderedBufferQueueTests, ExpectedPos_ReleaseBuffersUnordered) +{ + TOrderedBufferQueue queue(0); + TBufferListPtr spReleaseList(std::make_shared()); + TOverlappedDataBuffer buffer(1024, nullptr); + buffer.SetFilePosition(1000); + + queue.Push(&buffer); + queue.ReleaseBuffers(spReleaseList); + + EXPECT_EQ(1, spReleaseList->GetCount()); +}