| Index: tests/SmallAllocatorTest.cpp
|
| diff --git a/tests/SmallAllocatorTest.cpp b/tests/SmallAllocatorTest.cpp
|
| index 774e0c9e8982906f09def08548e98b2145ce1cf8..d8cbe9cc4e51ad8abb20326ce2791ecedb191532 100644
|
| --- a/tests/SmallAllocatorTest.cpp
|
| +++ b/tests/SmallAllocatorTest.cpp
|
| @@ -30,7 +30,7 @@ int CountingClass::kCount;
|
| template<uint32_t kMaxObjects, size_t kBytes> void test_allocator(skiatest::Reporter* reporter) {
|
| {
|
| SkSmallAllocator<kMaxObjects, kBytes> alloc;
|
| - for (uint32_t i = 0; i < kMaxObjects; ++i) {
|
| + for (uint32_t i = 0; i < kMaxObjects + 1; ++i) {
|
| CountingClass* c = alloc.template createT<CountingClass>();
|
| REPORTER_ASSERT(reporter, c != nullptr);
|
| REPORTER_ASSERT(reporter, CountingClass::GetCount() == static_cast<int>(i+1));
|
| @@ -43,18 +43,15 @@ template<uint32_t kMaxObjects, size_t kBytes> void test_allocator(skiatest::Repo
|
| // were created in fStorage or on the heap.
|
| DEF_TEST(SmallAllocator_destructor, reporter) {
|
| // Four times as many bytes as objects will never require any heap
|
| - // allocations (since SkAlign4(sizeof(CountingClass)) == 4 and the allocator
|
| - // will stop once it reaches kMaxObjects).
|
| + // allocations (since SkAlign4(sizeof(CountingClass)) == 4).
|
| test_allocator<5, 20>(reporter);
|
| test_allocator<10, 40>(reporter);
|
| test_allocator<20, 80>(reporter);
|
|
|
| -#ifndef SK_DEBUG
|
| // Allowing less bytes than objects means some will be allocated on the
|
| // heap. Don't run these in debug where we assert.
|
| test_allocator<50, 20>(reporter);
|
| test_allocator<100, 20>(reporter);
|
| -#endif
|
| }
|
|
|
| class Dummy {
|
| @@ -81,3 +78,16 @@ DEF_TEST(SmallAllocator_pointer, reporter) {
|
| REPORTER_ASSERT(reporter, container != nullptr);
|
| REPORTER_ASSERT(reporter, container->getDummy() == &d);
|
| }
|
| +
|
| +// Test that using a createWithIniterT works as expected.
|
| +DEF_TEST(SmallAllocator_initer, reporter) {
|
| + SkSmallAllocator<1, 8> alloc;
|
| + Dummy d;
|
| + DummyContainer* container = alloc.createWithIniterT<DummyContainer>(
|
| + sizeof(DummyContainer),
|
| + [&](void* storage) {
|
| + return new (storage) DummyContainer(&d);
|
| + });
|
| + REPORTER_ASSERT(reporter, container != nullptr);
|
| + REPORTER_ASSERT(reporter, container->getDummy() == &d);
|
| +}
|
|
|