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_deque.py

    r2 r391  
    77import cPickle as pickle
    88import random
    9 import os
     9import struct
    1010
    1111BIG = 100000
     
    5151        self.assertRaises(ValueError, deque, 'abc', -1)
    5252        self.assertRaises(ValueError, deque, 'abc', -2)
    53         d = deque(range(10), maxlen=3)
     53        it = iter(range(10))
     54        d = deque(it, maxlen=3)
     55        self.assertEqual(list(it), [])
    5456        self.assertEqual(repr(d), 'deque([7, 8, 9], maxlen=3)')
    5557        self.assertEqual(list(d), range(7, 10))
     
    8890            test_support.unlink(test_support.TESTFN)
    8991
     92    def test_maxlen_zero(self):
     93        it = iter(range(100))
     94        deque(it, maxlen=0)
     95        self.assertEqual(list(it), [])
     96
     97        it = iter(range(100))
     98        d = deque(maxlen=0)
     99        d.extend(it)
     100        self.assertEqual(list(it), [])
     101
     102        it = iter(range(100))
     103        d = deque(maxlen=0)
     104        d.extendleft(it)
     105        self.assertEqual(list(it), [])
     106
     107    def test_maxlen_attribute(self):
     108        self.assertEqual(deque().maxlen, None)
     109        self.assertEqual(deque('abc').maxlen, None)
     110        self.assertEqual(deque('abc', maxlen=4).maxlen, 4)
     111        self.assertEqual(deque('abc', maxlen=2).maxlen, 2)
     112        self.assertEqual(deque('abc', maxlen=0).maxlen, 0)
     113        with self.assertRaises(AttributeError):
     114            d = deque('abc')
     115            d.maxlen = 10
     116
     117    def test_count(self):
     118        for s in ('', 'abracadabra', 'simsalabim'*500+'abc'):
     119            s = list(s)
     120            d = deque(s)
     121            for letter in 'abcdefghijklmnopqrstuvwxyz':
     122                self.assertEqual(s.count(letter), d.count(letter), (s, d, letter))
     123        self.assertRaises(TypeError, d.count)       # too few args
     124        self.assertRaises(TypeError, d.count, 1, 2) # too many args
     125        class BadCompare:
     126            def __eq__(self, other):
     127                raise ArithmeticError
     128        d = deque([1, 2, BadCompare(), 3])
     129        self.assertRaises(ArithmeticError, d.count, 2)
     130        d = deque([1, 2, 3])
     131        self.assertRaises(ArithmeticError, d.count, BadCompare())
     132        class MutatingCompare:
     133            def __eq__(self, other):
     134                self.d.pop()
     135                return True
     136        m = MutatingCompare()
     137        d = deque([1, 2, 3, m, 4, 5])
     138        m.d = d
     139        self.assertRaises(RuntimeError, d.count, 3)
     140
     141        # test issue11004
     142        # block advance failed after rotation aligned elements on right side of block
     143        d = deque([None]*16)
     144        for i in range(len(d)):
     145            d.rotate(-1)
     146        d.rotate(1)
     147        self.assertEqual(d.count(1), 0)
     148        self.assertEqual(d.count(None), 16)
     149
    90150    def test_comparisons(self):
    91151        d = deque('xabc'); d.popleft()
     
    173233            j = random.randrange(-len(d), len(d))
    174234            val = d[j]
    175             self.assert_(val in d)
     235            self.assertIn(val, d)
    176236            del d[j]
    177             self.assert_(val not in d)
     237            self.assertNotIn(val, d)
    178238        self.assertEqual(len(d), 0)
     239
     240    def test_reverse(self):
     241        n = 500         # O(n**2) test, don't make this too big
     242        data = [random.random() for i in range(n)]
     243        for i in range(n):
     244            d = deque(data[:i])
     245            r = d.reverse()
     246            self.assertEqual(list(d), list(reversed(data[:i])))
     247            self.assertIs(r, None)
     248            d.reverse()
     249            self.assertEqual(list(d), data[:i])
     250        self.assertRaises(TypeError, d.reverse, 1)          # Arity is zero
    179251
    180252    def test_rotate(self):
     
    276348        for x, y in zip(d, e):
    277349            # verify that original order and values are retained.
    278             self.assert_(x is y)
     350            self.assertTrue(x is y)
    279351
    280352        # Handle evil mutator
     
    290362        self.assertEqual(list(d), list(e))
    291363        d.append(d)
    292         self.assert_('...' in repr(d))
     364        self.assertIn('...', repr(d))
    293365
    294366    def test_print(self):
     
    445517            del obj, container
    446518            gc.collect()
    447             self.assert_(ref() is None, "Cycle was not collected")
     519            self.assertTrue(ref() is None, "Cycle was not collected")
     520
     521    check_sizeof = test_support.check_sizeof
     522
     523    @test_support.cpython_only
     524    def test_sizeof(self):
     525        BLOCKLEN = 62
     526        basesize = test_support.calcobjsize('2P4PlP')
     527        blocksize = struct.calcsize('2P%dP' % BLOCKLEN)
     528        self.assertEqual(object.__sizeof__(deque()), basesize)
     529        check = self.check_sizeof
     530        check(deque(), basesize + blocksize)
     531        check(deque('a'), basesize + blocksize)
     532        check(deque('a' * (BLOCKLEN // 2)), basesize + blocksize)
     533        check(deque('a' * (BLOCKLEN // 2 + 1)), basesize + 2 * blocksize)
     534        check(deque('a' * (42 * BLOCKLEN)), basesize + 43 * blocksize)
    448535
    449536class TestVariousIteratorArgs(unittest.TestCase):
Note: See TracChangeset for help on using the changeset viewer.