### Question:
PoolArena implements PoolArenaMetric { int normalizeCapacity(int reqCapacity) { checkPositiveOrZero(reqCapacity, "reqCapacity"); if (reqCapacity >= chunkSize) { return directMemoryCacheAlignment == 0 ? reqCapacity : alignCapacity(reqCapacity); } if (!isTiny(reqCapacity)) { int normalizedCapacity = reqCapacity; normalizedCapacity --; normalizedCapacity |= normalizedCapacity >>> 1; normalizedCapacity |= normalizedCapacity >>> 2; normalizedCapacity |= normalizedCapacity >>> 4; normalizedCapacity |= normalizedCapacity >>> 8; normalizedCapacity |= normalizedCapacity >>> 16; normalizedCapacity ++; if (normalizedCapacity < 0) { normalizedCapacity >>>= 1; } assert directMemoryCacheAlignment == 0 || (normalizedCapacity & directMemoryCacheAlignmentMask) == 0; return normalizedCapacity; } if (directMemoryCacheAlignment > 0) { return alignCapacity(reqCapacity); } if ((reqCapacity & 15) == 0) { return reqCapacity; } return (reqCapacity & ~15) + 16; } protected  PoolArena(PooledByteBufAllocator parent, int pageSize,
          int maxOrder, int pageShifts, int chunkSize, int cacheAlignment); @Override int numThreadCaches(); @Override int numTinySubpages(); @Override int numSmallSubpages(); @Override int numChunkLists(); @Override List<PoolSubpageMetric> tinySubpages(); @Override List<PoolSubpageMetric> smallSubpages(); @Override List<PoolChunkListMetric> chunkLists(); @Override long numAllocations(); @Override long numTinyAllocations(); @Override long numSmallAllocations(); @Override synchronized long numNormalAllocations(); @Override long numDeallocations(); @Override synchronized long numTinyDeallocations(); @Override synchronized long numSmallDeallocations(); @Override synchronized long numNormalDeallocations(); @Override long numHugeAllocations(); @Override long numHugeDeallocations(); @Override long numActiveAllocations(); @Override long numActiveTinyAllocations(); @Override long numActiveSmallAllocations(); @Override long numActiveNormalAllocations(); @Override long numActiveHugeAllocations(); @Override long numActiveBytes(); @Override synchronized String toString();  }### Answer:
@Test public void testNormalizeCapacity() throws Exception { PoolArena<ByteBuffer> arena = new PoolArena.DirectArena(null, 0, 0, 9, 999999, 0); int[] reqCapacities = {0, 15, 510, 1024, 1023, 1025}; int[] expectedResult = {0, 16, 512, 1024, 1024, 2048}; for (int i = 0; i < reqCapacities.length; i ++) { Assert.assertEquals(expectedResult[i], arena.normalizeCapacity(reqCapacities[i])); } }
@Test public void testNormalizeAlignedCapacity() throws Exception { PoolArena<ByteBuffer> arena = new PoolArena.DirectArena(null, 0, 0, 9, 999999, 64); int[] reqCapacities = {0, 15, 510, 1024, 1023, 1025}; int[] expectedResult = {0, 64, 512, 1024, 1024, 2048}; for (int i = 0; i < reqCapacities.length; i ++) { Assert.assertEquals(expectedResult[i], arena.normalizeCapacity(reqCapacities[i])); } }