diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2012-05-16 13:01:40 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2012-05-16 13:01:40 (GMT) |
commit | fb5b954ee0c389b7cba4b07a3411ca6f1795cb94 (patch) | |
tree | 0e00451cde5633cd85308baace227b7355d719b8 | |
parent | a103b96a80f049f68ccf2dd3d5d7858b26a27e94 (diff) | |
download | cpython-fb5b954ee0c389b7cba4b07a3411ca6f1795cb94.zip cpython-fb5b954ee0c389b7cba4b07a3411ca6f1795cb94.tar.gz cpython-fb5b954ee0c389b7cba4b07a3411ca6f1795cb94.tar.bz2 |
Forward port additional tests from 2.7 (issue #14829).
-rw-r--r-- | Lib/test/test_bisect.py | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py index c24a1a2..2ac3a68 100644 --- a/Lib/test/test_bisect.py +++ b/Lib/test/test_bisect.py @@ -23,6 +23,28 @@ del sys.modules['bisect'] import bisect as c_bisect +class Range(object): + """A trivial range()-like object without any integer width limitations.""" + def __init__(self, start, stop): + self.start = start + self.stop = stop + self.last_insert = None + + def __len__(self): + return self.stop - self.start + + def __getitem__(self, idx): + n = self.stop - self.start + if idx < 0: + idx += n + if idx >= n: + raise IndexError(idx) + return self.start + idx + + def insert(self, idx, item): + self.last_insert = idx, item + + class TestBisect(unittest.TestCase): module = None @@ -125,9 +147,28 @@ class TestBisect(unittest.TestCase): def test_large_range(self): # Issue 13496 mod = self.module - data = range(sys.maxsize-1) - self.assertEqual(mod.bisect_left(data, sys.maxsize-3), sys.maxsize-3) - self.assertEqual(mod.bisect_right(data, sys.maxsize-3), sys.maxsize-2) + n = sys.maxsize + data = range(n-1) + self.assertEqual(mod.bisect_left(data, n-3), n-3) + self.assertEqual(mod.bisect_right(data, n-3), n-2) + self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3) + self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2) + + def test_large_pyrange(self): + # Same as above, but without C-imposed limits on range() parameters + mod = self.module + n = sys.maxsize + data = Range(0, n-1) + self.assertEqual(mod.bisect_left(data, n-3), n-3) + self.assertEqual(mod.bisect_right(data, n-3), n-2) + self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3) + self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2) + x = n - 100 + mod.insort_left(data, x, x - 50, x + 50) + self.assertEqual(data.last_insert, (x, x)) + x = n - 200 + mod.insort_right(data, x, x - 50, x + 50) + self.assertEqual(data.last_insert, (x + 1, x)) def test_random(self, n=25): from random import randrange |