assertEquals(3, buf.position());
}
@Test
public void testAutoShrink() throws Exception {
IoBuffer buf = IoBuffer.allocate(8).setAutoShrink(true);
// Make sure the buffer doesn't shrink too much (less than the initial
// capacity.)
buf.sweep((byte) 1);
buf.fill(7);
buf.compact();
assertEquals(8, buf.capacity());
assertEquals(1, buf.position());
assertEquals(8, buf.limit());
buf.clear();
assertEquals(1, buf.get());
// Expand the buffer.
buf.capacity(32).clear();
assertEquals(32, buf.capacity());
// Make sure the buffer shrinks when only 1/4 is being used.
buf.sweep((byte) 1);
buf.fill(24);
buf.compact();
assertEquals(16, buf.capacity());
assertEquals(8, buf.position());
assertEquals(16, buf.limit());
buf.clear();
for (int i = 0; i < 8; i ++) {
assertEquals(1, buf.get());
}
// Expand the buffer.
buf.capacity(32).clear();
assertEquals(32, buf.capacity());
// Make sure the buffer shrinks when only 1/8 is being used.
buf.sweep((byte) 1);
buf.fill(28);
buf.compact();
assertEquals(8, buf.capacity());
assertEquals(4, buf.position());
assertEquals(8, buf.limit());
buf.clear();
for (int i = 0; i < 4; i ++) {
assertEquals(1, buf.get());
}
// Expand the buffer.
buf.capacity(32).clear();
assertEquals(32, buf.capacity());
// Make sure the buffer shrinks when 0 byte is being used.
buf.fill(32);
buf.compact();
assertEquals(8, buf.capacity());
assertEquals(0, buf.position());
assertEquals(8, buf.limit());
// Expand the buffer.
buf.capacity(32).clear();
assertEquals(32, buf.capacity());
// Make sure the buffer doesn't shrink when more than 1/4 is being used.
buf.sweep((byte) 1);
buf.fill(23);
buf.compact();
assertEquals(32, buf.capacity());
assertEquals(9, buf.position());
assertEquals(32, buf.limit());
buf.clear();
for (int i = 0; i < 9; i ++) {
assertEquals(1, buf.get());
}
}