项目:codebuff
文件:Interners.java
@Override
public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,Dummy> entry = map.getEntry(sample);
if (entry != null) {
E canonical = entry.getKey();
if (canonical != null) { // only matters if weak/soft keys are used
return canonical;
}
}
// didn't see it,trying to put it instead...
Dummy sneaky = map.putIfAbsent(sample,Dummy.VALUE);
if (sneaky == null) {
return sample;
} else {
/* Someone beat us to it! Trying again...
*
* Technically this loop not guaranteed to terminate,so theoretically (extremely
* unlikely) this thread might starve,but even then,there is always going to be another
* thread doing progress here.
*/}
}
}
项目:codebuff
文件:Interners.java
@Override
public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:bts
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:j2objc
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:guava-libraries
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testRemovalListener_collected() {
QueuingRemovalListener<Object,Object> listener =
new QueuingRemovalListener<Object,Object>();
MapMakerInternalMap<Object,Object> map = makeMap(createMapMaker()
.concurrencyLevel(1)
.softValues()
.removalListener(listener));
Segment<Object,Object> segment = map.segments[0];
assertTrue(listener.isEmpty());
Object one = new Object();
Object two = new Object();
Object three = new Object();
map.put(one,two);
map.put(two,three);
assertTrue(listener.isEmpty());
int hash = map.hash(one);
ReferenceEntry<Object,Object> entry = segment.getEntry(one,hash);
map.reclaimValue(entry.getValueReference());
assertNotified(listener,one,two,RemovalCause.COLLECTED);
assertTrue(listener.isEmpty());
}
项目:VectorAttackScanner
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:My-Wallet-Android
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:cnGuava
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:org.openntf.domino
文件:Interners.java
@Override public E intern(E sample) {
while (true) {
// trying to read the canonical...
ReferenceEntry<E,there is always going to be another
* thread doing progress here.
*/
}
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testNewEntry() {
for (MapMaker maker : allEntryTypeMakers()) {
MapMakerInternalMap<Object,Object> map = makeMap(maker);
Object keyOne = new Object();
Object valueOne = new Object();
int hashOne = map.hash(keyOne);
ReferenceEntry<Object,Object> entryOne = map.newEntry(keyOne,hashOne,null);
ValueReference<Object,Object> valueRefOne = map.newValueReference(entryOne,valueOne);
assertSame(valueOne,valueRefOne.get());
entryOne.setValueReference(valueRefOne);
assertSame(keyOne,entryOne.getKey());
assertEquals(hashOne,entryOne.getHash());
assertNull(entryOne.getNext());
assertSame(valueRefOne,entryOne.getValueReference());
Object keyTwo = new Object();
Object valueTwo = new Object();
int hashTwo = map.hash(keyTwo);
ReferenceEntry<Object,Object> entryTwo = map.newEntry(keyTwo,hashTwo,entryOne);
ValueReference<Object,Object> valueRefTwo = map.newValueReference(entryTwo,valueTwo);
assertSame(valueTwo,valueRefTwo.get());
entryTwo.setValueReference(valueRefTwo);
assertSame(keyTwo,entryTwo.getKey());
assertEquals(hashTwo,entryTwo.getHash());
assertSame(entryOne,entryTwo.getNext());
assertSame(valueRefTwo,entryTwo.getValueReference());
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testcopyEntry() {
for (MapMaker maker : allEntryTypeMakers()) {
MapMakerInternalMap<Object,null);
entryOne.setValueReference(map.newValueReference(entryOne,valueOne));
Object keyTwo = new Object();
Object valueTwo = new Object();
int hashTwo = map.hash(keyTwo);
ReferenceEntry<Object,entryOne);
entryTwo.setValueReference(map.newValueReference(entryTwo,valueTwo));
if (map.evictsBySize()) {
MapMakerInternalMap.connectevictables(entryOne,entryTwo);
}
if (map.expires()) {
MapMakerInternalMap.connectExpirables(entryOne,entryTwo);
}
assertConnected(map,entryOne,entryTwo);
ReferenceEntry<Object,Object> copyOne = map.copyEntry(entryOne,null);
assertSame(keyOne,entryOne.getHash());
assertNull(entryOne.getNext());
assertSame(valueOne,copyOne.getValueReference().get());
assertConnected(map,copyOne,Object> copyTwo = map.copyEntry(entryTwo,copyOne);
assertSame(keyTwo,copyTwo.getKey());
assertEquals(hashTwo,copyTwo.getHash());
assertSame(copyOne,copyTwo.getNext());
assertSame(valueTwo,copyTwo.getValueReference().get());
assertConnected(map,copyTwo);
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentReplace() {
MapMakerInternalMap<Object,Object> map =
makeMap(createMapMaker().concurrencyLevel(1).expireAfteraccess(99999,SECONDS));
Segment<Object,Object> segment = map.segments[0];
// Todo(fry): check recency ordering
Object key = new Object();
int hash = map.hash(key);
Object oldValue = new Object();
Object newValue = new Object();
atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
int index = hash & (table.length() - 1);
DummyEntry<Object,Object> entry = DummyEntry.create(key,hash,null);
DummyValueReference<Object,Object> oldValueRef = DummyValueReference.create(oldValue,entry);
entry.setValueReference(oldValueRef);
// no entry
assertNull(segment.replace(key,newValue));
assertEquals(0,segment.count);
// same key
table.set(index,entry);
segment.count++;
assertEquals(1,segment.count);
assertSame(oldValue,segment.get(key,hash));
assertSame(oldValue,segment.replace(key,newValue));
assertEquals(1,segment.count);
assertSame(newValue,hash));
// cleared
entry.setValueReference(oldValueRef);
assertSame(oldValue,hash));
oldValueRef.clear(null);
assertNull(segment.replace(key,segment.count);
assertNull(segment.get(key,hash));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentPut() {
MapMakerInternalMap<Object,Object> segment = map.segments[0];
// Todo(fry): check recency ordering
Object key = new Object();
int hash = map.hash(key);
Object oldValue = new Object();
Object newValue = new Object();
// no entry
assertEquals(0,segment.count);
assertNull(segment.put(key,oldValue,false));
assertEquals(1,segment.count);
// same key
assertSame(oldValue,segment.put(key,newValue,hash));
// cleared
ReferenceEntry<Object,Object> entry = segment.getEntry(key,hash);
DummyValueReference<Object,entry);
entry.setValueReference(oldValueRef);
assertSame(oldValue,hash));
oldValueRef.clear(null);
assertNull(segment.put(key,hash));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentPutIfAbsent() {
MapMakerInternalMap<Object,true));
assertEquals(1,hash));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentRemove() {
MapMakerInternalMap<Object,Object> map = makeMap(createMapMaker().concurrencyLevel(1));
Segment<Object,Object> segment = map.segments[0];
Object key = new Object();
int hash = map.hash(key);
Object oldValue = new Object();
atomicreferenceArray<ReferenceEntry<Object,entry);
entry.setValueReference(oldValueRef);
// no entry
assertEquals(0,segment.count);
assertNull(segment.remove(key,hash));
assertEquals(0,segment.remove(key,hash));
// cleared
table.set(index,hash));
oldValueRef.clear(null);
assertNull(segment.remove(key,hash));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testExpand() {
MapMakerInternalMap<Object,Object> map =
makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1));
Segment<Object,Object> segment = map.segments[0];
assertEquals(1,segment.table.length());
// manually add elements to avoid expansion
int originalCount = 1024;
ReferenceEntry<Object,Object> entry = null;
for (int i = 0; i < originalCount; i++) {
Object key = new Object();
Object value = new Object();
int hash = map.hash(key);
// chain all entries together as we only have a single bucket
entry = map.newEntry(key,entry);
ValueReference<Object,Object> valueRef = map.newValueReference(entry,value);
entry.setValueReference(valueRef);
}
segment.table.set(0,entry);
segment.count = originalCount;
ImmutableMap<Object,Object> originalMap = ImmutableMap.copyOf(map);
assertEquals(originalCount,originalMap.size());
assertEquals(originalMap,map);
for (int i = 1; i <= originalCount * 2; i *= 2) {
if (i > 1) {
segment.expand();
}
assertEquals(i,segment.table.length());
assertEquals(originalCount,countLiveEntries(map));
assertEquals(originalCount,segment.count);
assertEquals(originalMap,map);
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
private static <K,V> int countLiveEntries(MapMakerInternalMap<K,V> map) {
int result = 0;
for (Segment<K,V> segment : map.segments) {
atomicreferenceArray<ReferenceEntry<K,V>> table = segment.table;
for (int i = 0; i < table.length(); i++) {
for (ReferenceEntry<K,V> e = table.get(i); e != null; e = e.getNext()) {
if (map.isLive(e)) {
result++;
}
}
}
}
return result;
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testClear() {
MapMakerInternalMap<Object,Object> map = makeMap(createMapMaker()
.concurrencyLevel(1)
.initialCapacity(1)
.maximumSize(SMALL_MAX_SIZE)
.expireAfterWrite(99999,Object> segment = map.segments[0];
atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
assertEquals(1,table.length());
Object key = new Object();
Object value = new Object();
int hash = map.hash(key);
DummyEntry<Object,Object> entry = createDummyEntry(key,value,null);
segment.recordWrite(entry);
segment.table.set(0,entry);
segment.readCount.incrementAndGet();
segment.count = 1;
assertSame(entry,table.get(0));
assertSame(entry,segment.evictionQueue.peek());
assertSame(entry,segment.expirationQueue.peek());
segment.clear();
assertNull(table.get(0));
assertTrue(segment.evictionQueue.isEmpty());
assertTrue(segment.expirationQueue.isEmpty());
assertEquals(0,segment.readCount.get());
assertEquals(0,segment.count);
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testRemoveEntry() {
MapMakerInternalMap<Object,SECONDS)
.removalListener(new CountingRemovalListener<Object,Object>()));
Segment<Object,null);
// remove absent
assertFalse(segment.removeEntry(entry,RemovalCause.COLLECTED));
// remove live
segment.recordWrite(entry);
table.set(0,entry);
segment.count = 1;
assertTrue(segment.removeEntry(entry,RemovalCause.COLLECTED));
assertNotificationEnqueued(map,key,value);
assertTrue(map.removalNotificationQueue.isEmpty());
assertFalse(segment.evictionQueue.contains(entry));
assertFalse(segment.expirationQueue.contains(entry));
assertEquals(0,segment.count);
assertNull(table.get(0));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
项目:guava-libraries
文件:MapMakerInternalMapTest.java
static <K,V> void checkevictionQueues(MapMakerInternalMap<K,V>> readOrder,V>> writeOrder) {
if (map.evictsBySize()) {
assertSameEntries(readOrder,ImmutableList.copyOf(segment.evictionQueue));
}
if (map.expiresAfteraccess()) {
assertSameEntries(readOrder,ImmutableList.copyOf(segment.expirationQueue));
}
if (map.expiresAfterWrite()) {
assertSameEntries(writeOrder,ImmutableList.copyOf(segment.expirationQueue));
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
private static <K,V> void assertSameEntries(List<ReferenceEntry<K,V>> expectedEntries,V>> actualEntries) {
int size = expectedEntries.size();
assertEquals(size,actualEntries.size());
for (int i = 0; i < size; i++) {
ReferenceEntry<K,V> expectedEntry = expectedEntries.get(0);
ReferenceEntry<K,V> actualEntry = actualEntries.get(0);
assertSame(expectedEntry.getKey(),actualEntry.getKey());
assertSame(expectedEntry.getValueReference().get(),actualEntry.getValueReference().get());
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testevictEntries() {
int maxSize = 10;
MapMakerInternalMap<Object,Object> map =
makeMap(createMapMaker().concurrencyLevel(1).maximumSize(maxSize));
Segment<Object,Object> segment = map.segments[0];
// manually add elements to avoid eviction
int originalCount = 1024;
ReferenceEntry<Object,Object> entry = null;
LinkedHashMap<Object,Object> originalMap = Maps.newLinkedHashMap();
for (int i = 0; i < originalCount; i++) {
Object key = new Object();
Object value = new Object();
atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
int hash = map.hash(key);
int index = hash & (table.length() - 1);
ReferenceEntry<Object,Object> first = table.get(index);
entry = map.newEntry(key,first);
ValueReference<Object,value);
entry.setValueReference(valueRef);
segment.recordWrite(entry);
table.set(index,entry);
originalMap.put(key,value);
}
segment.count = originalCount;
assertEquals(originalCount,map);
for (int i = maxSize - 1; i < originalCount; i++) {
assertTrue(segment.evictEntries());
Iterator<Object> it = originalMap.keySet().iterator();
it.next();
it.remove();
assertEquals(originalMap,map);
}
assertFalse(segment.evictEntries());
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testDrainKeyReferenceQueueOnWrite() {
for (MapMaker maker : allkeyvalueStrengthMakers()) {
MapMakerInternalMap<Object,Object> map =
makeMap(maker.concurrencyLevel(1));
if (map.usesKeyReferences()) {
Segment<Object,Object> segment = map.segments[0];
Object keyOne = new Object();
int hashOne = map.hash(keyOne);
Object valueOne = new Object();
Object keyTwo = new Object();
Object valueTwo = new Object();
map.put(keyOne,valueOne);
ReferenceEntry<Object,Object> entry = segment.getEntry(keyOne,hashOne);
@SuppressWarnings("unchecked")
Reference<Object> reference = (Reference) entry;
reference.enqueue();
map.put(keyTwo,valueTwo);
assertFalse(map.containsKey(keyOne));
assertFalse(map.containsValue(valueOne));
assertNull(map.get(keyOne));
assertEquals(1,map.size());
assertNull(segment.keyReferenceQueue.poll());
}
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testDrainValueReferenceQueueOnWrite() {
for (MapMaker maker : allkeyvalueStrengthMakers()) {
MapMakerInternalMap<Object,Object> map =
makeMap(maker.concurrencyLevel(1));
if (map.usesValueReferences()) {
Segment<Object,hashOne);
ValueReference<Object,Object> valueReference = entry.getValueReference();
@SuppressWarnings("unchecked")
Reference<Object> reference = (Reference) valueReference;
reference.enqueue();
map.put(keyTwo,map.size());
assertNull(segment.valueReferenceQueue.poll());
}
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testDrainKeyReferenceQueueOnRead() {
for (MapMaker maker : allkeyvalueStrengthMakers()) {
MapMakerInternalMap<Object,Object> segment = map.segments[0];
Object keyOne = new Object();
int hashOne = map.hash(keyOne);
Object valueOne = new Object();
Object keyTwo = new Object();
map.put(keyOne,hashOne);
@SuppressWarnings("unchecked")
Reference<Object> reference = (Reference) entry;
reference.enqueue();
for (int i = 0; i < SMALL_MAX_SIZE; i++) {
map.get(keyTwo);
}
assertFalse(map.containsKey(keyOne));
assertFalse(map.containsValue(valueOne));
assertNull(map.get(keyOne));
assertEquals(0,map.size());
assertNull(segment.keyReferenceQueue.poll());
}
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testDrainValueReferenceQueueOnRead() {
for (MapMaker maker : allkeyvalueStrengthMakers()) {
MapMakerInternalMap<Object,Object> valueReference = entry.getValueReference();
@SuppressWarnings("unchecked")
Reference<Object> reference = (Reference) valueReference;
reference.enqueue();
for (int i = 0; i < SMALL_MAX_SIZE; i++) {
map.get(keyTwo);
}
assertFalse(map.containsKey(keyOne));
assertFalse(map.containsValue(valueOne));
assertNull(map.get(keyOne));
assertEquals(0,map.size());
assertNull(segment.valueReferenceQueue.poll());
}
}
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
private static <K,V> DummyEntry<K,V> createDummyEntry(
K key,int hash,V value,V> next) {
DummyEntry<K,V> entry = DummyEntry.create(key,next);
DummyValueReference<K,V> valueRef = DummyValueReference.create(value,entry);
entry.setValueReference(valueRef);
return entry;
}
public void testComputePartiallyCollectedKey() throws ExecutionException {
MapMaker maker = createMapMaker().concurrencyLevel(1);
CountingFunction computingFunction = new CountingFunction();
ComputingConcurrentHashMap<Object,Object> map = makeComputingMap(maker,computingFunction);
Segment<Object,Object>> table = segment.table;
assertEquals(0,computingFunction.getCount());
Object key = new Object();
int hash = map.hash(key);
Object value = new Object();
int index = hash & (table.length() - 1);
DummyEntry<Object,Object> valueRef = DummyValueReference.create(value,entry);
entry.setValueReference(valueRef);
table.set(index,entry);
segment.count++;
assertSame(value,map.getorCompute(key));
assertEquals(0,computingFunction.getCount());
assertEquals(1,segment.count);
entry.clearKey();
assertNotSame(value,map.getorCompute(key));
assertEquals(1,computingFunction.getCount());
assertEquals(2,segment.count);
}
public void testComputePartiallyCollectedValue() throws ExecutionException {
MapMaker maker = createMapMaker().concurrencyLevel(1);
CountingFunction computingFunction = new CountingFunction();
ComputingConcurrentHashMap<Object,segment.count);
valueRef.clear(null);
assertNotSame(value,segment.count);
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentGetAndContains() {
MapMakerInternalMap<Object,Object> segment = map.segments[0];
// Todo(fry): check recency ordering
Object key = new Object();
int hash = map.hash(key);
Object value = new Object();
atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
int index = hash & (table.length() - 1);
ReferenceEntry<Object,Object> entry = map.newEntry(key,null);
ValueReference<Object,value);
entry.setValueReference(valueRef);
assertNull(segment.get(key,hash));
// count == 0
table.set(index,entry);
assertNull(segment.get(key,hash));
assertFalse(segment.containsKey(key,hash));
assertFalse(segment.containsValue(value));
// count == 1
segment.count++;
assertSame(value,hash));
assertTrue(segment.containsKey(key,hash));
assertTrue(segment.containsValue(value));
// don't see absent values Now that count > 0
assertNull(segment.get(new Object(),hash));
// null key
DummyEntry<Object,Object> nullEntry = DummyEntry.create(null,entry);
Object nullValue = new Object();
ValueReference<Object,Object> nullValueRef = map.newValueReference(nullEntry,nullValue);
nullEntry.setValueReference(nullValueRef);
table.set(index,nullEntry);
// skip the null key
assertSame(value,hash));
assertTrue(segment.containsValue(value));
assertFalse(segment.containsValue(nullValue));
// hash collision
DummyEntry<Object,Object> dummy = DummyEntry.create(new Object(),entry);
Object dummyValue = new Object();
ValueReference<Object,Object> dummyValueRef = map.newValueReference(dummy,dummyValue);
dummy.setValueReference(dummyValueRef);
table.set(index,dummy);
assertSame(value,hash));
assertTrue(segment.containsValue(value));
assertTrue(segment.containsValue(dummyValue));
// key collision
dummy = DummyEntry.create(key,entry);
dummyValue = new Object();
dummyValueRef = map.newValueReference(dummy,dummy);
// returns the most recent entry
assertSame(dummyValue,hash));
assertTrue(segment.containsValue(value));
assertTrue(segment.containsValue(dummyValue));
// expired
dummy.setExpirationTime(0);
assertNull(segment.get(key,hash));
assertTrue(segment.containsValue(value));
assertFalse(segment.containsValue(dummyValue));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentReplaceValue() {
MapMakerInternalMap<Object,entry);
entry.setValueReference(oldValueRef);
// no entry
assertFalse(segment.replace(key,segment.count);
// same value
table.set(index,hash));
assertTrue(segment.replace(key,hash));
// different value
assertFalse(segment.replace(key,hash));
oldValueRef.clear(null);
assertFalse(segment.replace(key,hash));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testSegmentRemoveValue() {
MapMakerInternalMap<Object,Object> segment = map.segments[0];
Object key = new Object();
int hash = map.hash(key);
Object oldValue = new Object();
Object newValue = new Object();
atomicreferenceArray<ReferenceEntry<Object,hash));
assertTrue(segment.remove(key,oldValue));
assertEquals(0,hash));
// different value
table.set(index,hash));
assertFalse(segment.remove(key,hash));
// cleared
assertSame(oldValue,hash));
oldValueRef.clear(null);
assertFalse(segment.remove(key,hash));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testReclaimKey() {
CountingRemovalListener<Object,Object> listener =
new CountingRemovalListener<Object,SECONDS)
.removalListener(listener));
Segment<Object,table.length());
// create 3 objects and chain them together
Object keyOne = new Object();
Object valueOne = new Object();
int hashOne = map.hash(keyOne);
DummyEntry<Object,Object> entryOne = createDummyEntry(keyOne,valueOne,null);
Object keyTwo = new Object();
Object valueTwo = new Object();
int hashTwo = map.hash(keyTwo);
DummyEntry<Object,Object> entryTwo = createDummyEntry(keyTwo,valueTwo,entryOne);
Object keyThree = new Object();
Object valueThree = new Object();
int hashThree = map.hash(keyThree);
DummyEntry<Object,Object> entryThree =
createDummyEntry(keyThree,hashThree,valueThree,entryTwo);
// absent
assertEquals(0,listener.getCount());
assertFalse(segment.reclaimKey(entryOne,hashOne));
assertEquals(0,listener.getCount());
table.set(0,entryOne);
assertFalse(segment.reclaimKey(entryTwo,hashTwo));
assertEquals(0,entryTwo);
assertFalse(segment.reclaimKey(entryThree,hashThree));
assertEquals(0,listener.getCount());
// present
table.set(0,entryOne);
segment.count = 1;
assertTrue(segment.reclaimKey(entryOne,hashOne));
assertEquals(1,listener.getCount());
assertSame(keyOne,listener.getLastevictedKey());
assertSame(valueOne,listener.getLastevictedValue());
assertTrue(map.removalNotificationQueue.isEmpty());
assertFalse(segment.evictionQueue.contains(entryOne));
assertFalse(segment.expirationQueue.contains(entryOne));
assertEquals(0,segment.count);
assertNull(table.get(0));
}
项目:guava-libraries
文件:MapMakerInternalMapTest.java
public void testRemoveFromChain() {
MapMakerInternalMap<Object,Object> segment = map.segments[0];
// create 3 objects and chain them together
Object keyOne = new Object();
Object valueOne = new Object();
int hashOne = map.hash(keyOne);
DummyEntry<Object,entryTwo);
// alone
assertNull(segment.removeFromChain(entryOne,entryOne));
// head
assertSame(entryOne,segment.removeFromChain(entryTwo,entryTwo));
// middle
ReferenceEntry<Object,Object> newFirst = segment.removeFromChain(entryThree,entryTwo);
assertSame(keyThree,newFirst.getKey());
assertSame(valueThree,newFirst.getValueReference().get());
assertEquals(hashThree,newFirst.getHash());
assertSame(entryOne,newFirst.getNext());
// tail (remaining entries are copied in reverse order)
newFirst = segment.removeFromChain(entryThree,entryOne);
assertSame(keyTwo,newFirst.getKey());
assertSame(valueTwo,newFirst.getValueReference().get());
assertEquals(hashTwo,newFirst.getHash());
newFirst = newFirst.getNext();
assertSame(keyThree,newFirst.getHash());
assertNull(newFirst.getNext());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。