// 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 Create() { return std::make_shared(); } 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 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 pool(1'000); { std::vector> 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