/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package com.github.geophile.erdo.segmentfilemanager.pagememorymanager; import org.junit.Test; import java.nio.ByteBuffer; import java.util.Arrays; import static org.junit.Assert.*; public class SlabTest { @Test public void testInitialAllocations() { Slab slab = new Slab(0, SLAB_SIZE, PAGE_SIZE); int[] arrayOffsets = new int[PAGES]; for (int p = 0; p < PAGES; p++) { ByteBuffer buffer = slab.takePageBuffer(); assertNotNull(buffer); assertEquals(0, buffer.position()); assertEquals(PAGE_SIZE, buffer.limit()); arrayOffsets[p] = buffer.arrayOffset(); } assertNull(slab.takePageBuffer()); Arrays.sort(arrayOffsets); int expectedArrayOffset = 0; for (int b = 0; b < PAGES; b++) { assertEquals(expectedArrayOffset, arrayOffsets[b]); expectedArrayOffset += PAGE_SIZE; } } @Test public void testReturns() { Slab slab = new Slab(0, SLAB_SIZE, PAGE_SIZE); ByteBuffer[] pages = new ByteBuffer[PAGES]; // Take all pages for (int p = 0; p < PAGES; p++) { pages[p] = slab.takePageBuffer(); } // Put them back for (int p = 0; p < PAGES; p++) { slab.returnPageBuffer(pages[p]); } // Take them again int[] arrayOffsets = new int[PAGES]; for (int p = 0; p < PAGES; p++) { ByteBuffer buffer = slab.takePageBuffer(); assertNotNull(buffer); assertEquals(0, buffer.position()); assertEquals(PAGE_SIZE, buffer.limit()); arrayOffsets[p] = buffer.arrayOffset(); } assertNull(slab.takePageBuffer()); Arrays.sort(arrayOffsets); int expectedArrayOffset = 0; for (int b = 0; b < PAGES; b++) { assertEquals(expectedArrayOffset, arrayOffsets[b]); expectedArrayOffset += PAGE_SIZE; } } private final int SLAB_SIZE = 1000; private final int PAGE_SIZE = 10; private final int PAGES = SLAB_SIZE / PAGE_SIZE; }