blob: 65c7d84f5676bf3a2f87716c3183d60039d1d33e [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "gtest/gtest.h"
#include "impeller/renderer/pool.h"
namespace impeller {
namespace testing {
namespace {
class Foobar {
public:
static std::shared_ptr<Foobar> Create() { return std::make_shared<Foobar>(); }
size_t GetSize() const { return size_; }
void SetSize(size_t size) { size_ = size; }
void Reset() { is_reset_ = true; }
bool GetIsReset() const { return is_reset_; }
void SetIsReset(bool is_reset) { is_reset_ = is_reset; }
private:
size_t size_;
bool is_reset_ = false;
};
} // namespace
TEST(PoolTest, Simple) {
Pool<Foobar> pool(1'000);
{
auto grabbed = pool.Grab();
grabbed->SetSize(123);
pool.Recycle(grabbed);
EXPECT_EQ(pool.GetSize(), 123u);
}
auto grabbed = pool.Grab();
EXPECT_EQ(grabbed->GetSize(), 123u);
EXPECT_TRUE(grabbed->GetIsReset());
EXPECT_EQ(pool.GetSize(), 0u);
}
TEST(PoolTest, Overload) {
Pool<Foobar> pool(1'000);
{
std::vector<std::shared_ptr<Foobar>> values;
values.reserve(20);
for (int i = 0; i < 20; i++) {
values.push_back(pool.Grab());
}
for (const auto& value : values) {
value->SetSize(100);
pool.Recycle(value);
}
}
EXPECT_EQ(pool.GetSize(), 1'000u);
}
} // namespace testing
} // namespace impeller