[Zope-dev] zope.index 3.5.2 broken

Shane Hathaway shane at hathawaymix.org
Mon Aug 3 13:07:31 EDT 2009


Marius Gedminas wrote:
> On Sun, Aug 02, 2009 at 08:48:24PM +0200, Andreas Jung wrote:
>> Hi,
>>
>> the doctests for zope.index 3.5.2 - as used in Zope 2.12  - fail badly:
>>
>> File
>> "/home/ajung/.buildout/eggs/zope.index-3.5.2-py2.6-linux-x86_64.egg/zope/index/text/tests/../textindex.txt",
>> line 143, in textindex.txt
>> Failed example:
>>     [(k, "%.4f" % v) for (k, v) in index2.apply("Zorro").items()] == result
> 
> I'm assuming items() returns a plain Python dictionary with string keys.
> 
> Python's string hashes return different valuesfor half of all the strings
> on 64-bit machines.  This influences the ordering of dictionary keys and
> some other things too (such as the sequence of random numbers you get if
> you use a string as the seed).
> 
> Add a sorted() on both sides and the test should pass.

Actually, those tests were plain insane and I've fixed them on the 
trunk.  I intend to make a new zope.index release today.

How insane were these tests?  Well, the author of the tests noticed that 
the C optimization produces different scores than the Python version, 
and compensated for that in a way that dramatically reduced readability. 
  Furthermore, the C code was producing incorrect results due to an 
unsafe optimization that accidentally took 32 bits of a Python float and 
pretended it was an integer.  The breakage only became obvious when we 
started taking 64 bits instead, leading to completely different results.

Shane


More information about the Zope-Dev mailing list