@Test public void testEndless() { Cache<String, String> cache = new LRUCache<String, String>(0); assertFalse(cache.isFull()); cache.put("1", "1"); assertEquals(1, cache.size()); assertFalse(cache.isFull()); cache.put("2", "2"); assertEquals(2, cache.size()); assertFalse(cache.isFull()); }
@Test public void testPrune() { Cache<String, String> cache = new LRUCache<String, String>(3); cache.put("1", "1"); cache.put("2", "2"); cache.put("3", "3"); assertEquals(0, cache.prune()); assertEquals(3, cache.size()); cache.put("4", "4"); assertEquals(0, cache.prune()); assertEquals(3, cache.size()); }
@Test public void testBoosting() { Cache<String, String> cache = new LFUCache<>(3); cache.put("1", "1"); cache.put("2", "2"); cache.put("3", "3"); cache.get("3"); cache.get("3"); cache.get("3"); cache.get("3"); cache.get("2"); cache.get("2"); cache.get("2"); cache.get("1"); cache.get("1"); assertEquals(3, cache.size()); cache.put("4", "4"); assertNull(cache.get("1")); // 1 is less frequent and it is out of cache assertNotNull(cache.get("4")); // 4 is new and it is inside cache.get("3"); cache.get("2"); // bad sequence cache.put("5", "5"); cache.get("5"); // situation: 2(1), 3(2), 5(1) value(accessCount) cache.put("4", "4"); cache.get("4"); // situation: 3(1), 4(1) cache.put("5", "5"); cache.get("5"); // situation: 3(1), 4(1), 5(1) cache.put("4", "4"); cache.get("4"); // situation: 4(1) assertEquals(3, cache.size()); assertNull(cache.get("1")); assertNull(cache.get("2")); assertNotNull(cache.get("3")); assertNotNull(cache.get("4")); assertNotNull(cache.get("5")); }
@Test public void testCache2() { Cache<String, String> cache = new LFUCache<>(3); cache.put("1", "1"); cache.put("2", "2"); assertFalse(cache.isFull()); cache.put("3", "3"); assertTrue(cache.isFull()); assertNotNull(cache.get("3")); assertNotNull(cache.get("3")); assertNotNull(cache.get("3")); // boost usage of a 3 assertNotNull(cache.get("1")); assertNotNull(cache.get("2")); cache.put("4", "4"); // since this is LFU cache, 1 AND 2 will be removed, but not 3 assertNotNull(cache.get("3")); assertNotNull(cache.get("4")); assertEquals(2, cache.size()); }