]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/python/test/extract.py
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / python / test / extract.py
1 # Copyright David Abrahams 2004. Distributed under the Boost
2 # Software License, Version 1.0. (See accompanying
3 # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 '''
5 >>> from extract_ext import *
6
7 Just about anything has a truth value in Python
8
9 >>> assert check_bool(None)
10 >>> extract_bool(None)
11 0
12
13 >>> assert check_bool(2)
14 >>> extract_bool(2)
15 1
16
17 >>> assert not check_bool('')
18
19 Check that object manager types work properly. These are a different
20 case because they wrap Python objects instead of being wrapped by them.
21
22 >>> assert not check_list(2)
23 >>> try: x = extract_list(2)
24 ... except TypeError as x:
25 ... if str(x) != 'Expecting an object of type list; got an object of type int instead':
26 ... print(x)
27 ... else:
28 ... print('expected an exception, got', x, 'instead')
29
30 Can't extract a list from a tuple. Use list(x) to convert a sequence
31 to a list:
32
33 >>> assert not check_list((1, 2, 3))
34 >>> assert check_list([1, 2, 3])
35 >>> extract_list([1, 2, 3])
36 [1, 2, 3]
37
38 Can get a char const* from a Python string:
39
40 >>> assert check_cstring('hello')
41 >>> extract_cstring('hello')
42 'hello'
43
44 Can't get a char const* from a Python int:
45
46 >>> assert not check_cstring(1)
47 >>> try: x = extract_cstring(1)
48 ... except TypeError: pass
49 ... else:
50 ... print('expected an exception, got', x, 'instead')
51
52 Extract an std::string (class) rvalue from a native Python type
53
54 >>> assert check_string('hello')
55 >>> extract_string('hello')
56 'hello'
57
58 Constant references are not treated as rvalues for the purposes of
59 extract:
60
61 >>> assert not check_string_cref('hello')
62
63 We can extract lvalues where appropriate:
64
65 >>> x = X(42)
66 >>> check_X(x)
67 1
68 >>> extract_X(x)
69 X(42)
70
71 >>> check_X_ptr(x)
72 1
73 >>> extract_X_ptr(x)
74 X(42)
75 >>> extract_X_ref(x)
76 X(42)
77
78 Demonstrate that double-extraction of an rvalue works, and all created
79 copies of the object are destroyed:
80
81 >>> n = count_Xs()
82 >>> double_X(333)
83 666
84 >>> count_Xs() - n
85 0
86
87 General check for cleanliness:
88
89 >>> del x
90 >>> count_Xs()
91 0
92 '''
93
94 def run(args = None):
95 import sys
96 import doctest
97
98 if args is not None:
99 sys.argv = args
100 return doctest.testmod(sys.modules.get(__name__))
101
102 if __name__ == '__main__':
103 print("running...")
104 import sys
105 status = run()[0]
106 if (status == 0): print("Done.")
107 sys.exit(status)