blob: 8aaf220a996e27f339a5ae02e6dc0a9d4879dec3 [file] [log] [blame]
// Copyright 2016 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
#include "android/base/containers/CircularBuffer.h"
#include <memory>
#include <gtest/gtest.h>
namespace android {
namespace base {
TEST(CircularBuffer, Empty) {
CircularBuffer<int> cb(1);
EXPECT_TRUE(cb.empty());
EXPECT_EQ(0, cb.size());
}
TEST(CircularBuffer, AppendOnce) {
CircularBuffer<int> cb(1);
cb.push_back(10098);
EXPECT_FALSE(cb.empty());
EXPECT_EQ(1, cb.size());
EXPECT_EQ(10098, cb[0]);
EXPECT_EQ(10098, cb.front());
EXPECT_EQ(10098, cb.back());
}
TEST(CircularBuffer, AppendTwice) {
CircularBuffer<int> cb(1);
cb.push_back(10098);
EXPECT_FALSE(cb.empty());
EXPECT_EQ(1, cb.size());
EXPECT_EQ(10098, cb[0]);
cb.push_back(10099);
EXPECT_FALSE(cb.empty());
EXPECT_EQ(1, cb.size());
EXPECT_EQ(10099, cb[0]);
}
TEST(CircularBuffer, ManyItemsSimple) {
CircularBuffer<int> cb(5);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
EXPECT_EQ(1, cb.front());
EXPECT_EQ(3, cb.back());
EXPECT_EQ(3, cb.size());
EXPECT_EQ(1, cb[0]);
EXPECT_EQ(2, cb[1]);
EXPECT_EQ(3, cb[2]);
}
TEST(CircularBuffer, ManyItems) {
CircularBuffer<int> cb(5);
cb.push_back(1);
cb.push_back(2);
cb.push_back(3);
cb.push_back(4);
cb.push_back(5);
cb.push_back(6);
cb.push_back(7);
EXPECT_FALSE(cb.empty());
EXPECT_EQ(5, cb.size());
int expected_values[] = {3, 4, 5, 6, 7};
EXPECT_EQ(3, cb.front());
EXPECT_EQ(7, cb.back());
for (int i = 0; i < cb.size(); ++i) {
EXPECT_EQ(expected_values[i], cb[i]);
}
cb.pop_back();
for (int i = 0; i < cb.size(); ++i) {
EXPECT_EQ(expected_values[i], cb[i]);
}
EXPECT_EQ(3, cb.front());
EXPECT_EQ(6, cb.back());
}
TEST(CircularBuffer, PopFront) {
CircularBuffer<int> cb(1);
cb.push_back(10098);
EXPECT_FALSE(cb.empty());
EXPECT_EQ(1, cb.size());
EXPECT_EQ(10098, cb[0]);
cb.pop_front();
EXPECT_TRUE(cb.empty());
EXPECT_EQ(0, cb.size());
}
TEST(CircularBuffer, PopBack) {
CircularBuffer<int> cb(1);
cb.push_back(10098);
EXPECT_FALSE(cb.empty());
EXPECT_EQ(1, cb.size());
EXPECT_EQ(10098, cb[0]);
cb.pop_back();
EXPECT_TRUE(cb.empty());
EXPECT_EQ(0, cb.size());
}
TEST(CircularBuffer, MoveOnlyType) {
CircularBuffer<std::unique_ptr<int>> cb(1);
std::unique_ptr<int> ptr(new int[1]);
*ptr = 10098;
cb.push_back(std::move(ptr));
EXPECT_EQ(10098, *cb.back());
}
}
}