[TIP] testing and hash values
Ned Batchelder
ned at nedbatchelder.com
Sun Sep 29 12:20:06 PDT 2013
On 9/29/13 12:56 PM, Chris Jerdonek wrote:
> I have a question about the behavior of hashing prior to Python 3.3
> (when hash randomization was turned on by default [1]).
>
> I know that in earlier versions Python never made any guarantees about
> hash values and their effect on dictionary key ordering, etc [2]. But
> for testing purposes, in practice, to what extent does hashing behave
> the same across systems and Python versions prior to Python 3.3? For
> example, the note at [2] says that "it typically varies between 32-bit
> and 64-bit builds."
>
> I'm asking because I'm curious about the extent to which tests that
> unknowingly depend on hash values are reproducible across systems and
> versions.
Tests like that are not reproducible across systems and versions. They
may not be reproducible as the product code changes. Two equal dicts
may not iterate in the same order, even within a single process:
>>> d1 = dict.fromkeys(str(i) for i in range(10))
>>> d2 = dict.fromkeys(str(i) for i in range(1000000))
>>> for i in range(10, 1000000):
... del d2[str(i)]
...
>>> d1 == d2
True
>>> d1
{'1': None, '0': None, '3': None, '2': None, '5': None, '4': None, '7':
None, '6': None, '9': None, '8': None}
>>> d2
{'9': None, '1': None, '5': None, '2': None, '0': None, '3': None, '4':
None, '6': None, '7': None, '8': None}
Be careful out there...
--Ned.
> --Chris
>
> [1] http://docs.python.org/3/whatsnew/3.3.html#builtin-functions-and-types
> [2] http://docs.python.org/2/using/cmdline.html#cmdoption-R
>
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python
More information about the testing-in-python
mailing list