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

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