package net.yadan.banana.memory;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class BufferTest {
private IBuffer create(int size) {
return new Buffer(size);
}
private IBuffer create(int size, double growthFactor) {
return new Buffer(size, growthFactor);
}
@Test
public void testBufferInt() {
IBuffer b = create(10);
assertEquals(10, b.capacity());
assertEquals(0, b.size());
assertEquals(2, b.getGrowthFactor(), Double.MIN_VALUE);
}
@Test
public void testBufferIntDouble() {
IBuffer b = create(10, 1.5);
assertEquals(10, b.capacity());
assertEquals(0, b.size());
assertEquals(1.5, b.getGrowthFactor(), Double.MIN_VALUE);
}
@Test
public void testSize() {
IBuffer b = create(10);
assertEquals(0, b.size());
b.appendInt(1);
assertEquals(1, b.size());
}
@Test
public void testReset() {
IBuffer b = create(10);
b.appendInt(1);
b.reset();
assertEquals(0, b.size());
}
@Test
public void testEnsureCapacity() {
IBuffer b = create(10, 2.0);
assertEquals(10, b.capacity());
b.ensureCapacity(5);
assertEquals(10, b.capacity());
b.ensureCapacity(15);
assertEquals(20, b.capacity());
}
@Test
public void testWriteWithEnsureCapacity() {
IBuffer b = create(1, 2);
assertEquals(1, b.capacity());
b.appendInt(10);
assertEquals(1, b.capacity());
assertEquals(1, b.size());
b.ensureCapacity(2);
assertEquals(2, b.capacity());
assertEquals(1, b.size());
b.appendInt(11);
assertEquals(2, b.size());
assertEquals(10, b.getInt(0));
assertEquals(11, b.getInt(1));
}
@Test
public void testCapacity() {
IBuffer b = create(10, 2);
assertEquals(10, b.capacity());
b.ensureCapacity(20);
assertEquals(20, b.capacity());
}
@Test
public void testUpperShort() {
IBuffer b = create(1);
assertEquals(0, b.getUpperShort(0));
b.setUpperShort(0, 99);
assertEquals(99, b.getUpperShort(0));
assertEquals(1, b.size());
}
@Test
public void testUpperShortAfterReset() {
IBuffer b = create(1);
b.setLowerShort(0, 10);
b.setUpperShort(0, 20);
assertEquals(10, b.getLowerShort(0));
assertEquals(20, b.getUpperShort(0));
assertEquals(1, b.size());
// test upper after reset
b.reset();
assertEquals(0, b.size());
b.setUpperShort(0, 20);
assertEquals(0, b.getLowerShort(0));
assertEquals(20, b.getUpperShort(0));
}
@Test
public void testLowerShortAfterReset() {
IBuffer b = create(1);
b.setLowerShort(0, 10);
b.setUpperShort(0, 20);
assertEquals(10, b.getLowerShort(0));
assertEquals(20, b.getUpperShort(0));
assertEquals(1, b.size());
// test upper after reset
b.reset();
assertEquals(0, b.size());
b.setLowerShort(0, 10);
assertEquals(10, b.getLowerShort(0));
assertEquals(0, b.getUpperShort(0));
}
@Test
public void testLowerShort() {
IBuffer b = create(1);
assertEquals(0, b.getLowerShort(0));
b.setLowerShort(0, 99);
assertEquals(99, b.getLowerShort(0));
assertEquals(1, b.size());
}
@Test
public void testUpperShortNeg() {
IBuffer b = create(1);
b.setInt(0, 0);
assertEquals(0, b.getLowerShort(0));
assertEquals(0, b.getUpperShort(0));
b.setUpperShort(0, -1);
assertEquals(0, b.getLowerShort(0));
assertEquals(-1, b.getUpperShort(0));
}
@Test
public void testLowerShortNeg() {
IBuffer b = create(1);
b.setInt(0, 0);
assertEquals(0, b.getLowerShort(0));
assertEquals(0, b.getUpperShort(0));
b.setLowerShort(0, -1);
assertEquals(-1, b.getLowerShort(0));
assertEquals(0, b.getUpperShort(0));
}
@Test
public void testUpperShort_initialNeg() {
IBuffer b = create(1);
b.setInt(0, -1);
assertEquals(-1, b.getLowerShort(0));
assertEquals(-1, b.getUpperShort(0));
b.setUpperShort(0, 0);
assertEquals(-1, b.getLowerShort(0));
assertEquals(0, b.getUpperShort(0));
}
@Test
public void testLowerShort_initialNeg() {
IBuffer b = create(1);
b.setInt(0, -1);
assertEquals(-1, b.getLowerShort(0));
assertEquals(-1, b.getUpperShort(0));
b.setLowerShort(0, 0);
assertEquals(0, b.getLowerShort(0));
assertEquals(-1, b.getUpperShort(0));
}
@Test
public void testInt() {
IBuffer b = create(1);
assertEquals(0, b.getInt(0));
b.setInt(0, 99);
assertEquals(99, b.getInt(0));
}
@Test
public void testLong() {
IBuffer b = create(2);
assertEquals(0, b.getLong(0));
b.setLong(0, Long.MAX_VALUE);
assertEquals(Long.MAX_VALUE, b.getLong(0));
}
@Test
public void testInts() {
IBuffer b = create(10);
int data[] = { 1, 2, 3, 4, 5 };
int out[] = new int[5];
b.setInts(0, data, 0, data.length);
b.getInts(0, out, 0, data.length);
assertArrayEquals(data, out);
}
@Test
public void testAppendInt() {
IBuffer b = create(10);
assertEquals(0, b.size());
b.appendInt(10);
assertEquals(10, b.getInt(0));
assertEquals(1, b.size());
}
@Test
public void testAppendLong() {
IBuffer b = create(10);
assertEquals(0, b.size());
b.appendLong(Long.MAX_VALUE);
assertEquals(Long.MAX_VALUE, b.getLong(0));
assertEquals(2, b.size());
}
@Test
public void testAppendInts() {
IBuffer b = create(10);
assertEquals(0, b.size());
int data[] = { 1, 2, 3, 4, 5 };
int out[] = new int[5];
b.appendInts(data, 0, data.length);
assertEquals(data.length, b.size());
b.getInts(0, out, 0, out.length);
assertArrayEquals(data, out);
}
@Test
public void testChars() {
IBuffer b = create(10);
char c[] = "hello there".toCharArray();
char out[] = new char[c.length];
b.setChars(0, c, 0, c.length);
b.getChars(0, out, 0, out.length);
assertArrayEquals(c, out);
}
@Test
public void testCharsSrcOffset() {
IBuffer b = create(10);
char c[] = "hello there".toCharArray();
char out[] = "hello -----".toCharArray();
b.setChars(0, c, 6, c.length - 6);
b.getChars(0, out, 6, out.length - 6);
assertEquals(3, b.size());
assertArrayEquals(c, out);
}
@Test
public void testCharsDstOffset() {
IBuffer b = create(10);
char c[] = "hello there".toCharArray();
char out[] = "hello -----".toCharArray();
b.setInt(0, 999);
b.setChars(1, c, 6, c.length - 6);
b.getChars(1, out, 6, out.length - 6);
assertEquals(4, b.size());
assertArrayEquals(c, out);
assertEquals(999, b.getInt(0));
}
}