unittest/syncd/TestConcurrentQueue.cpp (57 lines of code) (raw):

#include <gtest/gtest.h> #include "ConcurrentQueue.h" using namespace syncd; class ConcurrentQueueTest : public ::testing::Test {}; TEST_F(ConcurrentQueueTest, QueueIsEmpty) { constexpr size_t queueSize = 5; ConcurrentQueue<int> testQueue(queueSize); EXPECT_TRUE(testQueue.empty()); EXPECT_EQ(testQueue.size(), 0); } TEST_F(ConcurrentQueueTest, EnqueueSucceeds) { constexpr size_t queueSize = 5; ConcurrentQueue<int> testQueue(queueSize); EXPECT_TRUE(testQueue.empty()); EXPECT_TRUE(testQueue.enqueue(1)); EXPECT_FALSE(testQueue.empty()); EXPECT_EQ(testQueue.size(), 1); } TEST_F(ConcurrentQueueTest, EnqueueFailsIfQueueSizeLimitIsReached) { constexpr size_t queueSize = 5; ConcurrentQueue<int> testQueue(queueSize); EXPECT_TRUE(testQueue.empty()); int data = 1; for (size_t idx = 0; idx < queueSize; ++idx) { SCOPED_TRACE(::testing::Message() << "Inserting data at index: " << idx); EXPECT_TRUE(testQueue.enqueue(data++)); EXPECT_EQ(testQueue.size(), idx + 1); } EXPECT_EQ(testQueue.size(), queueSize); // Once queue is at maximum capacity, en-queuing next element will fail. EXPECT_FALSE(testQueue.enqueue(data)); EXPECT_EQ(testQueue.size(), queueSize); } TEST_F(ConcurrentQueueTest, DequeueFailsIfQueueIsEmpty) { constexpr size_t queueSize = 5; ConcurrentQueue<int> testQueue(queueSize); EXPECT_TRUE(testQueue.empty()); int val; EXPECT_FALSE(testQueue.dequeue(&val)); } TEST_F(ConcurrentQueueTest, DequeueSucceeds) { ConcurrentQueue<int> testQueue; EXPECT_TRUE(testQueue.empty()); constexpr int testValue = 56; EXPECT_TRUE(testQueue.enqueue(testValue)); EXPECT_EQ(testQueue.size(), 1); int val; EXPECT_TRUE(testQueue.dequeue(&val)); EXPECT_EQ(val, testValue); EXPECT_TRUE(testQueue.empty()); }