]> 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:

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