package offheap;
import junit.framework.Assert;
import org.junit.Test;
import org.nustaq.offheap.BinaryQueue;
import org.nustaq.offheap.bytez.ByteSource;
import org.nustaq.offheap.bytez.onheap.HeapBytez;
import java.util.Arrays;
/**
* Created by moelrue on 5/5/15.
*/
public class BinaryQueueTest {
@Test
public void binQ() {
HeapBytez sink = new HeapBytez(100);
BinaryQueue q = new BinaryQueue();
for ( int ii = 0; ii < 500; ii++ ) {
q.add(createMSG((byte) 1, 88));
Assert.assertTrue(q.available() == 88);
q.add(createMSG((byte) 2, 99));
Assert.assertTrue(q.available() == 88 + 99);
long len = q.poll(sink, 0, 88);
for (int i = 0; i < len; i++) {
Assert.assertTrue(sink.get(i) == 1);
}
Assert.assertTrue(q.available() == 99);
len = q.poll(sink, 0, 99);
for (int i = 0; i < len; i++) {
Assert.assertTrue(sink.get(i) == 2);
}
Assert.assertTrue(q.available() == 0);
}
}
@Test
public void binOverflow() {
HeapBytez sink = new HeapBytez(100);
BinaryQueue q = new BinaryQueue();
for ( int ii = 0; ii < 50; ii++ ) {
q.add(createMSG((byte) 1, 88));
q.add(createMSG((byte) 2, 99));
}
Assert.assertTrue(q.available() == 50 * (99 + 88));
for ( int ii = 0; ii < 50; ii++ ) {
long len = q.poll(sink, 0, 88);
for (int i = 0; i < len; i++) {
Assert.assertTrue(sink.get(i) == 1);
}
len = q.poll(sink, 0, 99);
for (int i = 0; i < len; i++) {
Assert.assertTrue(sink.get(i) == 2);
}
}
System.out.println("cap "+q.capacity()+" size "+q.available());
}
private ByteSource createMSG(byte num, int len) {
byte[] b = new byte[len];
Arrays.fill(b, num);
return new HeapBytez(b);
}
}