Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_bisect.py

    r2 r391  
    2222# This is now the module with the C implementation.
    2323import bisect as c_bisect
     24
     25
     26class Range(object):
     27    """A trivial xrange()-like object without any integer width limitations."""
     28    def __init__(self, start, stop):
     29        self.start = start
     30        self.stop = stop
     31        self.last_insert = None
     32
     33    def __len__(self):
     34        return self.stop - self.start
     35
     36    def __getitem__(self, idx):
     37        n = self.stop - self.start
     38        if idx < 0:
     39            idx += n
     40        if idx >= n:
     41            raise IndexError(idx)
     42        return self.start + idx
     43
     44    def insert(self, idx, item):
     45        self.last_insert = idx, item
    2446
    2547
     
    123145        self.assertRaises(ValueError, mod.insort_right, [1, 2, 3], 5, -1, 3),
    124146
     147    def test_large_range(self):
     148        # Issue 13496
     149        mod = self.module
     150        n = sys.maxsize
     151        try:
     152            data = xrange(n-1)
     153        except OverflowError:
     154            self.skipTest("can't create a xrange() object of size `sys.maxsize`")
     155        self.assertEqual(mod.bisect_left(data, n-3), n-3)
     156        self.assertEqual(mod.bisect_right(data, n-3), n-2)
     157        self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3)
     158        self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2)
     159
     160    def test_large_pyrange(self):
     161        # Same as above, but without C-imposed limits on range() parameters
     162        mod = self.module
     163        n = sys.maxsize
     164        data = Range(0, n-1)
     165        self.assertEqual(mod.bisect_left(data, n-3), n-3)
     166        self.assertEqual(mod.bisect_right(data, n-3), n-2)
     167        self.assertEqual(mod.bisect_left(data, n-3, n-10, n), n-3)
     168        self.assertEqual(mod.bisect_right(data, n-3, n-10, n), n-2)
     169        x = n - 100
     170        mod.insort_left(data, x, x - 50, x + 50)
     171        self.assertEqual(data.last_insert, (x, x))
     172        x = n - 200
     173        mod.insort_right(data, x, x - 50, x + 50)
     174        self.assertEqual(data.last_insert, (x + 1, x))
     175
    125176    def test_random(self, n=25):
    126177        from random import randrange
     
    131182            ip = self.module.bisect_left(data, elem)
    132183            if ip < len(data):
    133                 self.failUnless(elem <= data[ip])
     184                self.assertTrue(elem <= data[ip])
    134185            if ip > 0:
    135                 self.failUnless(data[ip-1] < elem)
     186                self.assertTrue(data[ip-1] < elem)
    136187            ip = self.module.bisect_right(data, elem)
    137188            if ip < len(data):
    138                 self.failUnless(elem < data[ip])
     189                self.assertTrue(elem < data[ip])
    139190            if ip > 0:
    140                 self.failUnless(data[ip-1] <= elem)
     191                self.assertTrue(data[ip-1] <= elem)
    141192
    142193    def test_optionalSlicing(self):
     
    147198                    hi = min(len(data), hi)
    148199                    ip = func(data, elem, lo, hi)
    149                     self.failUnless(lo <= ip <= hi)
     200                    self.assertTrue(lo <= ip <= hi)
    150201                    if func is self.module.bisect_left and ip < hi:
    151                         self.failUnless(elem <= data[ip])
     202                        self.assertTrue(elem <= data[ip])
    152203                    if func is self.module.bisect_left and ip > lo:
    153                         self.failUnless(data[ip-1] < elem)
     204                        self.assertTrue(data[ip-1] < elem)
    154205                    if func is self.module.bisect_right and ip < hi:
    155                         self.failUnless(elem < data[ip])
     206                        self.assertTrue(elem < data[ip])
    156207                    if func is self.module.bisect_right and ip > lo:
    157                         self.failUnless(data[ip-1] <= elem)
     208                        self.assertTrue(data[ip-1] <= elem)
    158209                    self.assertEqual(ip, max(lo, min(hi, expected)))
    159210
     
    192243                    f = self.module.insort_right
    193244                f(insorted, digit)
    194         self.assertEqual(sorted(insorted), insorted)
     245            self.assertEqual(sorted(insorted), insorted)
    195246
    196247    def test_backcompatibility(self):
Note: See TracChangeset for help on using the changeset viewer.