[Python-checkins] r86448 - in python/branches/py3k: Lib/fractions.py Lib/test/test_fractions.py Misc/NEWS
mark.dickinson
python-checkins at python.org
Sat Nov 13 11:27:38 CET 2010
Author: mark.dickinson
Date: Sat Nov 13 11:27:38 2010
New Revision: 86448
Log:
Make Fraction(-1).__hash__() return -2 rather than -1 (see issue 10356).
Modified:
python/branches/py3k/Lib/fractions.py
python/branches/py3k/Lib/test/test_fractions.py
python/branches/py3k/Misc/NEWS
Modified: python/branches/py3k/Lib/fractions.py
==============================================================================
--- python/branches/py3k/Lib/fractions.py (original)
+++ python/branches/py3k/Lib/fractions.py Sat Nov 13 11:27:38 2010
@@ -528,12 +528,8 @@
return Fraction(round(self / shift) * shift)
def __hash__(self):
- """hash(self)
+ """hash(self)"""
- Tricky because values that are exactly representable as a
- float must have the same hash as that float.
-
- """
# XXX since this method is expensive, consider caching the result
# In order to make sure that the hash of a Fraction agrees
@@ -550,7 +546,8 @@
hash_ = _PyHASH_INF
else:
hash_ = abs(self._numerator) * dinv % _PyHASH_MODULUS
- return hash_ if self >= 0 else -hash_
+ result = hash_ if self >= 0 else -hash_
+ return -2 if result == -1 else result
def __eq__(a, b):
"""a == b"""
Modified: python/branches/py3k/Lib/test/test_fractions.py
==============================================================================
--- python/branches/py3k/Lib/test/test_fractions.py (original)
+++ python/branches/py3k/Lib/test/test_fractions.py Sat Nov 13 11:27:38 2010
@@ -546,6 +546,9 @@
self.assertEquals(hash(2.5), hash(F(5, 2)))
self.assertEquals(hash(10**50), hash(F(10**50)))
self.assertNotEquals(hash(float(10**23)), hash(F(10**23)))
+ # Check that __hash__ produces the same value as hash(), for
+ # consistency with int and Decimal. (See issue #10356.)
+ self.assertEquals(hash(F(-1)), F(-1).__hash__())
def testApproximatePi(self):
# Algorithm borrowed from
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Sat Nov 13 11:27:38 2010
@@ -63,6 +63,9 @@
Library
-------
+- Fix Fraction.__hash__ so that Fraction.__hash__(-1) is -2. (See
+ also issue #10356.)
+
- Issue #4471: Add the IMAP.starttls() method to enable encryption on
standard IMAP4 connections. Original patch by Lorenzo M. Catucci.
More information about the Python-checkins
mailing list