[pypy-commit] pypy py3k: bah, I broke == for != for all objects which are not identical :-/. Fix it
antocuni
noreply at buildbot.pypy.org
Thu Mar 1 14:30:41 CET 2012
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: py3k
Changeset: r53052:5522d023cedb
Date: 2012-03-01 14:30 +0100
http://bitbucket.org/pypy/pypy/changeset/5522d023cedb/
Log: bah, I broke == for != for all objects which are not identical :-/.
Fix it
diff --git a/pypy/objspace/descroperation.py b/pypy/objspace/descroperation.py
--- a/pypy/objspace/descroperation.py
+++ b/pypy/objspace/descroperation.py
@@ -558,6 +558,15 @@
if w_res is not None:
return w_res
#
+ # we did not find any special method, let's do the default logic for
+ # == and !=
+ if left == '__eq__' or left == '__ne__':
+ # they are not identical, else it would have been caught by the if
+ # at the top of the function
+ assert not space.is_w(w_obj1, w_obj2)
+ return space.wrap(left != '__eq__')
+ #
+ # if we arrived here, they are unorderable
typename1 = space.type(w_obj1).getname(space)
typename2 = space.type(w_obj2).getname(space)
raise operationerrfmt(space.w_TypeError,
diff --git a/pypy/objspace/test/test_descroperation.py b/pypy/objspace/test/test_descroperation.py
--- a/pypy/objspace/test/test_descroperation.py
+++ b/pypy/objspace/test/test_descroperation.py
@@ -321,6 +321,30 @@
raises(TypeError, "0.0 < zz()")
raises(TypeError, "0j < zz()")
+ def test_equality_among_different_types(self):
+ class A(object): pass
+ class zz(object): pass
+ a = A()
+ assert a == a
+ for x, y in [(A(), A()),
+ (A(), zz()),
+ (A(), A()),
+ (A(), None),
+ (None, A()),
+ (0, ()),
+ (0.0, ()),
+ (0j, ()),
+ (0, []),
+ (0.0, []),
+ (0j, []),
+ (0, A()),
+ (0.0, A()),
+ (0j, A()),
+ ]:
+ assert not x == y
+ assert x != y
+
+
def test_setattrweakref(self):
skip("fails, works in cpython")
# The issue is that in CPython, none of the built-in types have
More information about the pypy-commit
mailing list