]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/python/test/map_indexing_suite.py
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / python / test / map_indexing_suite.py
1 # Copyright Joel de Guzman 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 from __future__ import print_function
5 '''
6
7 #####################################################################
8 # Check an object that we will use as container element
9 #####################################################################
10
11 >>> from map_indexing_suite_ext import *
12 >>> assert "map_indexing_suite_IntMap_entry" in dir()
13 >>> assert "map_indexing_suite_TestMap_entry" in dir()
14 >>> assert "map_indexing_suite_XMap_entry" in dir()
15 >>> assert "map_indexing_suite_AMap_entry" in dir()
16 >>> x = X('hi')
17 >>> x
18 hi
19 >>> x.reset() # a member function that modifies X
20 >>> x
21 reset
22 >>> x.foo() # another member function that modifies X
23 >>> x
24 foo
25
26 # test that a string is implicitly convertible
27 # to an X
28 >>> x_value('bochi bochi')
29 'gotya bochi bochi'
30
31 #####################################################################
32 # Iteration
33 #####################################################################
34 >>> def print_xmap(xmap):
35 ... s = '[ '
36 ... for x in xmap:
37 ... s += repr(x)
38 ... s += ' '
39 ... s += ']'
40 ... print(s)
41
42 #####################################################################
43 # Setting (adding entries)
44 #####################################################################
45 >>> xm = XMap()
46 >>> xm['joel'] = 'apple'
47 >>> xm['tenji'] = 'orange'
48 >>> xm['mariel'] = 'grape'
49 >>> xm['tutit'] = 'banana'
50 >>> xm['kim'] = 'kiwi'
51
52 >>> print_xmap(xm)
53 [ (joel, apple) (kim, kiwi) (mariel, grape) (tenji, orange) (tutit, banana) ]
54
55 #####################################################################
56 # Changing an entry
57 #####################################################################
58 >>> xm['joel'] = 'pineapple'
59 >>> print_xmap(xm)
60 [ (joel, pineapple) (kim, kiwi) (mariel, grape) (tenji, orange) (tutit, banana) ]
61
62 #####################################################################
63 # Deleting an entry
64 #####################################################################
65 >>> del xm['joel']
66 >>> print_xmap(xm)
67 [ (kim, kiwi) (mariel, grape) (tenji, orange) (tutit, banana) ]
68
69 #####################################################################
70 # adding an entry
71 #####################################################################
72 >>> xm['joel'] = 'apple'
73 >>> print_xmap(xm)
74 [ (joel, apple) (kim, kiwi) (mariel, grape) (tenji, orange) (tutit, banana) ]
75
76 #####################################################################
77 # Indexing
78 #####################################################################
79 >>> len(xm)
80 5
81 >>> xm['joel']
82 apple
83 >>> xm['tenji']
84 orange
85 >>> xm['mariel']
86 grape
87 >>> xm['tutit']
88 banana
89 >>> xm['kim']
90 kiwi
91
92 #####################################################################
93 # Calling a mutating function of a container element
94 #####################################################################
95 >>> xm['joel'].reset()
96 >>> xm['joel']
97 reset
98
99 #####################################################################
100 # Copying a container element
101 #####################################################################
102 >>> x = X(xm['mariel'])
103 >>> x
104 grape
105 >>> x.foo()
106 >>> x
107 foo
108 >>> xm['mariel'] # should not be changed to 'foo'
109 grape
110
111 #####################################################################
112 # Referencing a container element
113 #####################################################################
114 >>> x = xm['mariel']
115 >>> x
116 grape
117 >>> x.foo()
118 >>> x
119 foo
120 >>> xm['mariel'] # should be changed to 'foo'
121 foo
122
123 >>> xm['mariel'] = 'grape' # take it back
124 >>> xm['joel'] = 'apple' # take it back
125
126 #####################################################################
127 # Contains
128 #####################################################################
129 >>> assert 'joel' in xm
130 >>> assert 'mariel' in xm
131 >>> assert 'tenji' in xm
132 >>> assert 'tutit' in xm
133 >>> assert 'kim' in xm
134 >>> assert not 'X' in xm
135 >>> assert not 12345 in xm
136
137 #####################################################################
138 # Some references to the container elements
139 #####################################################################
140
141 >>> z0 = xm['joel']
142 >>> z1 = xm['mariel']
143 >>> z2 = xm['tenji']
144 >>> z3 = xm['tutit']
145 >>> z4 = xm['kim']
146
147 >>> z0 # proxy
148 apple
149 >>> z1 # proxy
150 grape
151 >>> z2 # proxy
152 orange
153 >>> z3 # proxy
154 banana
155 >>> z4 # proxy
156 kiwi
157
158 #####################################################################
159 # Delete some container element
160 #####################################################################
161
162 >>> del xm['tenji']
163 >>> print_xmap(xm)
164 [ (joel, apple) (kim, kiwi) (mariel, grape) (tutit, banana) ]
165
166 >>> del xm['tutit']
167 >>> print_xmap(xm)
168 [ (joel, apple) (kim, kiwi) (mariel, grape) ]
169
170 #####################################################################
171 # Show that the references are still valid
172 #####################################################################
173 >>> z0 # proxy
174 apple
175 >>> z1 # proxy
176 grape
177 >>> z2 # proxy detached
178 orange
179 >>> z3 # proxy detached
180 banana
181 >>> z4 # proxy
182 kiwi
183
184 #####################################################################
185 # Show that iteration allows mutable access to the elements
186 #####################################################################
187 >>> for x in xm:
188 ... x.data().reset()
189 >>> print_xmap(xm)
190 [ (joel, reset) (kim, reset) (mariel, reset) ]
191
192 #####################################################################
193 # Some more...
194 #####################################################################
195
196 >>> tm = TestMap()
197 >>> tm["joel"] = X("aaa")
198 >>> tm["kimpo"] = X("bbb")
199 >>> print_xmap(tm)
200 [ (joel, aaa) (kimpo, bbb) ]
201 >>> for el in tm: #doctest: +NORMALIZE_WHITESPACE
202 ... print(el.key(), end='')
203 ... dom = el.data()
204 joel kimpo
205
206 #####################################################################
207 # Test custom converter...
208 #####################################################################
209
210 >>> am = AMap()
211 >>> am[3] = 4
212 >>> am[3]
213 4
214 >>> for i in am:
215 ... i.data()
216 4
217
218 #####################################################################
219 # END....
220 #####################################################################
221
222 '''
223
224
225 def run(args = None):
226 import sys
227 import doctest
228
229 if args is not None:
230 sys.argxm = args
231 return doctest.testmod(sys.modules.get(__name__))
232
233 if __name__ == '__main__':
234 print('running...')
235 import sys
236 status = run()[0]
237 if (status == 0): print("Done.")
238 sys.exit(status)
239
240
241
242
243