package com.jcwhatever.nucleus.utils.performance.pool; import static org.junit.Assert.assertEquals; import com.jcwhatever.nucleus.utils.performance.pool.SimpleCheckoutPool.CheckedOutElements; import org.junit.Test; /** * Tests {@link SimpleCheckoutPool}. */ public class SimpleCheckoutPoolTest { static class PoolElement { } private SimpleCheckoutPool<PoolElement> getPool(int size) { return new SimpleCheckoutPool<>(size, new IPoolElementFactory<PoolElement>() { @Override public PoolElement create() { return new PoolElement(); } }); } @Test public void testSize() throws Exception { SimpleCheckoutPool<PoolElement> pool = getPool(10); assertEquals(0, pool.size()); pool.checkout(); assertEquals(0, pool.size()); pool.getCheckedOut().recycle(); assertEquals(1, pool.size()); } @Test public void testMaxSize() throws Exception { SimpleCheckoutPool<PoolElement> pool = getPool(10); pool.setMaxSize(2); pool.checkout(); pool.checkout(); pool.checkout(); pool.getCheckedOut().recycle(); assertEquals(2, pool.size()); } @Test public void testClear() throws Exception { SimpleCheckoutPool<PoolElement> pool = getPool(10); pool.checkout(); pool.checkout(); pool.checkout(); pool.getCheckedOut().recycle(); assertEquals(3, pool.size()); pool.clear(); assertEquals(0, pool.size()); } @Test public void testGetCheckedOut() throws Exception { SimpleCheckoutPool<PoolElement> pool = getPool(10); CheckedOutElements<PoolElement> checked = pool.getCheckedOut(); pool.checkout(); pool.checkout(); pool.checkout(); assertEquals(3, checked.size()); assertEquals(0, pool.size()); checked.recycle(); assertEquals(0, checked.size()); assertEquals(3, pool.size()); } @Test public void testPoolExpand() throws Exception { SimpleCheckoutPool<PoolElement> pool = getPool(2); assertEquals(2, pool.pool().length); PoolElement elm1 = pool.retrieve(); PoolElement elm2 = pool.retrieve(); PoolElement elm3 = pool.retrieve(); PoolElement elm4 = pool.retrieve(); pool.recycle(elm1); pool.recycle(elm2); pool.recycle(elm3); pool.recycle(elm4); assertEquals(12, pool.pool().length); } @Test public void testRecycle() throws Exception { SimpleCheckoutPool<PoolElement> pool = getPool(4); PoolElement elm1 = pool.checkout(); PoolElement elm2 = pool.checkout(); PoolElement elm3 = pool.checkout(); PoolElement elm4 = pool.checkout(); assertEquals(4, pool.getCheckedOut().size()); pool.recycle(elm1); assertEquals(3, pool.getCheckedOut().size()); pool.recycle(elm2); pool.recycle(elm3); pool.recycle(elm4); assertEquals(0, pool.getCheckedOut().size()); } }