summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/seq_tests.py27
-rw-r--r--Lib/test/test_richcmp.py4
2 files changed, 29 insertions, 2 deletions
diff --git a/Lib/test/seq_tests.py b/Lib/test/seq_tests.py
index 89996a3..ae5bba3 100644
--- a/Lib/test/seq_tests.py
+++ b/Lib/test/seq_tests.py
@@ -207,6 +207,33 @@ class CommonTest(unittest.TestCase):
self.assertRaises(TypeError, u.__contains__)
+ def test_contains_fake(self):
+ class AllEq:
+ # Sequences must use rich comparison against each item
+ # (unless "is" is true, or an earlier item answered)
+ # So instances of AllEq must be found in all non-empty sequences.
+ def __eq__(self, other):
+ return True
+ def __hash__(self):
+ raise NotImplemented
+ self.assert_(AllEq() not in self.type2test([]))
+ self.assert_(AllEq() in self.type2test([1]))
+
+ def test_contains_order(self):
+ # Sequences must test in-order. If a rich comparison has side
+ # effects, these will be visible to tests against later members.
+ # In this test, the "side effect" is a short-circuiting raise.
+ class DoNotTestEq(Exception):
+ pass
+ class StopCompares:
+ def __eq__(self, other):
+ raise DoNotTestEq
+
+ checkfirst = self.type2test([1, StopCompares()])
+ self.assert_(1 in checkfirst)
+ checklast = self.type2test([StopCompares(), 1])
+ self.assertRaises(DoNotTestEq, checklast.__contains__, 1)
+
def test_len(self):
self.assertEqual(len(self.type2test()), 0)
self.assertEqual(len(self.type2test([])), 0)
diff --git a/Lib/test/test_richcmp.py b/Lib/test/test_richcmp.py
index 006b152..687298d 100644
--- a/Lib/test/test_richcmp.py
+++ b/Lib/test/test_richcmp.py
@@ -259,8 +259,8 @@ class DictTest(unittest.TestCase):
def test_dicts(self):
# Verify that __eq__ and __ne__ work for dicts even if the keys and
- # values don't support anything other than __eq__ and __ne__. Complex
- # numbers are a fine example of that.
+ # values don't support anything other than __eq__ and __ne__ (and
+ # __hash__). Complex numbers are a fine example of that.
import random
imag1a = {}
for i in range(50):