| Index: tests/MemsetTest.cpp
|
| diff --git a/tests/MemsetTest.cpp b/tests/MemsetTest.cpp
|
| index ee6aaea94e5bd10f785bfb3eb1874e635a021d99..1e1378b4ada343fd9910cc68f232a19a0a9aad92 100644
|
| --- a/tests/MemsetTest.cpp
|
| +++ b/tests/MemsetTest.cpp
|
| @@ -9,32 +9,73 @@
|
| #include "SkUtils.h"
|
| #include "Test.h"
|
|
|
| +static void check_alloc(skiatest::Reporter* reporter, const SkChunkAlloc& alloc,
|
| + size_t capacity, size_t used, int numBlocks) {
|
| + REPORTER_ASSERT(reporter, alloc.totalCapacity() >= capacity);
|
| + REPORTER_ASSERT(reporter, alloc.totalUsed() == used);
|
| + SkDEBUGCODE(REPORTER_ASSERT(reporter, alloc.blockCount() == numBlocks);)
|
| +}
|
| +
|
| +static void* simple_alloc(skiatest::Reporter* reporter, SkChunkAlloc* alloc, size_t size) {
|
| + void* ptr = alloc->allocThrow(size);
|
| + check_alloc(reporter, *alloc, size, size, 1);
|
| + REPORTER_ASSERT(reporter, alloc->contains(ptr));
|
| + return ptr;
|
| +}
|
| +
|
| static void test_chunkalloc(skiatest::Reporter* reporter) {
|
| - size_t min = 256;
|
| - SkChunkAlloc alloc(min);
|
| + static const size_t kMin = 1024;
|
| + SkChunkAlloc alloc(kMin);
|
|
|
| - REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
|
| - REPORTER_ASSERT(reporter, 0 == alloc.totalUsed());
|
| - REPORTER_ASSERT(reporter, 0 == alloc.blockCount());
|
| + //------------------------------------------------------------------------
|
| + // check empty
|
| + check_alloc(reporter, alloc, 0, 0, 0);
|
| REPORTER_ASSERT(reporter, !alloc.contains(NULL));
|
| REPORTER_ASSERT(reporter, !alloc.contains(reporter));
|
|
|
| + // reset on empty allocator
|
| alloc.reset();
|
| - REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
|
| - REPORTER_ASSERT(reporter, 0 == alloc.totalUsed());
|
| - REPORTER_ASSERT(reporter, 0 == alloc.blockCount());
|
| -
|
| - size_t size = min >> 1;
|
| - void* ptr = alloc.allocThrow(size);
|
| - REPORTER_ASSERT(reporter, alloc.totalCapacity() >= size);
|
| - REPORTER_ASSERT(reporter, alloc.totalUsed() == size);
|
| - REPORTER_ASSERT(reporter, alloc.blockCount() > 0);
|
| - REPORTER_ASSERT(reporter, alloc.contains(ptr));
|
| + check_alloc(reporter, alloc, 0, 0, 0);
|
| +
|
| + // rewind on empty allocator
|
| + alloc.rewind();
|
| + check_alloc(reporter, alloc, 0, 0, 0);
|
| +
|
| + //------------------------------------------------------------------------
|
| + // test reset when something is allocated
|
| + size_t size = kMin >> 1;
|
| + void* ptr = simple_alloc(reporter, &alloc, size);
|
| +
|
| + alloc.reset();
|
| + check_alloc(reporter, alloc, 0, 0, 0);
|
| + REPORTER_ASSERT(reporter, !alloc.contains(ptr));
|
| +
|
| + //------------------------------------------------------------------------
|
| + // test rewind when something is allocated
|
| + ptr = simple_alloc(reporter, &alloc, size);
|
| +
|
| + alloc.rewind();
|
| + check_alloc(reporter, alloc, size, 0, 1);
|
| + REPORTER_ASSERT(reporter, !alloc.contains(ptr));
|
|
|
| + // use the available block
|
| + ptr = simple_alloc(reporter, &alloc, size);
|
| alloc.reset();
|
| +
|
| + //------------------------------------------------------------------------
|
| + // test out allocating a second block
|
| + ptr = simple_alloc(reporter, &alloc, size);
|
| +
|
| + ptr = alloc.allocThrow(kMin);
|
| + check_alloc(reporter, alloc, 2*kMin, size+kMin, 2);
|
| + REPORTER_ASSERT(reporter, alloc.contains(ptr));
|
| +
|
| + //------------------------------------------------------------------------
|
| + // test out unalloc
|
| + size_t freed = alloc.unalloc(ptr);
|
| + REPORTER_ASSERT(reporter, freed == kMin);
|
| + check_alloc(reporter, alloc, 2*kMin, size, 2);
|
| REPORTER_ASSERT(reporter, !alloc.contains(ptr));
|
| - REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
|
| - REPORTER_ASSERT(reporter, 0 == alloc.totalUsed());
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|