Search in sources :

Example 11 with CountingLoader

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);
}
Also used : CountingLoader(com.google.common.cache.TestingCacheLoaders.CountingLoader) ReferenceEntry(com.google.common.cache.LocalCache.ReferenceEntry)

Example 12 with CountingLoader

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());
}
Also used : CountingLoader(com.google.common.cache.TestingCacheLoaders.CountingLoader)

Example 13 with CountingLoader

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());
}
Also used : CountingLoader(com.google.common.cache.TestingCacheLoaders.CountingLoader)

Example 14 with CountingLoader

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());
}
Also used : CountingLoader(com.google.common.cache.TestingCacheLoaders.CountingLoader)

Example 15 with CountingLoader

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());
}
Also used : CountingLoader(com.google.common.cache.TestingCacheLoaders.CountingLoader) WeakReference(java.lang.ref.WeakReference)

Aggregations

CountingLoader (com.google.common.cache.TestingCacheLoaders.CountingLoader)18 ReferenceEntry (com.google.common.cache.LocalCache.ReferenceEntry)6 WeakReference (java.lang.ref.WeakReference)2 Random (java.util.Random)2