summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/python/test/extract.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/python/test/extract.py')
-rw-r--r--src/boost/libs/python/test/extract.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/boost/libs/python/test/extract.py b/src/boost/libs/python/test/extract.py
new file mode 100644
index 000000000..feda93a1d
--- /dev/null
+++ b/src/boost/libs/python/test/extract.py
@@ -0,0 +1,107 @@
+# 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)