aboutsummaryrefslogtreecommitdiffstats
path: root/guava-tests/test/com/google/common/cache/LocalCacheTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava-tests/test/com/google/common/cache/LocalCacheTest.java')
-rw-r--r--guava-tests/test/com/google/common/cache/LocalCacheTest.java112
1 files changed, 34 insertions, 78 deletions
diff --git a/guava-tests/test/com/google/common/cache/LocalCacheTest.java b/guava-tests/test/com/google/common/cache/LocalCacheTest.java
index 731de62..7f926e3 100644
--- a/guava-tests/test/com/google/common/cache/LocalCacheTest.java
+++ b/guava-tests/test/com/google/common/cache/LocalCacheTest.java
@@ -30,6 +30,7 @@ import static com.google.common.collect.Maps.immutableEntry;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.easymock.EasyMock.createMock;
import com.google.common.base.Equivalence;
import com.google.common.base.Ticker;
@@ -252,7 +253,7 @@ public class LocalCacheTest extends TestCase {
public void testSetMaximumSize() {
// vary maximumSize wrt concurrencyLevel
- for (int maxSize = 1; maxSize < 100; maxSize++) {
+ for (int maxSize = 1; maxSize < 8; maxSize++) {
checkMaximumSize(1, 8, maxSize);
checkMaximumSize(2, 8, maxSize);
checkMaximumSize(4, 8, maxSize);
@@ -280,8 +281,6 @@ public class LocalCacheTest extends TestCase {
.initialCapacity(initialCapacity)
.maximumSize(maxSize));
long totalCapacity = 0;
- assertTrue("segments=" + map.segments.length + ", maxSize=" + maxSize,
- map.segments.length <= Math.max(1, maxSize / 10));
for (int i = 0; i < map.segments.length; i++) {
totalCapacity += map.segments[i].maxSegmentWeight;
}
@@ -292,8 +291,6 @@ public class LocalCacheTest extends TestCase {
.initialCapacity(initialCapacity)
.maximumWeight(maxSize)
.weigher(constantWeigher(1)));
- assertTrue("segments=" + map.segments.length + ", maxSize=" + maxSize,
- map.segments.length <= Math.max(1, maxSize / 10));
totalCapacity = 0;
for (int i = 0; i < map.segments.length; i++) {
totalCapacity += map.segments[i].maxSegmentWeight;
@@ -485,7 +482,7 @@ public class LocalCacheTest extends TestCase {
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value);
+ DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
entry.setValueReference(valueRef);
table.set(index, entry);
segment.count++;
@@ -514,7 +511,7 @@ public class LocalCacheTest extends TestCase {
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value);
+ DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
entry.setValueReference(valueRef);
table.set(index, entry);
segment.count++;
@@ -713,11 +710,11 @@ public class LocalCacheTest extends TestCase {
// already loading
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> valueRef = DummyValueReference.create(null);
+ DummyValueReference<Object, Object> valueRef = DummyValueReference.create(null, entry);
valueRef.setLoading(true);
entry.setValueReference(valueRef);
table.set(index, entry);
- assertNull(segment.refresh(key, hash, identityLoader(), false));
+ assertNull(segment.refresh(key, hash, identityLoader()));
}
// Removal listener tests
@@ -822,7 +819,7 @@ public class LocalCacheTest extends TestCase {
QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
.concurrencyLevel(1)
- .expireAfterWrite(3, TimeUnit.NANOSECONDS)
+ .expireAfterWrite(2, TimeUnit.NANOSECONDS)
.ticker(ticker)
.removalListener(listener));
assertTrue(listener.isEmpty());
@@ -1051,7 +1048,7 @@ public class LocalCacheTest extends TestCase {
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue);
+ DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
entry.setValueReference(oldValueRef);
// no entry
@@ -1095,7 +1092,7 @@ public class LocalCacheTest extends TestCase {
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue);
+ DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
entry.setValueReference(oldValueRef);
// no entry
@@ -1143,7 +1140,7 @@ public class LocalCacheTest extends TestCase {
// cleared
ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
- DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue);
+ DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
entry.setValueReference(oldValueRef);
assertSame(oldValue, segment.get(key, hash));
oldValueRef.clear();
@@ -1175,7 +1172,7 @@ public class LocalCacheTest extends TestCase {
// cleared
ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
- DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue);
+ DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
entry.setValueReference(oldValueRef);
assertSame(oldValue, segment.get(key, hash));
oldValueRef.clear();
@@ -1271,7 +1268,7 @@ public class LocalCacheTest extends TestCase {
// replaced
Object value4 = new Object();
- DummyValueReference<Object, Object> value3Ref = DummyValueReference.create(value3);
+ DummyValueReference<Object, Object> value3Ref = DummyValueReference.create(value3, entry);
valueRef = new LoadingValueReference<Object, Object>(value3Ref);
entry.setValueReference(valueRef);
table.set(index, entry);
@@ -1311,7 +1308,7 @@ public class LocalCacheTest extends TestCase {
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue);
+ DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
entry.setValueReference(oldValueRef);
// no entry
@@ -1351,7 +1348,7 @@ public class LocalCacheTest extends TestCase {
int index = hash & (table.length() - 1);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue);
+ DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
entry.setValueReference(oldValueRef);
// no entry
@@ -1420,49 +1417,6 @@ public class LocalCacheTest extends TestCase {
}
}
- public void testGetCausesExpansion() throws ExecutionException {
- for (int count = 1; count <= 100; count++) {
- LocalCache<Object, Object> map =
- makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1));
- Segment<Object, Object> segment = map.segments[0];
- assertEquals(1, segment.table.length());
-
- for (int i = 0; i < count; i++) {
- Object key = new Object();
- final Object value = new Object();
- segment.get(key, key.hashCode(), new CacheLoader<Object, Object>() {
- @Override
- public Object load(Object key) {
- return value;
- }
- });
- }
- assertEquals(count, segment.count);
- assertTrue(count <= segment.threshold);
- assertTrue(count <= (segment.table.length() * 3 / 4));
- assertTrue(count > (segment.table.length() * 3 / 8));
- }
- }
-
- public void testPutCausesExpansion() {
- for (int count = 1; count <= 100; count++) {
- LocalCache<Object, Object> map =
- makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1));
- Segment<Object, Object> segment = map.segments[0];
- assertEquals(1, segment.table.length());
-
- for (int i = 0; i < count; i++) {
- Object key = new Object();
- Object value = new Object();
- segment.put(key, key.hashCode(), value, true);
- }
- assertEquals(count, segment.count);
- assertTrue(count <= segment.threshold);
- assertTrue(count <= (segment.table.length() * 3 / 4));
- assertTrue(count > (segment.table.length() * 3 / 8));
- }
- }
-
public void testReclaimKey() {
CountingRemovalListener<Object, Object> listener = countingRemovalListener();
LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
@@ -1578,7 +1532,7 @@ public class LocalCacheTest extends TestCase {
}
// chain all entries together as we only have a single bucket
entry = DummyEntry.create(key, hash, entry);
- ValueReference<Object, Object> valueRef = DummyValueReference.create(value);
+ ValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
entry.setValueReference(valueRef);
}
segment.table.set(0, entry);
@@ -1736,7 +1690,7 @@ public class LocalCacheTest extends TestCase {
Object value = new Object();
int hash = map.hash(key);
DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
- DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value);
+ DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
entry.setValueReference(valueRef);
// reclaim absent
@@ -1758,7 +1712,7 @@ public class LocalCacheTest extends TestCase {
// reclaim wrong value reference
table.set(0, entry);
- DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value);
+ DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value, entry);
entry.setValueReference(otherValueRef);
assertFalse(segment.reclaimValue(key, hash, valueRef));
assertEquals(1, listener.getCount());
@@ -1799,7 +1753,7 @@ public class LocalCacheTest extends TestCase {
// active
Object value = new Object();
- DummyValueReference<Object, Object> previousRef = DummyValueReference.create(value);
+ DummyValueReference<Object, Object> previousRef = DummyValueReference.create(value, entry);
valueRef = new LoadingValueReference<Object, Object>(previousRef);
entry.setValueReference(valueRef);
table.set(0, entry);
@@ -1810,7 +1764,7 @@ public class LocalCacheTest extends TestCase {
// wrong value reference
table.set(0, entry);
- DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value);
+ DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value, entry);
entry.setValueReference(otherValueRef);
assertFalse(segment.removeLoadingValue(key, hash, valueRef));
entry.setValueReference(valueRef);
@@ -2085,7 +2039,7 @@ public class LocalCacheTest extends TestCase {
LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
.concurrencyLevel(1)
.ticker(ticker)
- .expireAfterWrite(2, TimeUnit.NANOSECONDS));
+ .expireAfterWrite(1, TimeUnit.NANOSECONDS));
Segment<Object, Object> segment = map.segments[0];
Object key = new Object();
@@ -2124,7 +2078,7 @@ public class LocalCacheTest extends TestCase {
LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
.concurrencyLevel(1)
.ticker(ticker)
- .expireAfterAccess(2, TimeUnit.NANOSECONDS));
+ .expireAfterAccess(1, TimeUnit.NANOSECONDS));
Segment<Object, Object> segment = map.segments[0];
Object key = new Object();
@@ -2517,7 +2471,7 @@ public class LocalCacheTest extends TestCase {
private static <K, V> DummyEntry<K, V> createDummyEntry(
K key, int hash, V value, ReferenceEntry<K, V> next) {
DummyEntry<K, V> entry = DummyEntry.create(key, hash, next);
- DummyValueReference<K, V> valueRef = DummyValueReference.create(value);
+ DummyValueReference<K, V> valueRef = DummyValueReference.create(value, entry);
entry.setValueReference(valueRef);
return entry;
}
@@ -2642,23 +2596,26 @@ public class LocalCacheTest extends TestCase {
}
static class DummyValueReference<K, V> implements ValueReference<K, V> {
+ final ReferenceEntry<K, V> entry;
private V value;
boolean loading = false;
- public DummyValueReference() {
+ public DummyValueReference(ReferenceEntry<K, V> entry) {
+ this(null, entry);
this.loading = true;
}
- public DummyValueReference(V value) {
+ public DummyValueReference(V value, ReferenceEntry<K, V> entry) {
this.value = value;
+ this.entry = entry;
}
- public static <K, V> DummyValueReference<K, V> create(V value) {
- return new DummyValueReference<K, V>(value);
+ public static <K, V> DummyValueReference<K, V> create(V value, ReferenceEntry<K, V> entry) {
+ return new DummyValueReference<K, V>(value, entry);
}
- public static <K, V> DummyValueReference<K, V> createLoading() {
- return new DummyValueReference<K, V>();
+ public static <K, V> DummyValueReference<K, V> createLoading(ReferenceEntry<K, V> entry) {
+ return new DummyValueReference<K, V>(entry);
}
@Override
@@ -2673,13 +2630,12 @@ public class LocalCacheTest extends TestCase {
@Override
public ReferenceEntry<K, V> getEntry() {
- return null;
+ return entry;
}
@Override
- public ValueReference<K, V> copyFor(
- ReferenceQueue<V> queue, V value, ReferenceEntry<K, V> entry) {
- return this;
+ public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+ return new DummyValueReference<K, V>(value, entry);
}
public void setLoading(boolean loading) {