]> git.madduck.net Git - etc/vim.git/blob - tests/expression.py

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Parse complex expressions in parameters after * and **
[etc/vim.git] / tests / expression.py
1 ...
2 'some_string'
3 b'\\xa3'
4 Name
5 None
6 True
7 False
8 1
9 1.0
10 1j
11 True or False
12 True or False or None
13 True and False
14 True and False and None
15 (Name1 and Name2) or Name3
16 Name1 and Name2 or Name3
17 Name1 or (Name2 and Name3)
18 Name1 or Name2 and Name3
19 (Name1 and Name2) or (Name3 and Name4)
20 Name1 and Name2 or Name3 and Name4
21 Name1 or (Name2 and Name3) or Name4
22 Name1 or Name2 and Name3 or Name4
23 v1 << 2
24 1 >> v2
25 1 % finished
26 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
27 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
28 not great
29 ~great
30 +value
31 -1
32 ~int and not v1 ^ 123 + v2 | True
33 (~int) and (not ((v1 ^ (123 + v2)) | True))
34 flags & ~ select.EPOLLIN and waiters.write_task is not None
35 lambda arg: None
36 lambda a=True: a
37 lambda a, b, c=True: a
38 lambda a, b, c=True, *, d=(1 << v2), e='str': a
39 lambda a, b, c=True, *vararg, d=(v1 << 2), e='str', **kwargs: a + b
40 1 if True else 2
41 str or None if True else str or bytes or None
42 (str or None) if True else (str or bytes or None)
43 str or None if (1 if True else 2) else str or bytes or None
44 (str or None) if (1 if True else 2) else (str or bytes or None)
45 {'2.7': dead, '3.7': (long_live or die_hard)}
46 {'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}}
47 {**a, **b, **c}
48 {'2.7', '3.6', '3.7', '3.8', '3.9', ('4.0' if gilectomy else '3.10')}
49 ({'a': 'b'}, (True or False), (+value), 'string', b'bytes') or None
50 ()
51 (1,)
52 (1, 2)
53 (1, 2, 3)
54 []
55 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
56 [1, 2, 3,]
57 [*a]
58 [*range(10)]
59 [*a, 4, 5,]
60 [4, *a, 5,]
61 [this_is_a_very_long_variable_which_will_force_a_delimiter_split, element, another, *more]
62 {i for i in (1, 2, 3)}
63 {(i ** 2) for i in (1, 2, 3)}
64 {(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}
65 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
66 [i for i in (1, 2, 3)]
67 [(i ** 2) for i in (1, 2, 3)]
68 [(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]
69 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
70 {i: 0 for i in (1, 2, 3)}
71 {i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}
72 {a: b * 2 for a, b in dictionary.items()}
73 {a: b * -2 for a, b in dictionary.items()}
74 {k: v for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension}
75 Python3 > Python2 > COBOL
76 Life is Life
77 call()
78 call(arg)
79 call(kwarg='hey')
80 call(arg, kwarg='hey')
81 call(arg, another, kwarg='hey', **kwargs)
82 call(this_is_a_very_long_variable_which_will_force_a_delimiter_split, arg, another, kwarg='hey', **kwargs)  # note: no trailing comma pre-3.6
83 call(*gidgets[:2])
84 call(a, *gidgets[:2])
85 call(**self.screen_kwargs)
86 call(b, **self.screen_kwargs)
87 lukasz.langa.pl
88 call.me(maybe)
89 1 .real
90 1.0 .real
91 ....__class__
92 list[str]
93 dict[str, int]
94 tuple[str, ...]
95 tuple[str, int, float, dict[str, int],]
96 very_long_variable_name_filters: t.List[
97     t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
98 ]
99 slice[0]
100 slice[0:1]
101 slice[0:1:2]
102 slice[:]
103 slice[:-1]
104 slice[1:]
105 slice[::-1]
106 slice[d::d + 1]
107 slice[:c, c - 1]
108 numpy[:, 0:1]
109 numpy[:, :-1]
110 numpy[0, :]
111 numpy[:, i]
112 numpy[0, :2]
113 numpy[:N, 0]
114 numpy[:2, :4]
115 numpy[2:4, 1:5]
116 numpy[4:, 2:]
117 numpy[:, (0, 1, 2, 5)]
118 numpy[0, [0]]
119 numpy[:, [i]]
120 numpy[1:c + 1, c]
121 numpy[-(c + 1):, d]
122 numpy[:, l[-2]]
123 numpy[:, ::-1]
124 numpy[np.newaxis, :]
125 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
126 {'2.7': dead, '3.7': long_live or die_hard}
127 {'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}
128 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
129 (SomeName)
130 SomeName
131 (Good, Bad, Ugly)
132 (i for i in (1, 2, 3))
133 ((i ** 2) for i in (1, 2, 3))
134 ((i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))
135 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
136 (*starred)
137 {"id": "1","type": "type","started_at": now(),"ended_at": now() + timedelta(days=10),"priority": 1,"import_session_id": 1,**kwargs}
138 a = (1,)
139 b = 1,
140 c = 1
141 d = (1,) + a + (2,)
142 e = (1,).count(1)
143 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(vars_to_remove)
144 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(vars_to_remove)
145 result = session.query(models.Customer.id).filter(models.Customer.account_id == account_id, models.Customer.email == email_address).order_by(models.Customer.id.asc(),).all()
146 Ø = set()
147 authors.łukasz.say_thanks()
148 mapping = {
149     A: 0.25 * (10.0 / 12),
150     B: 0.1 * (10.0 / 12),
151     C: 0.1 * (10.0 / 12),
152     D: 0.1 * (10.0 / 12),
153 }
154
155 def gen():
156     yield from outside_of_generator
157     a = (yield)
158
159 async def f():
160     await some.complicated[0].call(with_args=(True or (1 is not 1)))
161 print(* [] or [1])
162 print(**{1: 3} if False else {x: x for x in range(3)})
163 print(* lambda x: x)
164 for x, in (1,), (2,), (3,): ...
165 for y in (): ...
166 for z in (i for i in (1, 2, 3)): ...
167 for i in (call()): ...
168 for j in (1 + (2 + 3)): ...
169 while(this and that): ...
170 if (
171     threading.current_thread() != threading.main_thread() and
172     threading.current_thread() != threading.main_thread() or
173     signal.getsignal(signal.SIGINT) != signal.default_int_handler
174 ):
175     return True
176 if (
177     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
178     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
179 ):
180     return True
181 if (
182     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &
183     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
184 ):
185     return True
186 if (
187     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
188     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
189 ):
190     return True
191 if (
192     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -
193     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
194 ):
195     return True
196 if (
197     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *
198     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
199 ):
200     return True
201 if (
202     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
203     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
204 ):
205     return True
206 last_call()
207 # standalone comment at ENDMARKER
208
209
210 # output
211
212
213 ...
214 "some_string"
215 b"\\xa3"
216 Name
217 None
218 True
219 False
220 1
221 1.0
222 1j
223 True or False
224 True or False or None
225 True and False
226 True and False and None
227 (Name1 and Name2) or Name3
228 Name1 and Name2 or Name3
229 Name1 or (Name2 and Name3)
230 Name1 or Name2 and Name3
231 (Name1 and Name2) or (Name3 and Name4)
232 Name1 and Name2 or Name3 and Name4
233 Name1 or (Name2 and Name3) or Name4
234 Name1 or Name2 and Name3 or Name4
235 v1 << 2
236 1 >> v2
237 1 % finished
238 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
239 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
240 not great
241 ~great
242 +value
243 -1
244 ~int and not v1 ^ 123 + v2 | True
245 (~int) and (not ((v1 ^ (123 + v2)) | True))
246 flags & ~select.EPOLLIN and waiters.write_task is not None
247 lambda arg: None
248 lambda a=True: a
249 lambda a, b, c=True: a
250 lambda a, b, c=True, *, d=(1 << v2), e="str": a
251 lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
252 1 if True else 2
253 str or None if True else str or bytes or None
254 (str or None) if True else (str or bytes or None)
255 str or None if (1 if True else 2) else str or bytes or None
256 (str or None) if (1 if True else 2) else (str or bytes or None)
257 {"2.7": dead, "3.7": (long_live or die_hard)}
258 {"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
259 {**a, **b, **c}
260 {"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
261 ({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
262 ()
263 (1,)
264 (1, 2)
265 (1, 2, 3)
266 []
267 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
268 [1, 2, 3]
269 [*a]
270 [*range(10)]
271 [*a, 4, 5]
272 [4, *a, 5]
273 [
274     this_is_a_very_long_variable_which_will_force_a_delimiter_split,
275     element,
276     another,
277     *more,
278 ]
279 {i for i in (1, 2, 3)}
280 {(i ** 2) for i in (1, 2, 3)}
281 {(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))}
282 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
283 [i for i in (1, 2, 3)]
284 [(i ** 2) for i in (1, 2, 3)]
285 [(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))]
286 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
287 {i: 0 for i in (1, 2, 3)}
288 {i: j for i, j in ((1, "a"), (2, "b"), (3, "c"))}
289 {a: b * 2 for a, b in dictionary.items()}
290 {a: b * -2 for a, b in dictionary.items()}
291 {
292     k: v
293     for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension
294 }
295 Python3 > Python2 > COBOL
296 Life is Life
297 call()
298 call(arg)
299 call(kwarg="hey")
300 call(arg, kwarg="hey")
301 call(arg, another, kwarg="hey", **kwargs)
302 call(
303     this_is_a_very_long_variable_which_will_force_a_delimiter_split,
304     arg,
305     another,
306     kwarg="hey",
307     **kwargs
308 )  # note: no trailing comma pre-3.6
309 call(*gidgets[:2])
310 call(a, *gidgets[:2])
311 call(**self.screen_kwargs)
312 call(b, **self.screen_kwargs)
313 lukasz.langa.pl
314 call.me(maybe)
315 1 .real
316 1.0 .real
317 ....__class__
318 list[str]
319 dict[str, int]
320 tuple[str, ...]
321 tuple[str, int, float, dict[str, int]]
322 very_long_variable_name_filters: t.List[
323     t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
324 ]
325 slice[0]
326 slice[0:1]
327 slice[0:1:2]
328 slice[:]
329 slice[:-1]
330 slice[1:]
331 slice[::-1]
332 slice[d::d + 1]
333 slice[:c, c - 1]
334 numpy[:, 0:1]
335 numpy[:, :-1]
336 numpy[0, :]
337 numpy[:, i]
338 numpy[0, :2]
339 numpy[:N, 0]
340 numpy[:2, :4]
341 numpy[2:4, 1:5]
342 numpy[4:, 2:]
343 numpy[:, (0, 1, 2, 5)]
344 numpy[0, [0]]
345 numpy[:, [i]]
346 numpy[1:c + 1, c]
347 numpy[-(c + 1):, d]
348 numpy[:, l[-2]]
349 numpy[:, ::-1]
350 numpy[np.newaxis, :]
351 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
352 {"2.7": dead, "3.7": long_live or die_hard}
353 {"2.7", "3.6", "3.7", "3.8", "3.9", "4.0" if gilectomy else "3.10"}
354 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
355 (SomeName)
356 SomeName
357 (Good, Bad, Ugly)
358 (i for i in (1, 2, 3))
359 ((i ** 2) for i in (1, 2, 3))
360 ((i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
361 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
362 (*starred)
363 {
364     "id": "1",
365     "type": "type",
366     "started_at": now(),
367     "ended_at": now() + timedelta(days=10),
368     "priority": 1,
369     "import_session_id": 1,
370     **kwargs,
371 }
372 a = (1,)
373 b = 1,
374 c = 1
375 d = (1,) + a + (2,)
376 e = (1,).count(1)
377 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(
378     vars_to_remove
379 )
380 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
381     vars_to_remove
382 )
383 result = session.query(models.Customer.id).filter(
384     models.Customer.account_id == account_id, models.Customer.email == email_address
385 ).order_by(
386     models.Customer.id.asc()
387 ).all()
388 Ø = set()
389 authors.łukasz.say_thanks()
390 mapping = {
391     A: 0.25 * (10.0 / 12),
392     B: 0.1 * (10.0 / 12),
393     C: 0.1 * (10.0 / 12),
394     D: 0.1 * (10.0 / 12),
395 }
396
397
398 def gen():
399     yield from outside_of_generator
400
401     a = (yield)
402
403
404 async def f():
405     await some.complicated[0].call(with_args=(True or (1 is not 1)))
406
407
408 print(*[] or [1])
409 print(**{1: 3} if False else {x: x for x in range(3)})
410 print(*lambda x: x)
411 for (x,) in (1,), (2,), (3,):
412     ...
413 for y in ():
414     ...
415 for z in (i for i in (1, 2, 3)):
416     ...
417 for i in call():
418     ...
419 for j in 1 + (2 + 3):
420     ...
421 while this and that:
422     ...
423 if (
424     threading.current_thread() != threading.main_thread()
425     and threading.current_thread() != threading.main_thread()
426     or signal.getsignal(signal.SIGINT) != signal.default_int_handler
427 ):
428     return True
429
430 if (
431     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
432     | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
433 ):
434     return True
435
436 if (
437     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
438     & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
439 ):
440     return True
441
442 if (
443     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
444     + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
445 ):
446     return True
447
448 if (
449     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
450     - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
451 ):
452     return True
453
454 if (
455     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
456     * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
457 ):
458     return True
459
460 if (
461     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
462     / aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
463 ):
464     return True
465
466 last_call()
467 # standalone comment at ENDMARKER