test_types.py

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

PY
765
字号
#    a.index(0, 4*sys.maxint,-4*sys.maxint)#except ValueError:#    pass#else:#    raise TestFailed, 'list index, maxint,-maxint argument'try:    a.index(2,0,-10)except ValueError:    passelse:    raise TestFailed, 'list index, very -stop argument'a.remove(0)try:    a.index(2,0,4)except ValueError:    passelse:    raise TestFailed, 'list index, stop argument.'if a != [-2,-1,0,1,2]: raise TestFailed, 'list remove'a.reverse()if a != [2,1,0,-1,-2]: raise TestFailed, 'list reverse'a.sort()if a != [-2,-1,0,1,2]: raise TestFailed, 'list sort'def revcmp(a, b): return cmp(b, a)a.sort(revcmp)if a != [2,1,0,-1,-2]: raise TestFailed, 'list sort with cmp func'# The following dumps core in unpatched Python 1.5:def myComparison(x,y):    return cmp(x%3, y%7)z = range(12)z.sort(myComparison)try: z.sort(2)except TypeError: passelse: raise TestFailed, 'list sort compare function is not callable'#XXX need a strategy for locking list during sort.#def selfmodifyingComparison(x,y):#    z.append(1)#    return cmp(x, y)#try: z.sort(selfmodifyingComparison)#except ValueError: pass#else: raise TestFailed, 'modifying list during sort'try: z.sort(lambda x, y: 's')except TypeError: passelse: raise TestFailed, 'list sort compare function does not return int'# Test extreme cases with long intsa = [0,1,2,3,4]if a[ -pow(2,128L): 3 ] != [0,1,2]:    raise TestFailed, "list slicing with too-small long integer"if a[ 3: pow(2,145L) ] != [3,4]:    raise TestFailed, "list slicing with too-large long integer"# extended slicing#  subscripta = [0,1,2,3,4]vereq(a[::], a)vereq(a[::2], [0,2,4])vereq(a[1::2], [1,3])vereq(a[::-1], [4,3,2,1,0])vereq(a[::-2], [4,2,0])vereq(a[3::-2], [3,1])vereq(a[-100:100:], a)vereq(a[100:-100:-1], a[::-1])vereq(a[-100L:100L:2L], [0,2,4])vereq(a[1000:2000:2], [])vereq(a[-1000:-2000:-2], [])#  deletiondel a[::2]vereq(a, [1,3])a = range(5)del a[1::2]vereq(a, [0,2,4])a = range(5)del a[1::-2]vereq(a, [0,2,3,4])a = range(10)del a[::1000]vereq(a, [1, 2, 3, 4, 5, 6, 7, 8, 9])#  assignmenta = range(10)a[::2] = [-1]*5vereq(a, [-1, 1, -1, 3, -1, 5, -1, 7, -1, 9])a = range(10)a[::-4] = [10]*3vereq(a, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10])a = range(4)a[::-1] = avereq(a, [3, 2, 1, 0])a = range(10)b = a[:]c = a[:]a[2:3] = ["two", "elements"]b[slice(2,3)] = ["two", "elements"]c[2:3:] = ["two", "elements"]vereq(a, b)vereq(a, c)a = range(10)a[::2] = tuple(range(5))vereq(a, [0, 1, 1, 3, 2, 5, 3, 7, 4, 9])# Verify that __getitem__ overrides are not recognized by __iter__class L(list):    def __getitem__(self, key):        return str(key) + '!!!'vereq(iter(L([1,2])).next(), 1)print '6.6 Mappings == Dictionaries'# calling built-in types without argument must return emptyif dict() != {}: raise TestFailed,'dict() does not return {}'d = {}if d.keys() != []: raise TestFailed, '{}.keys()'if d.values() != []: raise TestFailed, '{}.values()'if d.items() != []: raise TestFailed, '{}.items()'if d.has_key('a') != 0: raise TestFailed, '{}.has_key(\'a\')'if ('a' in d) != 0: raise TestFailed, "'a' in {}"if ('a' not in d) != 1: raise TestFailed, "'a' not in {}"if len(d) != 0: raise TestFailed, 'len({})'d = {'a': 1, 'b': 2}if len(d) != 2: raise TestFailed, 'len(dict)'k = d.keys()k.sort()if k != ['a', 'b']: raise TestFailed, 'dict keys()'if d.has_key('a') and d.has_key('b') and not d.has_key('c'): passelse: raise TestFailed, 'dict keys()'if 'a' in d and 'b' in d and 'c' not in d: passelse: raise TestFailed, 'dict keys() # in/not in version'if d['a'] != 1 or d['b'] != 2: raise TestFailed, 'dict item'd['c'] = 3d['a'] = 4if d['c'] != 3 or d['a'] != 4: raise TestFailed, 'dict item assignment'del d['b']if d != {'a': 4, 'c': 3}: raise TestFailed, 'dict item deletion'# dict.clear()d = {1:1, 2:2, 3:3}d.clear()if d != {}: raise TestFailed, 'dict clear'# dict.update()d.update({1:100})d.update({2:20})d.update({1:1, 2:2, 3:3})if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict update'd.clear()try: d.update(None)except AttributeError: passelse: raise TestFailed, 'dict.update(None), AttributeError expected'class SimpleUserDict:    def __init__(self):        self.d = {1:1, 2:2, 3:3}    def keys(self):        return self.d.keys()    def __getitem__(self, i):        return self.d[i]d.update(SimpleUserDict())if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict.update(instance)'d.clear()class FailingUserDict:    def keys(self):        raise ValueErrortry: d.update(FailingUserDict())except ValueError: passelse: raise TestFailed, 'dict.keys() expected ValueError'class FailingUserDict:    def keys(self):        class BogonIter:            def __iter__(self):                raise ValueError        return BogonIter()try: d.update(FailingUserDict())except ValueError: passelse: raise TestFailed, 'iter(dict.keys()) expected ValueError'class FailingUserDict:    def keys(self):        class BogonIter:            def __init__(self):                self.i = 1            def __iter__(self):                return self            def next(self):                if self.i:                    self.i = 0                    return 'a'                raise ValueError        return BogonIter()    def __getitem__(self, key):        return keytry: d.update(FailingUserDict())except ValueError: passelse: raise TestFailed, 'iter(dict.keys()).next() expected ValueError'class FailingUserDict:    def keys(self):        class BogonIter:            def __init__(self):                self.i = ord('a')            def __iter__(self):                return self            def next(self):                if self.i <= ord('z'):                    rtn = chr(self.i)                    self.i += 1                    return rtn                raise StopIteration        return BogonIter()    def __getitem__(self, key):        raise ValueErrortry: d.update(FailingUserDict())except ValueError: passelse: raise TestFailed, 'dict.update(), __getitem__ expected ValueError'#XXX fromkeys not a classmethod yet.# dict.fromkeys()#if dict.fromkeys('abc') != {'a':None, 'b':None, 'c':None}:#    raise TestFailed, 'dict.fromkeys did not work as a class method'd = {}if d.fromkeys('abc') is d:    raise TestFailed, 'dict.fromkeys did not return a new dict'if d.fromkeys('abc') != {'a':None, 'b':None, 'c':None}:    raise TestFailed, 'dict.fromkeys failed with default value'if d.fromkeys((4,5),0) != {4:0, 5:0}:    raise TestFailed, 'dict.fromkeys failed with specified value'if d.fromkeys([]) != {}:    raise TestFailed, 'dict.fromkeys failed with null sequence'def g():    yield 1if d.fromkeys(g()) != {1:None}:    raise TestFailed, 'dict.fromkeys failed with a generator'try: {}.fromkeys(3)except TypeError: passelse: raise TestFailed, 'dict.fromkeys failed to raise TypeError'#XXX fromkeys in a subclass doesn't work yet.class dictlike(dict): pass#if dictlike.fromkeys('a') != {'a':None}:#    raise TestFailed, 'dictsubclass.fromkeys did not inherit'if dictlike().fromkeys('a') != {'a':None}:    raise TestFailed, 'dictsubclass.fromkeys did not inherit'#if type(dictlike.fromkeys('a')) is not dictlike:#    raise TestFailed, 'dictsubclass.fromkeys created wrong type'#if type(dictlike().fromkeys('a')) is not dictlike:#    raise TestFailed, 'dictsubclass.fromkeys created wrong type'from UserDict import UserDictclass mydict(dict):    def __new__(cls):        return UserDict()#XXX fromkeys in a subclass doesn't work yet.#ud = mydict.fromkeys('ab')#if ud != {'a':None, 'b':None} or not isinstance(ud,UserDict):#    raise TestFailed, 'fromkeys did not instantiate using  __new__'# dict.copy()d = {1:1, 2:2, 3:3}if d.copy() != {1:1, 2:2, 3:3}: raise TestFailed, 'dict copy'if {}.copy() != {}: raise TestFailed, 'empty dict copy'# dict.get()d = {}if d.get('c') is not None: raise TestFailed, 'missing {} get, no 2nd arg'if d.get('c', 3) != 3: raise TestFailed, 'missing {} get, w/ 2nd arg'd = {'a' : 1, 'b' : 2}if d.get('c') is not None: raise TestFailed, 'missing dict get, no 2nd arg'if d.get('c', 3) != 3: raise TestFailed, 'missing dict get, w/ 2nd arg'if d.get('a') != 1: raise TestFailed, 'present dict get, no 2nd arg'if d.get('a', 3) != 1: raise TestFailed, 'present dict get, w/ 2nd arg'# dict.setdefault()d = {}if d.setdefault('key0') is not None:    raise TestFailed, 'missing {} setdefault, no 2nd arg'if d.setdefault('key0') is not None:    raise TestFailed, 'present {} setdefault, no 2nd arg'd.setdefault('key', []).append(3)if d['key'][0] != 3:    raise TestFailed, 'missing {} setdefault, w/ 2nd arg'd.setdefault('key', []).append(4)if len(d['key']) != 2:    raise TestFailed, 'present {} setdefault, w/ 2nd arg'# dict.popitem()for copymode in -1, +1:    # -1: b has same structure as a    # +1: b is a.copy()    for log2size in range(12):        size = 2**log2size        a = {}        b = {}        for i in range(size):            a[`i`] = i            if copymode < 0:                b[`i`] = i        if copymode > 0:            b = a.copy()        for i in range(size):            ka, va = ta = a.popitem()            if va != int(ka): raise TestFailed, "a.popitem: %s" % str(ta)            kb, vb = tb = b.popitem()            if vb != int(kb): raise TestFailed, "b.popitem: %s" % str(tb)            if copymode < 0 and ta != tb:                raise TestFailed, "a.popitem != b.popitem: %s, %s" % (                    str(ta), str(tb))        if a: raise TestFailed, 'a not empty after popitems: %s' % str(a)        if b: raise TestFailed, 'b not empty after popitems: %s' % str(b)d.clear()try: d.popitem()except KeyError: passelse: raise TestFailed, "{}.popitem doesn't raise KeyError"# Tests for pop with specified keyd.clear()k, v = 'abc', 'def'd[k] = vtry: d.pop('ghi')except KeyError: passelse: raise TestFailed, "{}.pop(k) doesn't raise KeyError when k not in dictionary"if d.pop(k) != v: raise TestFailed, "{}.pop(k) doesn't find known key/value pair"if len(d) > 0: raise TestFailed, "{}.pop(k) failed to remove the specified pair"try: d.pop(k)except KeyError: passelse: raise TestFailed, "{}.pop(k) doesn't raise KeyError when dictionary is empty"# verify longs/ints get same value when key > 32 bits (for 64-bit archs)# see SF bug #689659x = 4503599627370496Ly = 4503599627370496h = {x: 'anything', y: 'something else'}if h[x] != h[y]:    raise TestFailed, "long/int key should match"if d.pop(k, v) != v: raise TestFailed, "{}.pop(k, v) doesn't return default value"d[k] = vif d.pop(k, 1) != v: raise TestFailed, "{}.pop(k, v) doesn't find known key/value pair"#XXX need locking strategy.#d[1] = 1#try:#    for i in d:#        d[i+1] = 1#except RuntimeError:#    pass#else:#    raise TestFailed, "changing dict size during iteration doesn't raise Error"try: type(1, 2)except TypeError: passelse: raise TestFailed, 'type(), w/2 args expected TypeError'try: type(1, 2, 3, 4)except TypeError: passelse: raise TestFailed, 'type(), w/4 args expected TypeError'#XXX: Jython will probably never have buffers#print 'Buffers'#try: buffer('asdf', -1)#except ValueError: pass#else: raise TestFailed, "buffer('asdf', -1) should raise ValueError"##try: buffer(None)#except TypeError: pass#else: raise TestFailed, "buffer(None) should raise TypeError"##a = buffer('asdf')#hash(a)#b = a * 5#if a == b:#    raise TestFailed, 'buffers should not be equal'#if str(b) != ('asdf' * 5):#    raise TestFailed, 'repeated buffer has wrong content'#if str(a * 0) != '':#    raise TestFailed, 'repeated buffer zero times has wrong content'#if str(a + buffer('def')) != 'asdfdef':#    raise TestFailed, 'concatenation of buffers yields wrong content'##try: a[1] = 'g'#except TypeError: pass#else: raise TestFailed, "buffer assignment should raise TypeError"##try: a[0:1] = 'g'#except TypeError: pass#else: raise TestFailed, "buffer slice assignment should raise TypeError"

⌨️ 快捷键说明

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