@Test public void memoryLimitedCacheTest() throws InterruptedException { MemoryLimitedCache<String, MemoryLimitedCache.SizeProvider> cache = new MemoryLimitedCache<String, MemoryLimitedCache.SizeProvider>(5, 1, new Computable<String, MemoryLimitedCache.SizeProvider>() { @Override public MemoryLimitedCache.SizeProvider compute(final String s) { return new MemoryLimitedCache.SizeProvider() { @Override public long size() { return s.length(); } }; } }); Assert.assertEquals(0, cache.size()); cache.get("foo1"); Assert.assertEquals(1, cache.size()); cache.get("foo2"); Assert.assertEquals(1, cache.size()); cache.get("foo3"); Assert.assertEquals(1, cache.size()); cache.get("foo4"); Assert.assertEquals(1, cache.size()); Assert.assertEquals(4, cache.memoryUsed()); Assert.assertEquals(5, cache.limit()); }