123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # 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 extract_ext import *
- Just about anything has a truth value in Python
- >>> assert check_bool(None)
- >>> extract_bool(None)
- 0
- >>> assert check_bool(2)
- >>> extract_bool(2)
- 1
- >>> assert not check_bool('')
- Check that object manager types work properly. These are a different
- case because they wrap Python objects instead of being wrapped by them.
- >>> assert not check_list(2)
- >>> try: x = extract_list(2)
- ... except TypeError as x:
- ... if str(x) != 'Expecting an object of type list; got an object of type int instead':
- ... print(x)
- ... else:
- ... print('expected an exception, got', x, 'instead')
- Can't extract a list from a tuple. Use list(x) to convert a sequence
- to a list:
-
- >>> assert not check_list((1, 2, 3))
- >>> assert check_list([1, 2, 3])
- >>> extract_list([1, 2, 3])
- [1, 2, 3]
- Can get a char const* from a Python string:
- >>> assert check_cstring('hello')
- >>> extract_cstring('hello')
- 'hello'
- Can't get a char const* from a Python int:
-
- >>> assert not check_cstring(1)
- >>> try: x = extract_cstring(1)
- ... except TypeError: pass
- ... else:
- ... print('expected an exception, got', x, 'instead')
- Extract an std::string (class) rvalue from a native Python type
- >>> assert check_string('hello')
- >>> extract_string('hello')
- 'hello'
- Constant references are not treated as rvalues for the purposes of
- extract:
- >>> assert not check_string_cref('hello')
- We can extract lvalues where appropriate:
- >>> x = X(42)
- >>> check_X(x)
- 1
- >>> extract_X(x)
- X(42)
- >>> check_X_ptr(x)
- 1
- >>> extract_X_ptr(x)
- X(42)
- >>> extract_X_ref(x)
- X(42)
- Demonstrate that double-extraction of an rvalue works, and all created
- copies of the object are destroyed:
- >>> n = count_Xs()
- >>> double_X(333)
- 666
- >>> count_Xs() - n
- 0
- General check for cleanliness:
- >>> del x
- >>> count_Xs()
- 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)
|