On Jan 18, 2012, at 12:14 47PM, Mariano Martinez Peck wrote:

> Well....it seems I found the problem. And in fact, it has alredy been solved 
> by Levente in Squeak...I waste so many hours...and the fix was there..
> 
> So, can you try changing to
> 
> sizeFor: numberOfElements
>     "Return the minimum capacity of a dictionary that can hold 
> numberOfElements elements. At least 25% of the array must be empty and the 
> return value must be a power of 2."
> 
>     ^(numberOfElements * 4 // 3) asLargerPowerOfTwo max: 1
> 
> 
> And see if it works?  it works here…

It should not be necessary.
The real bug is that Integer >> isPowerOfTwo does not check for the edge case:

0 isPowerOfTwo true

A small fix:

Integer >> #isPowerOfTwo
        "Return true if the receiver is an integral power of two."
        ^ self ~= 0 and: [(self bitAnd: self-1) = 0]

Cheers,
Henry

Reply via email to