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

    r2 r391  
    3838                continue
    3939            elif x == sentinel:
    40                 self.fail('{0}: iterator ended unexpectedly '
    41                           'at position {1}; expected {2}'.format(test_id, i, y))
     40                self.fail('{}: iterator ended unexpectedly '
     41                          'at position {}; expected {}'.format(test_id, i, y))
    4242            elif y == sentinel:
    43                 self.fail('{0}: unexpected excess element {1} at '
    44                           'position {2}'.format(test_id, x, i))
     43                self.fail('{}: unexpected excess element {} at '
     44                          'position {}'.format(test_id, x, i))
    4545            else:
    46                 self.fail('{0}: wrong element at position {1};'
    47                           'expected {2}, got {3}'.format(test_id, i, y, x))
     46                self.fail('{}: wrong element at position {};'
     47                          'expected {}, got {}'.format(test_id, i, y, x))
     48
     49    def assert_xranges_equivalent(self, x, y):
     50        # Check that two xrange objects are equivalent, in the sense of the
     51        # associated sequences being the same.  We want to use this for large
     52        # xrange objects, so instead of converting to lists and comparing
     53        # directly we do a number of indirect checks.
     54        if len(x) != len(y):
     55            self.fail('{} and {} have different '
     56                      'lengths: {} and {} '.format(x, y, len(x), len(y)))
     57        if len(x) >= 1:
     58            if x[0] != y[0]:
     59                self.fail('{} and {} have different initial '
     60                          'elements: {} and {} '.format(x, y, x[0], y[0]))
     61            if x[-1] != y[-1]:
     62                self.fail('{} and {} have different final '
     63                          'elements: {} and {} '.format(x, y, x[-1], y[-1]))
     64        if len(x) >= 2:
     65            x_step = x[1] - x[0]
     66            y_step = y[1] - y[0]
     67            if x_step != y_step:
     68                self.fail('{} and {} have different step: '
     69                          '{} and {} '.format(x, y, x_step, y_step))
    4870
    4971    def test_xrange(self):
     
    6486
    6587        seq = list(xrange(a, b, c))
    66         self.assert_(a in seq)
    67         self.assert_(b not in seq)
     88        self.assertIn(a, seq)
     89        self.assertNotIn(b, seq)
    6890        self.assertEqual(len(seq), 2)
    6991
    7092        seq = list(xrange(b, a, -c))
    71         self.assert_(b in seq)
    72         self.assert_(a not in seq)
     93        self.assertIn(b, seq)
     94        self.assertNotIn(a, seq)
    7395        self.assertEqual(len(seq), 2)
    7496
    7597        seq = list(xrange(-a, -b, -c))
    76         self.assert_(-a in seq)
    77         self.assert_(-b not in seq)
     98        self.assertIn(-a, seq)
     99        self.assertNotIn(-b, seq)
    78100        self.assertEqual(len(seq), 2)
    79101
     
    82104        self.assertRaises(ValueError, xrange, 1, 2, 0)
    83105
    84         self.assertRaises(OverflowError, xrange, 1e100, 1e101, 1e101)
     106        self.assertRaises(OverflowError, xrange, 10**100, 10**101, 10**101)
    85107
    86108        self.assertRaises(TypeError, xrange, 0, "spam")
     
    102124            for t in testcases:
    103125                r = xrange(*t)
    104                 self.assertEquals(list(pickle.loads(pickle.dumps(r, proto))),
    105                                   list(r))
     126                self.assertEqual(list(pickle.loads(pickle.dumps(r, proto))),
     127                                 list(r))
     128
     129        M = min(sys.maxint, sys.maxsize)
     130        large_testcases = testcases + [
     131            (0, M, 1),
     132            (M, 0, -1),
     133            (0, M, M - 1),
     134            (M // 2, M, 1),
     135            (0, -M, -1),
     136            (0, -M, 1 - M),
     137            (-M, M, 2),
     138            (-M, M, 1024),
     139            (-M, M, 10585),
     140            (M, -M, -2),
     141            (M, -M, -1024),
     142            (M, -M, -10585),
     143            ]
     144        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
     145            for t in large_testcases:
     146                r = xrange(*t)
     147                r_out = pickle.loads(pickle.dumps(r, proto))
     148                self.assert_xranges_equivalent(r_out, r)
     149
     150    def test_repr(self):
     151        # Check that repr of an xrange is a valid representation
     152        # of that xrange.
     153
     154        # Valid xranges have at most min(sys.maxint, sys.maxsize) elements.
     155        M = min(sys.maxint, sys.maxsize)
     156
     157        testcases = [
     158            (13,),
     159            (0, 11),
     160            (-22, 10),
     161            (20, 3, -1),
     162            (13, 21, 3),
     163            (-2, 2, 2),
     164            (0, M, 1),
     165            (M, 0, -1),
     166            (0, M, M - 1),
     167            (M // 2, M, 1),
     168            (0, -M, -1),
     169            (0, -M, 1 - M),
     170            (-M, M, 2),
     171            (-M, M, 1024),
     172            (-M, M, 10585),
     173            (M, -M, -2),
     174            (M, -M, -1024),
     175            (M, -M, -10585),
     176            ]
     177        for t in testcases:
     178            r = xrange(*t)
     179            r_out = eval(repr(r))
     180            self.assert_xranges_equivalent(r, r_out)
    106181
    107182    def test_range_iterators(self):
     
    123198            else:
    124199                iter2 = pyrange(start, end, step)
    125                 test_id = "xrange({0}, {1}, {2})".format(start, end, step)
     200                test_id = "xrange({}, {}, {})".format(start, end, step)
    126201                # check first 100 entries
    127202                self.assert_iterators_equal(iter1, iter2, test_id, limit=100)
     
    133208            else:
    134209                iter2 = pyrange_reversed(start, end, step)
    135                 test_id = "reversed(xrange({0}, {1}, {2}))".format(
    136                     start, end, step)
     210                test_id = "reversed(xrange({}, {}, {}))".format(start, end, step)
    137211                self.assert_iterators_equal(iter1, iter2, test_id, limit=100)
    138212
Note: See TracChangeset for help on using the changeset viewer.