On Tue, 2004-03-23 at 23:01, Stephen Colebourne wrote:
> I can't spot the problem, so I'm posting it in case someone else wants to
> take a look and tell me my stupid mistake ;-)
Sorry this isn't expressed as unit test but just in case this is enough
to go on I've posted it. I added a System.out.println to
testPurgeValues() just before the invocation of isEmpty()
System.out.println("testPurgeValues: before isEmpty: " + iterations );
testMap.isEmpty();
then two more in purge(Reference) to get this output
[junit] testPurgeValues: before isEmpty: 1
[junit] purge()
[junit] purge(Reference)
[junit] purge(Reference): entry: null
[junit] testPurgeValues: before isEmpty: 2
[junit] purge()
[junit] testPurgeValues: before isEmpty: 3
[junit] purge()
[junit] testPurgeValues: before isEmpty: 4
[junit] purge()
[junit] testPurgeValues: before isEmpty: 5
So purge correctly invokes purge(Reference) but purge(Reference) gets
null for entry and never enters the while block.
private void purge(Reference ref) {
System.out.println("purge(Reference)");
// The hashCode of the reference is the hashCode of the
// mapping key, even if the reference refers to the
// mapping value...
int hash = hash(ref);
int index = hashIndex(hash, data.length);
HashEntry previous = null;
HashEntry entry = data[index];
System.out.println("purge(Reference): entry: " + entry);
while (entry != null) {
if (((ReferenceEntry) entry).purge(ref)) {
if (previous == null) {
data[index] = entry.next;
} else {
previous.next = entry.next;
}
this.size--;
return;
}
previous = entry;
entry = entry.next;
}
}
-Janek
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]