test_descr.py

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

PY
2,316
字号
    else:        raise TestFailed, "NotImplemented should have caused TypeError"def longs():    if verbose: print "Testing long operations..."    numops(100L, 3L)def floats():    if verbose: print "Testing float operations..."    numops(100.0, 3.0)def complexes():    if verbose: print "Testing complex operations..."    numops(100.0j, 3.0j, skip=['lt', 'le', 'gt', 'ge', 'int', 'long', 'float'])    class Number(complex):        __slots__ = ['prec']        def __new__(cls, *args, **kwds):            result = complex.__new__(cls, *args)            result.prec = kwds.get('prec', 12)            return result        def __repr__(self):            prec = self.prec            if self.imag == 0.0:                return "%.*g" % (prec, self.real)            if self.real == 0.0:                return "%.*gj" % (prec, self.imag)            return "(%.*g+%.*gj)" % (prec, self.real, prec, self.imag)        __str__ = __repr__    a = Number(3.14, prec=6)    vereq(`a`, "3.14")    vereq(a.prec, 6)    a = Number(a, prec=2)    vereq(`a`, "3.1")    vereq(a.prec, 2)    a = Number(234.5)    vereq(`a`, "234.5")    vereq(a.prec, 12)def spamlists():    if verbose: print "Testing spamlist operations..."    import copy, xxsubtype as spam    def spamlist(l, memo=None):        import xxsubtype as spam        return spam.spamlist(l)    # This is an ugly hack:    copy._deepcopy_dispatch[spam.spamlist] = spamlist    testbinop(spamlist([1]), spamlist([2]), spamlist([1,2]), "a+b", "__add__")    testbinop(spamlist([1,2,3]), 2, 1, "b in a", "__contains__")    testbinop(spamlist([1,2,3]), 4, 0, "b in a", "__contains__")    testbinop(spamlist([1,2,3]), 1, 2, "a[b]", "__getitem__")    testternop(spamlist([1,2,3]), 0, 2, spamlist([1,2]),               "a[b:c]", "__getslice__")    testsetop(spamlist([1]), spamlist([2]), spamlist([1,2]),              "a+=b", "__iadd__")    testsetop(spamlist([1,2]), 3, spamlist([1,2,1,2,1,2]), "a*=b", "__imul__")    testunop(spamlist([1,2,3]), 3, "len(a)", "__len__")    testbinop(spamlist([1,2]), 3, spamlist([1,2,1,2,1,2]), "a*b", "__mul__")    testbinop(spamlist([1,2]), 3, spamlist([1,2,1,2,1,2]), "b*a", "__rmul__")    testset2op(spamlist([1,2]), 1, 3, spamlist([1,3]), "a[b]=c", "__setitem__")    testset3op(spamlist([1,2,3,4]), 1, 3, spamlist([5,6]),               spamlist([1,5,6,4]), "a[b:c]=d", "__setslice__")    # Test subclassing    class C(spam.spamlist):        def foo(self): return 1    a = C()    vereq(a, [])    vereq(a.foo(), 1)    a.append(100)    vereq(a, [100])    vereq(a.getstate(), 0)    a.setstate(42)    vereq(a.getstate(), 42)def spamdicts():    if verbose: print "Testing spamdict operations..."    import copy, xxsubtype as spam    def spamdict(d, memo=None):        import xxsubtype as spam        sd = spam.spamdict()        for k, v in d.items(): sd[k] = v        return sd    # This is an ugly hack:    copy._deepcopy_dispatch[spam.spamdict] = spamdict    testbinop(spamdict({1:2}), spamdict({2:1}), -1, "cmp(a,b)", "__cmp__")    testbinop(spamdict({1:2,3:4}), 1, 1, "b in a", "__contains__")    testbinop(spamdict({1:2,3:4}), 2, 0, "b in a", "__contains__")    testbinop(spamdict({1:2,3:4}), 1, 2, "a[b]", "__getitem__")    d = spamdict({1:2,3:4})    l1 = []    for i in d.keys(): l1.append(i)    l = []    for i in iter(d): l.append(i)    vereq(l, l1)    l = []    for i in d.__iter__(): l.append(i)    vereq(l, l1)    l = []    for i in type(spamdict({})).__iter__(d): l.append(i)    vereq(l, l1)    straightd = {1:2, 3:4}    spamd = spamdict(straightd)    testunop(spamd, 2, "len(a)", "__len__")    testunop(spamd, repr(straightd), "repr(a)", "__repr__")    testset2op(spamdict({1:2,3:4}), 2, 3, spamdict({1:2,2:3,3:4}),               "a[b]=c", "__setitem__")    # Test subclassing    class C(spam.spamdict):        def foo(self): return 1    a = C()    vereq(a.items(), [])    vereq(a.foo(), 1)    a['foo'] = 'bar'    vereq(a.items(), [('foo', 'bar')])    vereq(a.getstate(), 0)    a.setstate(100)    vereq(a.getstate(), 100)def pydicts():    if verbose: print "Testing Python subclass of dict..."    verify(issubclass(dict, dict))    verify(isinstance({}, dict))    d = dict()    vereq(d, {})    verify(d.__class__ is dict)    verify(isinstance(d, dict))    class C(dict):        state = -1        def __init__(self, *a, **kw):            if a:                vereq(len(a), 1)                self.state = a[0]            if kw:                for k, v in kw.items(): self[v] = k        def __getitem__(self, key):            return self.get(key, 0)        def __setitem__(self, key, value):            verify(isinstance(key, type(0)))            dict.__setitem__(self, key, value)        def setstate(self, state):            self.state = state        def getstate(self):            return self.state    verify(issubclass(C, dict))    a1 = C(12)    vereq(a1.state, 12)    a2 = C(foo=1, bar=2)    vereq(a2[1] == 'foo' and a2[2], 'bar')    a = C()    vereq(a.state, -1)    vereq(a.getstate(), -1)    a.setstate(0)    vereq(a.state, 0)    vereq(a.getstate(), 0)    a.setstate(10)    vereq(a.state, 10)    vereq(a.getstate(), 10)    vereq(a[42], 0)    a[42] = 24    vereq(a[42], 24)    if verbose: print "pydict stress test ..."    N = 50    for i in range(N):        a[i] = C()        for j in range(N):            a[i][j] = i*j    for i in range(N):        for j in range(N):            vereq(a[i][j], i*j)def pylists():    if verbose: print "Testing Python subclass of list..."    class C(list):        def __getitem__(self, i):            return list.__getitem__(self, i) + 100        def __getslice__(self, i, j):            return (i, j)    a = C()    a.extend([0,1,2])    vereq(a[0], 100)    vereq(a[1], 101)    vereq(a[2], 102)    vereq(a[100:200], (100,200))def metaclass():    if verbose: print "Testing __metaclass__..."    class C:        __metaclass__ = type        def __init__(self):            self.__state = 0        def getstate(self):            return self.__state        def setstate(self, state):            self.__state = state    a = C()    vereq(a.getstate(), 0)    a.setstate(10)    vereq(a.getstate(), 10)    class D:        class __metaclass__(type):            def myself(cls): return cls    vereq(D.myself(), D)    d = D()    verify(d.__class__ is D)    class M1(type):        def __new__(cls, name, bases, dict):            dict['__spam__'] = 1            return type.__new__(cls, name, bases, dict)    class C:        __metaclass__ = M1    vereq(C.__spam__, 1)    c = C()    vereq(c.__spam__, 1)    class _instance(object):        pass    class M2(object):        def __new__(cls, name, bases, dict):            self = object.__new__(cls)            self.name = name            self.bases = bases            self.dict = dict            return self        __new__ = staticmethod(__new__)        def __call__(self):            it = _instance()            # Early binding of methods            for key in self.dict:                if key.startswith("__"):                    continue                setattr(it, key, self.dict[key].__get__(it, self))            return it    class C:        __metaclass__ = M2        def spam(self):            return 42    vereq(C.name, 'C')    vereq(C.bases, ())    verify('spam' in C.dict)    c = C()    vereq(c.spam(), 42)    # More metaclass examples    class autosuper(type):        # Automatically add __super to the class        # This trick only works for dynamic classes        def __new__(metaclass, name, bases, dict):            cls = super(autosuper, metaclass).__new__(metaclass,                                                      name, bases, dict)            # Name mangling for __super removes leading underscores            while name[:1] == "_":                name = name[1:]            if name:                name = "_%s__super" % name            else:                name = "__super"            setattr(cls, name, super(cls))            return cls    class A:        __metaclass__ = autosuper        def meth(self):            return "A"    class B(A):        def meth(self):            return "B" + self.__super.meth()    class C(A):        def meth(self):            return "C" + self.__super.meth()    class D(C, B):        def meth(self):            return "D" + self.__super.meth()    vereq(D().meth(), "DCBA")    class E(B, C):        def meth(self):            return "E" + self.__super.meth()    vereq(E().meth(), "EBCA")    class autoproperty(type):        # Automatically create property attributes when methods        # named _get_x and/or _set_x are found        def __new__(metaclass, name, bases, dict):            hits = {}            for key, val in dict.iteritems():                if key.startswith("_get_"):                    key = key[5:]                    get, set = hits.get(key, (None, None))                    get = val                    hits[key] = get, set                elif key.startswith("_set_"):                    key = key[5:]                    get, set = hits.get(key, (None, None))                    set = val                    hits[key] = get, set            for key, (get, set) in hits.iteritems():                dict[key] = property(get, set)            return super(autoproperty, metaclass).__new__(metaclass,                                                        name, bases, dict)    class A:        __metaclass__ = autoproperty        def _get_x(self):            return -self.__x        def _set_x(self, x):            self.__x = -x    a = A()    verify(not hasattr(a, "x"))    a.x = 12    vereq(a.x, 12)    vereq(a._A__x, -12)    class multimetaclass(autoproperty, autosuper):        # Merge of multiple cooperating metaclasses        pass    class A:        __metaclass__ = multimetaclass        def _get_x(self):            return "A"    class B(A):        def _get_x(self):            return "B" + self.__super._get_x()    class C(A):        def _get_x(self):            return "C" + self.__super._get_x()    class D(C, B):        def _get_x(self):            return "D" + self.__super._get_x()    vereq(D().x, "DCBA")    # Make sure type(x) doesn't call x.__class__.__init__    class T(type):        counter = 0        def __init__(self, *args):            T.counter += 1    class C:        __metaclass__ = T    vereq(T.counter, 1)    a = C()    vereq(type(a), C)    vereq(T.counter, 1)    class C(object): pass    c = C()    try: c()    except TypeError: pass    else: raise TestError, "calling object w/o call method should raise TypeError"def pymods():    if verbose: print "Testing Python subclass of module..."    log = []    import sys    MT = type(sys)    class MM(MT):        def __init__(self):            MT.__init__(self)        def __getattribute__(self, name):            log.append(("getattr", name))            return MT.__getattribute__(self, name)        def __setattr__(self, name, value):            log.append(("setattr", name, value))            MT.__setattr__(self, name, value)        def __delattr__(self, name):            log.append(("delattr", name))            MT.__delattr__(self, name)    a = MM()    a.foo = 12    x = a.foo    del a.foo    vereq(log, [("setattr", "foo", 12),                ("getattr", "foo"),                ("delattr", "foo")])def multi():    if verbose: print "Testing multiple inheritance..."    class C(object):        def __init__(self):            self.__state = 0        def getstate(self):            return self.__state        def setstate(self, state):            self.__state = state    a = C()    vereq(a.getstate(), 0)    a.setstate(10)    vereq(a.getstate(), 10)    class D(dict, C):        def __init__(self):            type({}).__init__(self)            C.__init__(self)    d = D()    vereq(d.keys(), [])    d["hello"] = "world"    vereq(d.items(), [("hello", "world")])    vereq(d["hello"], "world")    vereq(d.getstate(), 0)    d.setstate(10)    vereq(d.getstate(), 10)    vereq(D.__mro__, (D, dict, C, object))    # SF bug #442833    class Node(object):        def __int__(self):            return int(self.foo())        def foo(self):            return "23"    class Frag(Node, list):        def foo(self):            return "42"    vereq(Node().__int__(), 23)    vereq(int(Node()), 23)    vereq(Frag().__int__(), 42)    vereq(int(Frag()), 42)    # MI mixing classic and new-style classes.    class A:        x = 1    class B(A):        pass    class C(A):        x = 2    class D(B, C):        pass    vereq(D.x, 1)    # Classic MRO is preserved for a classic base class.    class E(D, object):        pass    vereq(E.__mro__, (E, D, B, A, C, object))    vereq(E.x, 1)    # But with a mix of classic bases, their MROs are combined using    # new-style MRO.    class F(B, C, object):        pass    vereq(F.__mro__, (F, B, C, A, object))    vereq(F.x, 2)    # Try something else.    class C:        def cmethod(self):            return "C a"        def all_method(self):            return "C b"    class M1(C, object):        def m1method(self):            return "M1 a"        def all_method(self):            return "M1 b"    vereq(M1.__mro__, (M1, C, object))    m = M1()    vereq(m.cmethod(), "C a")    vereq(m.m1method(), "M1 a")    vereq(m.all_method(), "M1 b")    class D(C):

⌨️ 快捷键说明

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