mirror of https://github.com/python/cpython.git
Forward port additional tests from 2.7 (issue #14829).
This commit is contained in:
commit
7ca29507f6
|
@ -23,6 +23,28 @@
|
|||
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 @@ def test_negative_lo(self):
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue