aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/io/trygvis/btree/HeapPageTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/io/trygvis/btree/HeapPageTest.java')
-rw-r--r--src/test/java/io/trygvis/btree/HeapPageTest.java70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/test/java/io/trygvis/btree/HeapPageTest.java b/src/test/java/io/trygvis/btree/HeapPageTest.java
new file mode 100644
index 0000000..e845a16
--- /dev/null
+++ b/src/test/java/io/trygvis/btree/HeapPageTest.java
@@ -0,0 +1,70 @@
+package io.trygvis.btree;
+
+import org.junit.Test;
+
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+import static io.trygvis.btree.HeapPage.*;
+import static org.junit.Assert.*;
+
+public class HeapPageTest {
+
+ int pageSize = 128;
+
+ @Test
+ public void testBasic() {
+ ByteBuffer buffer = ByteBuffer.allocate(pageSize);
+
+ HeapPage page = HeapPage.blankHeapPage(buffer);
+ assertEquals(pageSize - headerSize, page.bytesFree());
+
+ int itemCount = 6;
+ byte[] object = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf};
+
+ for (int i = 0; i < itemCount; i++) {
+ page.append(object);
+ assertEquals("i=" + i, pageSize - headerSize - (object.length + itemSize) * (i + 1), page.bytesFree());
+ }
+
+ try {
+ page.append(object);
+ fail("Expected PageOverflowException");
+ } catch (PageOverflowException e) {
+ assertEquals(pageSize - headerSize - itemCount * (object.length + itemSize), e.bytesFree);
+ assertEquals(object.length, e.bytesRequested);
+ }
+
+ {
+ ByteBuffer expectedBuffer = ByteBuffer.allocate(pageSize);
+ int position = pageSize - itemCount * (object.length + itemSize);
+ expectedBuffer.putInt(position);
+ expectedBuffer.position(position);
+ for (int i = 0; i < itemCount; i++) {
+ expectedBuffer.put(object);
+ expectedBuffer.putInt(object.length);
+ }
+ assertEquals(pageSize, expectedBuffer.position());
+
+ byte[] expectedArray = expectedBuffer.array();
+ byte[] actualArray = buffer.array();
+ assertArrayEquals(expectedArray, actualArray);
+ }
+
+ {
+ Iterator<ByteBuffer> it = page.bufferIterator().iterator();
+ for (int i = 0; i < itemCount; i++) {
+ assertTrue(it.hasNext());
+ ByteBuffer bb = it.next();
+ assertArrayEquals(object, toArray(bb));
+ }
+ assertFalse(it.hasNext());
+ }
+ }
+
+ private byte[] toArray(ByteBuffer bb) {
+ byte[] bytes = new byte[bb.limit()];
+ bb.get(bytes);
+ return bytes;
+ }
+}