123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- # Copyright David Abrahams 2004. Distributed under the Boost
- # Software License, Version 1.0. (See accompanying
- # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- '''
- >>> from shared_ptr_ext import *
- Test that shared_ptr<Derived> can be converted to shared_ptr<Base>
- >>> Y.store(YYY(42))
- >>> x = X(17)
- >>> null_x = null(x)
- >>> null_x # should be None
- >>> identity(null_x) # should also be None
- >>> a = New(1)
- >>> A.call_f(a)
- 1
- >>> New(0)
- >>> type(factory(3))
- <class 'shared_ptr_ext.Y'>
- >>> type(factory(42))
- <class 'shared_ptr_ext.YY'>
- >>> class P(Z):
- ... def v(self):
- ... return -Z.v(self);
- ... def __del__(self):
- ... print('bye')
- ...
- >>> p = P(12)
- >>> p.value()
- 12
- >>> p.v()
- -12
- >>> look(p)
- 12
- >>> try: modify(p)
- ... except TypeError: pass
- ... else: 'print(expected a TypeError)'
- >>> look(None)
- -1
- >>> store(p)
- >>> del p
- >>> Z.get().v()
- -12
- >>> Z.count()
- 1
- >>> Z.look_store()
- 12
- >>> Z.release()
- bye
- >>> Z.count()
- 0
- >>> z = Z(13)
- >>> z.value()
- 13
- >>> z.v()
- 13
- >>> try: modify(z)
- ... except TypeError: pass
- ... else: 'print(expected a TypeError)'
- >>> Z.get() # should be None
- >>> store(z)
- >>> assert Z.get() is z # show that deleter introspection works
- >>> del z
- >>> Z.get().value()
- 13
- >>> Z.count()
- 1
- >>> Z.look_store()
- 13
- >>> Z.release()
- >>> Z.count()
- 0
- >>> x = X(17)
- >>> x.value()
- 17
- >>> look(x)
- 17
- >>> try: modify(x)
- ... except TypeError: pass
- ... else: 'print(expected a TypeError)'
- >>> look(None)
- -1
- >>> store(x)
- >>> del x
- >>> X.count()
- 1
- >>> X.look_store()
- 17
- >>> X.release()
- >>> X.count()
- 0
- >>> y = Y(19)
- >>> y.value()
- 19
- >>> modify(y)
- >>> look(y)
- -1
- >>> store(Y(23))
- >>> Y.count()
- 1
- >>> Y.look_store()
- 23
- >>> Y.release()
- >>> Y.count()
- 0
- '''
- def run(args = None):
- import sys
- import doctest
- if args is not None:
- sys.argv = args
- return doctest.testmod(sys.modules.get(__name__))
- if __name__ == '__main__':
- print("running...")
- import sys
- status = run()[0]
- if (status == 0): print("Done.")
- sys.exit(status)
|