Author: [email protected]
Branch: ep2016sprint
Changeset: r85827:0888d83c7222
Date: 2016-07-23 15:54 +0200
http://bitbucket.org/pypy/pypy/changeset/0888d83c7222/
Log: Issue #2346 : Hashing of -1 did not return -2 as cpython
diff --git a/pypy/objspace/std/specialisedtupleobject.py
b/pypy/objspace/std/specialisedtupleobject.py
--- a/pypy/objspace/std/specialisedtupleobject.py
+++ b/pypy/objspace/std/specialisedtupleobject.py
@@ -62,6 +62,11 @@
value = getattr(self, 'value%s' % i)
if typetuple[i] == object:
y = space.int_w(space.hash(value))
+ elif typetuple[i] == int:
+ # mimic cpythons behavior of a hash value of -2 for -1
+ y = value
+ if y == -1:
+ y = -2
elif typetuple[i] == float:
# get the correct hash for float which is an
# integer & other less frequent cases
diff --git a/pypy/objspace/std/test/test_specialisedtupleobject.py
b/pypy/objspace/std/test/test_specialisedtupleobject.py
--- a/pypy/objspace/std/test/test_specialisedtupleobject.py
+++ b/pypy/objspace/std/test/test_specialisedtupleobject.py
@@ -177,6 +177,10 @@
assert hash(a) == hash((1L, 2L)) == hash((1.0, 2.0)) == hash((1.0, 2L))
+ x = (-1, -1)
+ y = tuple([-1, -1])
+ assert hash(x) == hash(y)
+
def test_getitem(self):
t = (5, 3)
assert (t)[0] == 5
diff --git a/pypy/objspace/test/test_descriptor.py
b/pypy/objspace/test/test_descriptor.py
--- a/pypy/objspace/test/test_descriptor.py
+++ b/pypy/objspace/test/test_descriptor.py
@@ -149,6 +149,9 @@
pass
class myfloat(float):
pass
+ class myHashClass(object):
+ def __hash__(self):
+ return -1
assert hash(-1) == -2
assert hash(-1L) == -2
@@ -157,4 +160,4 @@
assert hash(myint(-1)) == -2
assert hash(mylong(-1)) == -2
assert hash(myfloat(-1.0)) == -2
-
+ assert hash(myHashClass()) == -2
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit