use of com.google.common.cache.TestingCacheLoaders.CountingLoader in project guava by hceylan.
the class LocalCacheTest method testComputePartiallyCollectedKey.
public void testComputePartiallyCollectedKey() throws ExecutionException {
CacheBuilder<Object, Object> builder = createCacheBuilder().concurrencyLevel(1);
CountingLoader loader = new CountingLoader();
LocalCache<Object, Object> map = makeLocalCache(builder);
Segment<Object, Object> segment = map.segments[0];
AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
assertEquals(0, loader.getCount());
Object key = new Object();
int hash = map.hash(key);
Object value = new Object();
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
entry.setValueReference(valueRef);
table.set(index, entry);
segment.count++;
assertSame(value, map.get(key, loader));
assertEquals(0, loader.getCount());
assertEquals(1, segment.count);
entry.clearKey();
assertNotSame(value, map.get(key, loader));
assertEquals(1, loader.getCount());
assertEquals(2, segment.count);
}
use of com.google.common.cache.TestingCacheLoaders.CountingLoader in project guava by hceylan.
the class LocalCacheTest method testComputeExpiredEntry.
public void testComputeExpiredEntry() throws ExecutionException {
CacheBuilder<Object, Object> builder = createCacheBuilder().expireAfterWrite(1, TimeUnit.NANOSECONDS);
CountingLoader loader = new CountingLoader();
LocalCache<Object, Object> map = makeLocalCache(builder);
assertEquals(0, loader.getCount());
Object key = new Object();
Object one = map.get(key, loader);
assertEquals(1, loader.getCount());
Object two = map.get(key, loader);
assertNotSame(one, two);
assertEquals(2, loader.getCount());
}
use of com.google.common.cache.TestingCacheLoaders.CountingLoader in project guava by google.
the class LocalCacheTest method testCompute.
// computation tests
public void testCompute() throws ExecutionException {
CountingLoader loader = new CountingLoader();
LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder());
assertEquals(0, loader.getCount());
Object key = new Object();
Object value = map.get(key, loader);
assertEquals(1, loader.getCount());
assertEquals(value, map.get(key, loader));
assertEquals(1, loader.getCount());
}
use of com.google.common.cache.TestingCacheLoaders.CountingLoader in project guava by google.
the class CacheLoadingTest method testReloadAfterSimulatedKeyReclamation.
public void testReloadAfterSimulatedKeyReclamation() throws ExecutionException {
CountingLoader countingLoader = new CountingLoader();
LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().concurrencyLevel(1).weakKeys().build(countingLoader);
Object key = new Object();
assertNotNull(cache.getUnchecked(key));
assertEquals(1, cache.size());
CacheTesting.simulateKeyReclamation(cache, key);
// this blocks if computation can't deal with partially-collected values
assertNotNull(cache.getUnchecked(key));
assertEquals(2, countingLoader.getCount());
CacheTesting.simulateKeyReclamation(cache, key);
cache.refresh(key);
checkNothingLogged();
assertEquals(3, countingLoader.getCount());
}
use of com.google.common.cache.TestingCacheLoaders.CountingLoader in project guava by google.
the class CacheLoadingTest method testReloadAfterValueReclamation.
public void testReloadAfterValueReclamation() throws InterruptedException, ExecutionException {
CountingLoader countingLoader = new CountingLoader();
LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().weakValues().build(countingLoader);
ConcurrentMap<Object, Object> map = cache.asMap();
int iterations = 10;
WeakReference<Object> ref = new WeakReference<Object>(null);
int expectedComputations = 0;
for (int i = 0; i < iterations; i++) {
// The entry should get garbage collected and recomputed.
Object oldValue = ref.get();
if (oldValue == null) {
expectedComputations++;
}
ref = new WeakReference<Object>(cache.getUnchecked(1));
oldValue = null;
Thread.sleep(i);
System.gc();
}
assertEquals(expectedComputations, countingLoader.getCount());
for (int i = 0; i < iterations; i++) {
// The entry should get garbage collected and recomputed.
Object oldValue = ref.get();
if (oldValue == null) {
expectedComputations++;
}
cache.refresh(1);
checkNothingLogged();
ref = new WeakReference<Object>(map.get(1));
oldValue = null;
Thread.sleep(i);
System.gc();
}
assertEquals(expectedComputations, countingLoader.getCount());
}
Aggregations