diff -r ecc26a050384 Lib/test/test_class.py --- a/Lib/test/test_class.py Tue Mar 11 18:46:37 2014 -0400 +++ b/Lib/test/test_class.py Tue Mar 11 22:56:02 2014 -0700 @@ -514,37 +514,29 @@ def testHashComparisonOfMethods(self): # Test comparison and hash of methods class A: - def __init__(self, x): - self.x = x def f(self): pass def g(self): pass def __eq__(self, other): - return self.x == other.x + return True def __hash__(self): - return self.x + raise TypeError class B(A): pass - a1 = A(1) - a2 = A(2) + a1 = A() + a2 = A() self.assertEqual(a1.f, a1.f) self.assertNotEqual(a1.f, a2.f) self.assertNotEqual(a1.f, a1.g) - self.assertEqual(a1.f, A(1).f) self.assertEqual(hash(a1.f), hash(a1.f)) - self.assertEqual(hash(a1.f), hash(A(1).f)) self.assertNotEqual(A.f, a1.f) self.assertNotEqual(A.f, A.g) self.assertEqual(B.f, A.f) self.assertEqual(hash(B.f), hash(A.f)) - # the following triggers a SystemError in 2.4 - a = A(hash(A.f)^(-1)) - hash(a.f) - def test_main(): support.run_unittest(ClassTests) diff -r ecc26a050384 Lib/test/test_descr.py --- a/Lib/test/test_descr.py Tue Mar 11 18:46:37 2014 -0400 +++ b/Lib/test/test_descr.py Tue Mar 11 22:56:02 2014 -0700 @@ -4111,10 +4111,10 @@ l = [] self.assertEqual(l.__add__, l.__add__) - self.assertEqual(l.__add__, [].__add__) - self.assertNotEqual(l.__add__, [5].__add__) - self.assertNotEqual(l.__add__, l.__mul__) - self.assertEqual(l.__add__.__name__, '__add__') + self.assertTrue(l.__add__ != [].__add__) + self.assertTrue(l.__add__ != [5].__add__) + self.assertTrue(l.__add__ != l.__mul__) + self.assertTrue(l.__add__.__name__ == '__add__') if hasattr(l.__add__, '__self__'): # CPython self.assertIs(l.__add__.__self__, l) @@ -4127,14 +4127,39 @@ try: hash(l.__add__) except TypeError: - pass - else: - self.fail("no TypeError from hash([].__add__)") - - t = () - t += (7,) - self.assertEqual(t.__add__, (7,).__add__) - self.assertEqual(hash(t.__add__), hash((7,).__add__)) + self.fail("hash([].__add__) should not be based on hash([])") + + def test_builtin_function_or_method(self): + # Not really belonging to test_descr, but introspection and + # comparison on seems not + # to be tested elsewhere + l = [] + self.assertEqual(l.append, l.append) + self.assertTrue(l.append != [].append) + self.assertTrue(l.append != [5].append) + self.assertTrue(l.append != l.__mul__) + self.assertTrue(l.append.__name__ == 'append') + self.assertTrue(l.append.__self__ is l) + #self.assertTrue(l.append.__objclass__ is list) --- could be added? + self.assertEqual(l.append.__doc__, list.append.__doc__) + try: + hash(l.append) + except TypeError: + self.fail("hash([].append) should not be based on hash([])") + + def test_special_unbound_method_types(self): + # Testing objects of ... + self.assertEqual(list.__add__, list.__add__) + self.assertTrue(list.__add__ != list.__mul__) + self.assertTrue(list.__add__.__name__ == '__add__') + self.assertTrue(list.__add__.__objclass__ is list) + + # Testing objects of ... + self.assertEqual(list.append, list.append) + self.assertTrue(list.append != list.pop) + self.assertTrue(list.append.__name__ == 'append') + self.assertTrue(list.append.__objclass__ is list) + def test_not_implemented(self): # Testing NotImplemented...