| # 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 test_pointer_adoption_ext import * |
| |
| >>> num_a_instances() |
| 0 |
| |
| >>> a = create('dynamically allocated') |
| >>> num_a_instances() |
| 1 |
| |
| >>> a.content() |
| 'dynamically allocated' |
| |
| >>> innards = a.get_inner() |
| >>> innards.change('with an exposed reference') |
| >>> a.content() |
| 'with an exposed reference' |
| |
| # The a instance should be kept alive... |
| >>> a = None |
| >>> num_a_instances() |
| 1 |
| |
| # ...until we're done with its innards |
| >>> innards = None |
| >>> num_a_instances() |
| 0 |
| |
| >>> b = B() |
| >>> a = create('another') |
| >>> b.a_content() |
| 'empty' |
| >>> innards = b.adopt(a); |
| >>> b.a_content() |
| 'another' |
| >>> num_a_instances() |
| 1 |
| >>> del a # innards and b are both holding a reference |
| >>> num_a_instances() |
| 1 |
| >>> innards.change('yet another') |
| >>> b.a_content() |
| 'yet another' |
| |
| >>> del innards |
| >>> num_a_instances() # b still owns a reference to a |
| 1 |
| >>> del b |
| >>> num_a_instances() |
| 0 |
| |
| Test call policies for constructors here |
| |
| >>> a = create('second a') |
| >>> num_a_instances() |
| 1 |
| >>> b = B(a) |
| >>> num_a_instances() |
| 1 |
| >>> a.content() |
| 'second a' |
| |
| >>> del a |
| >>> num_a_instances() |
| 1 |
| >>> b.a_content() |
| 'second a' |
| |
| >>> del b |
| >>> num_a_instances() |
| 0 |
| |
| >>> assert as_A(create('dynalloc')) is not None |
| >>> base = Base() |
| >>> assert as_A(base) is None |
| """ |
| 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) |