On Jan 18, 2012, at 12:44 58PM, Mariano Martinez Peck wrote: > > > On Wed, Jan 18, 2012 at 12:25 PM, Henrik Johansen > <henrik.s.johan...@veloxit.no> wrote: > > 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] > > > Indeed :) > now...even if that's correct, do you think there could be side effect in > other places?
Not any that won't merely magically start working the way you expect them to, like say (looking at the senders): SmallInteger maxVal +1 numberOfDigitsInBase: 0 Cheers, Henry