package test.utils.collection;
import static org.hamcrest.Matchers.is;
import org.junit.Assert;
import org.junit.Test;
import com.firefly.utils.collection.ConcurrentLinkedHashMap;
import com.firefly.utils.collection.ConcurrentLinkedHashMap.MapEventListener;
public class TestConcurrentLinkedHashMap {
static MapEventListener<String, String> listener = new MapEventListener<String, String>() {
@Override
public String onRemoveEntry(String key, String value) {
return value;
}
@Override
public String onGetEntry(String key, String value) {
return value;
}
@Override
public String onPutEntry(String key, String value, String previousValue) {
return previousValue;
}
@Override
public boolean onEliminateEntry(String key, String value) {
// System.out.println(key + "|" + value);
return true;
}
};
@Test
public void testMaxEntries() {
ConcurrentLinkedHashMap<String, String> map = new ConcurrentLinkedHashMap<String, String>(true, 33, listener);
System.out.println(map.getConcurrencyLevel() + "|" + map.getSegmentMask() + "|" + map.getSegmentShift());
for (int i = 0; i < 100; i++) {
map.put("" + i, "v" + i);
}
System.out.println(map.size());
Assert.assertThat(map.size(), is(32));
}
@Test
public void testLeastRecentlyUsed() {
ConcurrentLinkedHashMap<String, String> map = new ConcurrentLinkedHashMap<String, String>(true, 33, listener);
System.out.println(map.getConcurrencyLevel() + "|" + map.getSegmentMask() + "|" + map.getSegmentShift());
for (int i = 0; i < 100; i++) {
if(i > 75)
map.get("75");
map.put("" + i, "v" + i);
}
Assert.assertThat(map.get("75"), is("v75"));
}
@Test
public void testConcurrentLevel() {
ConcurrentLinkedHashMap<String, String> map = new ConcurrentLinkedHashMap<String, String>(true, 200, listener, 200);
Assert.assertThat(map.getConcurrencyLevel(), is(256));
}
public static void main(String[] args) {
ConcurrentLinkedHashMap<String, String> map = new ConcurrentLinkedHashMap<String, String>(true, 33, listener);
System.out.println(map.getConcurrencyLevel() + "|" + map.getSegmentMask() + "|" + map.getSegmentShift());
for (int i = 0; i < 100; i++) {
map.put("key" + i, "v" + i);
}
System.out.println(map.toString());
for (int i = 0; i < 100; i++) {
System.out.println(map.get("key" + i));
}
System.out.println(map.get("key97"));
System.out.println(map.get("key97"));
System.out.println(map.get("key97"));
System.out.println(map.get("key97"));
System.out.println(map.get("key97"));
}
}