14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys
34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass G:
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    'Sequence using __getitem__'
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, seqn):
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.seqn = seqn
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __getitem__(self, i):
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return self.seqn[i]
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass I:
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    'Sequence using iterator protocol'
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, seqn):
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.seqn = seqn
174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i = 0
184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __iter__(self):
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return self
204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def next(self):
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if self.i >= len(self.seqn): raise StopIteration
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        v = self.seqn[self.i]
234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i += 1
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return v
254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass Ig:
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    'Sequence using iterator protocol defined with a generator'
284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, seqn):
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.seqn = seqn
304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i = 0
314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __iter__(self):
324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for val in self.seqn:
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            yield val
344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass X:
364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    'Missing __getitem__ and __iter__'
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, seqn):
384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.seqn = seqn
394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i = 0
404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def next(self):
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if self.i >= len(self.seqn): raise StopIteration
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        v = self.seqn[self.i]
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i += 1
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return v
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass E:
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    'Test propagation of exceptions'
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, seqn):
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.seqn = seqn
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i = 0
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __iter__(self):
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return self
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def next(self):
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        3 // 0
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass N:
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    'Iterator missing next()'
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __init__(self, seqn):
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.seqn = seqn
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.i = 0
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def __iter__(self):
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        return self
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass EnumerateTestCase(unittest.TestCase):
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    enum = enumerate
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    seq, res = 'abc', [(0,'a'), (1,'b'), (2,'c')]
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_basicfunction(self):
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(self.enum(self.seq)), self.enum)
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = self.enum(self.seq)
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(iter(e), e)
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(list(self.enum(self.seq)), self.res)
744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.enum.__doc__
754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_getitemseqn(self):
774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(list(self.enum(G(self.seq))), self.res)
784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = self.enum(G(''))
794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, e.next)
804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_iteratorseqn(self):
824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(list(self.enum(I(self.seq))), self.res)
834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = self.enum(I(''))
844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, e.next)
854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_iteratorgenerator(self):
874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(list(self.enum(Ig(self.seq))), self.res)
884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = self.enum(Ig(''))
894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(StopIteration, e.next)
904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_noniterable(self):
924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, self.enum, X(self.seq))
934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_illformediterable(self):
954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, list, self.enum(N(self.seq)))
964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_exception_propagation(self):
984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ZeroDivisionError, list, self.enum(E(self.seq)))
994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_argumentcheck(self):
1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, self.enum) # no arguments
1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, self.enum, 1) # wrong type (not iterable)
1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, self.enum, 'abc', 'a') # wrong type
1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, self.enum, 'abc', 2, 3) # too many arguments
1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    @test_support.cpython_only
1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_tuple_reuse(self):
1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Tests an implementation detail where tuple is reused
1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # whenever nothing else holds a reference to it
1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len(set(map(id, list(enumerate(self.seq))))), len(self.seq))
1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(len(set(map(id, enumerate(self.seq)))), min(1,len(self.seq)))
1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass MyEnum(enumerate):
1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    pass
1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass SubclassTestCase(EnumerateTestCase):
1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    enum = MyEnum
1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestEmpty(EnumerateTestCase):
1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    seq, res = '', []
1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestBig(EnumerateTestCase):
1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    seq = range(10,20000,2)
1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    res = zip(range(20000), seq)
1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestReversed(unittest.TestCase):
1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_simple(self):
1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class A:
1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, i):
1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if i < 5:
1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return str(i)
1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise StopIteration
1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __len__(self):
1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 5
1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for data in 'abc', range(5), tuple(enumerate('abc')), A(), xrange(1,17,5):
1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(list(data)[::-1], list(reversed(data)))
1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reversed, {})
1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # don't allow keyword arguments
1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reversed, [], a=1)
1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_classic_class(self):
1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class A:
1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __reversed__(self):
1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return [2, 1]
1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(list(reversed(A())), [2, 1])
1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_xrange_optimization(self):
1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        x = xrange(1)
1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(type(reversed(x)), type(iter(x)))
1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    @test_support.cpython_only
1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_len(self):
1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # This is an implementation detail, not an interface requirement
1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        from test.test_iterlen import len
1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for s in ('hello', tuple('hello'), list('hello'), xrange(5)):
1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(len(reversed(s)), len(s))
1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            r = reversed(s)
1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            list(r)
1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            self.assertEqual(len(r), 0)
1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class SeqWithWeirdLen:
1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            called = False
1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __len__(self):
1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                if not self.called:
1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    self.called = True
1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                    return 10
1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                raise ZeroDivisionError
1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return index
1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        r = reversed(SeqWithWeirdLen())
1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(ZeroDivisionError, len, r)
1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_gc(self):
1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class Seq:
1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __len__(self):
1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return 10
1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self, index):
1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                return index
1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s = Seq()
1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        r = reversed(s)
1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        s.r = r
1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_args(self):
1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reversed)
1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reversed, [], 'extra')
1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_bug1229429(self):
1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # this bug was never in reversed, it was in
1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # PyObject_CallMethod, and reversed_new calls that sometimes.
1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        if not hasattr(sys, "getrefcount"):
1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return
1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        def f():
1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            pass
1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        r = f.__reversed__ = object()
1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        rc = sys.getrefcount(r)
2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for i in range(10):
2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            try:
2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                reversed(f)
2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            except TypeError:
2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                pass
2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            else:
2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.fail("non-callable __reversed__ didn't raise!")
2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(rc, sys.getrefcount(r))
2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_objmethods(self):
2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # Objects must have __len__() and __getitem__() implemented.
2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class NoLen(object):
2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __getitem__(self): return 1
2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        nl = NoLen()
2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reversed, nl)
2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        class NoGetItem(object):
2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            def __len__(self): return 2
2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        ngi = NoGetItem()
2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(TypeError, reversed, ngi)
2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass EnumerateStartTestCase(EnumerateTestCase):
2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_basicfunction(self):
2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        e = self.enum(self.seq)
2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(iter(e), e)
2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(list(self.enum(self.seq)), self.res)
2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestStart(EnumerateStartTestCase):
2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    enum = lambda self, i: enumerate(i, start=11)
2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    seq, res = 'abc', [(11, 'a'), (12, 'b'), (13, 'c')]
2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestLongStart(EnumerateStartTestCase):
2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    enum = lambda self, i: enumerate(i, start=sys.maxint+1)
2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    seq, res = 'abc', [(sys.maxint+1,'a'), (sys.maxint+2,'b'),
2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                       (sys.maxint+3,'c')]
2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(verbose=None):
2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_support.run_unittest(__name__)
2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    # verify reference counting
2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    if verbose and hasattr(sys, "gettotalrefcount"):
2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        counts = [None] * 5
2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for i in xrange(len(counts)):
2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            test_support.run_unittest(__name__)
2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            counts[i] = sys.gettotalrefcount()
2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        print counts
2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__":
2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    test_main(verbose=True)
256