blob: 33ac8666952db0eccc75298343707ce2e236ea40 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.util.containers;
import junit.framework.Assert;
import junit.framework.TestCase;
/**
* @author lvo
*/
public class ObjectCacheTest extends TestCase {
public void testCacheFiniteness() {
ObjectCache<String, String> cache = new ObjectCache<String, String>(4);
cache.put("Eclipse", "Sucking IDE");
cache.put("IDEA", "good");
cache.put("IDEA 4.5", "better");
cache.put("IDEA 5.0", "perfect");
cache.put("IDEA 6.0", "ideal");
// "Eclipse" should already leave the cache
Assert.assertNull(cache.get("Eclipse"));
}
public void testCacheIterator() {
ObjectCache<String, String> cache = new ObjectCache<String, String>(4);
cache.put("Eclipse", "Sucking IDE");
cache.put("IDEA", "good IDEA");
cache.put("IDEA 4.5", "better IDEA");
cache.put("IDEA 5.0", "perfect IDEA");
cache.put("IDEA 6.0", "IDEAL");
HashSet<String> values = new HashSet<String>();
for (Object obj : cache) {
values.add((String)obj);
}
Assert.assertNull(cache.get("Eclipse"));
Assert.assertFalse(values.contains("Sucking IDE"));
Assert.assertTrue(values.contains("good IDEA"));
Assert.assertTrue(values.contains("better IDEA"));
Assert.assertTrue(values.contains("perfect IDEA"));
Assert.assertTrue(values.contains("IDEAL"));
}
final private static HashMap removedPairs = new HashMap();
private static class CacheDeletedPairsListener implements ObjectCache.DeletedPairsListener {
@Override
public void objectRemoved(Object key, Object value) {
removedPairs.put(key, value);
}
}
public void testCacheListeners() {
ObjectCache<String, String> cache = new ObjectCache<String, String>(4);
cache.addDeletedPairsListener(new CacheDeletedPairsListener());
removedPairs.clear();
cache.put("Eclipse", "Sucking IDE");
cache.put("Eclipses", "Sucking IDEs");
cache.put("IDEA", "good IDEA");
cache.put("IDEA 4.5", "better IDEA");
cache.put("IDEA 5.0", "perfect IDEA");
cache.put("IDEA 6.0", "IDEAL");
Assert.assertEquals("Sucking IDE", removedPairs.get("Eclipse"));
Assert.assertEquals("Sucking IDEs", removedPairs.get("Eclipses"));
}
public void testIntCacheFiniteness() {
IntObjectCache<Integer> cache = new IntObjectCache<Integer>(4);
cache.put(0, 0);
cache.put(1, 1);
cache.put(2, 2);
cache.put(3, 3);
cache.put(4, 4);
// 0 should already leave the cache
Assert.assertNull(cache.tryKey(0));
}
public void testIntCacheIterator() {
IntObjectCache<Integer> cache = new IntObjectCache<Integer>(4);
cache.put(0, 0);
cache.put(1, 1);
cache.put(2, 2);
cache.put(3, 3);
cache.put(4, 4);
HashSet<Object> values = new HashSet<Object>();
for (Object obj : cache) {
values.add(obj);
}
Assert.assertFalse(values.contains(0));
Assert.assertTrue(values.contains(1));
Assert.assertTrue(values.contains(2));
Assert.assertTrue(values.contains(3));
Assert.assertTrue(values.contains(4));
}
public void testIntCacheNegativeKeys() {
IntObjectCache<Object> cache = new IntObjectCache<Object>(8);
cache.put(-1, 1);
cache.put(-2, 2);
cache.put(-3, 3);
cache.put(-4, 4);
cache.put(1, 1);
cache.put(2, 2);
cache.put(3, 3);
cache.put(4, 4);
Assert.assertNull(cache.tryKey(0));
Assert.assertNotNull(cache.tryKey(-1));
Assert.assertNotNull(cache.tryKey(-2));
Assert.assertNotNull(cache.tryKey(-3));
Assert.assertNotNull(cache.tryKey(-4));
}
}