assertEquals(TOTAL_MEM, ma.getFreeList().getFreeMemory());
MemoryChunk smc1 = ma.allocate(SMALL_ALLOC_SIZE-perObjectOverhead, null);
MemoryChunk smc2 = ma.allocate(SMALL_ALLOC_SIZE-perObjectOverhead, null);
smc2.release();
assertEquals(TOTAL_MEM-SMALL_ALLOC_SIZE, ma.getFreeList().getFreeMemory());
try {
bmc = ma.allocate(BIG_ALLOC_SIZE-perObjectOverhead, null);
assertEquals(TOTAL_MEM, ma.getFreeList().getFreeMemory());
bmc = ma.allocate(BIG_ALLOC_SIZE-perObjectOverhead, null);
bmc.release();
assertEquals(TOTAL_MEM, ma.getFreeList().getFreeMemory());
ArrayList<MemoryChunk> mcs = new ArrayList<MemoryChunk>();
for (int i=0; i < BIG_ALLOC_SIZE/(8+perObjectOverhead); i++) {
assertEquals(0, ma.getFreeList().getFreeMemory());
try {
ma.allocate(8, null);
assertEquals(8+perObjectOverhead, ma.getFreeList().getFreeMemory());
mcs.remove(0).release();
assertEquals((8+perObjectOverhead)*2, ma.getFreeList().getFreeMemory());
ma.allocate(16, null).release();
assertEquals((8+perObjectOverhead)*2, ma.getFreeList().getFreeMemory());
mcs.remove(0).release();
assertEquals((8+perObjectOverhead)*3, ma.getFreeList().getFreeMemory());
mcs.remove(0).release();
assertEquals((8+perObjectOverhead)*4, ma.getFreeList().getFreeMemory());