94 lines
1.7 KiB
Python
94 lines
1.7 KiB
Python
# 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)
|