test_enumerate.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 151 行

PY
151
字号
# Taken from Python 2.3.5from __future__ import generatorsimport unittestfrom sets import Setfrom test import test_supportclass G:    'Sequence using __getitem__'    def __init__(self, seqn):        self.seqn = seqn    def __getitem__(self, i):        return self.seqn[i]class I:    'Sequence using iterator protocol'    def __init__(self, seqn):        self.seqn = seqn        self.i = 0    def __iter__(self):        return self    def next(self):        if self.i >= len(self.seqn): raise StopIteration        v = self.seqn[self.i]        self.i += 1        return vclass Ig:    'Sequence using iterator protocol defined with a generator'    def __init__(self, seqn):        self.seqn = seqn        self.i = 0    def __iter__(self):        for val in self.seqn:            yield valclass X:    'Missing __getitem__ and __iter__'    def __init__(self, seqn):        self.seqn = seqn        self.i = 0    def next(self):        if self.i >= len(self.seqn): raise StopIteration        v = self.seqn[self.i]        self.i += 1        return vclass E:    'Test propagation of exceptions'    def __init__(self, seqn):        self.seqn = seqn        self.i = 0    def __iter__(self):        return self    def next(self):        3/0class N:    'Iterator missing next()'    def __init__(self, seqn):        self.seqn = seqn        self.i = 0    def __iter__(self):        return selfclass EnumerateTestCase(unittest.TestCase):    enum = enumerate    seq, res = 'abc', [(0,'a'), (1,'b'), (2,'c')]    def test_basicfunction(self):        # This one fails.        #self.assertEqual(type(self.enum(self.seq)), self.enum)        #        e = self.enum(self.seq)        self.assertEqual(iter(e), e)        self.assertEqual(list(self.enum(self.seq)), self.res)        self.enum.__doc__    def test_getitemseqn(self):        self.assertEqual(list(self.enum(G(self.seq))), self.res)        e = self.enum(G(''))        self.assertRaises(StopIteration, e.next)    def test_iteratorseqn(self):        self.assertEqual(list(self.enum(I(self.seq))), self.res)        e = self.enum(I(''))        self.assertRaises(StopIteration, e.next)    def test_iteratorgenerator(self):        self.assertEqual(list(self.enum(Ig(self.seq))), self.res)        e = self.enum(Ig(''))        self.assertRaises(StopIteration, e.next)    def test_noniterable(self):        self.assertRaises(TypeError, self.enum, X(self.seq))    def test_illformediterable(self):        self.assertRaises(TypeError, list, self.enum(N(self.seq)))    def test_exception_propagation(self):        self.assertRaises(ZeroDivisionError, list, self.enum(E(self.seq)))    def test_argumentcheck(self):        self.assertRaises(TypeError, self.enum) # no arguments        self.assertRaises(TypeError, self.enum, 1) # wrong type (not iterable)        self.assertRaises(TypeError, self.enum, 'abc', 2) # too many arguments    def test_tuple_reuse(self):        # Tests an implementation detail where tuple is reused        # whenever nothing else holds a reference to it        #self.assertEqual(len(Set(map(id, list(enumerate(self.seq))))), len(self.seq))        #self.assertEqual(len(Set(map(id, enumerate(self.seq)))), min(1,len(self.seq)))        passclass MyEnum(enumerate):    passclass SubclassTestCase(EnumerateTestCase):    enum = MyEnumclass TestEmpty(EnumerateTestCase):    seq, res = '', []class TestBig(EnumerateTestCase):    seq = range(10,20000,2)    res = zip(range(20000), seq)def test_main(verbose=None):    testclasses = (EnumerateTestCase, SubclassTestCase, TestEmpty, TestBig)    for test in testclasses:        test_support.run_unittest(test)    # verify reference counting    import sys    if verbose and hasattr(sys, "gettotalrefcount"):        counts = [None] * 5        for i in xrange(len(counts)):            test_support.run_unittest(*testclasses)            counts[i] = sys.gettotalrefcount()        print countsif __name__ == "__main__":    test_main(verbose=True)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?