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

Generalize star expression handling
[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 for x, in (1,), (2,), (3,): ...
162 for y in (): ...
163 for z in (i for i in (1, 2, 3)): ...
164 for i in (call()): ...
165 for j in (1 + (2 + 3)): ...
166 while(this and that): ...
167 if (
168     threading.current_thread() != threading.main_thread() and
169     threading.current_thread() != threading.main_thread() or
170     signal.getsignal(signal.SIGINT) != signal.default_int_handler
171 ):
172     return True
173 if (
174     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
175     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
176 ):
177     return True
178 if (
179     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &
180     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
181 ):
182     return True
183 if (
184     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
185     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
186 ):
187     return True
188 if (
189     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -
190     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
191 ):
192     return True
193 if (
194     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *
195     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
196 ):
197     return True
198 if (
199     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
200     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
201 ):
202     return True
203 last_call()
204 # standalone comment at ENDMARKER
205
206
207 # output
208
209
210 ...
211 "some_string"
212 b"\\xa3"
213 Name
214 None
215 True
216 False
217 1
218 1.0
219 1j
220 True or False
221 True or False or None
222 True and False
223 True and False and None
224 (Name1 and Name2) or Name3
225 Name1 and Name2 or Name3
226 Name1 or (Name2 and Name3)
227 Name1 or Name2 and Name3
228 (Name1 and Name2) or (Name3 and Name4)
229 Name1 and Name2 or Name3 and Name4
230 Name1 or (Name2 and Name3) or Name4
231 Name1 or Name2 and Name3 or Name4
232 v1 << 2
233 1 >> v2
234 1 % finished
235 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
236 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
237 not great
238 ~great
239 +value
240 -1
241 ~int and not v1 ^ 123 + v2 | True
242 (~int) and (not ((v1 ^ (123 + v2)) | True))
243 flags & ~select.EPOLLIN and waiters.write_task is not None
244 lambda arg: None
245 lambda a=True: a
246 lambda a, b, c=True: a
247 lambda a, b, c=True, *, d=(1 << v2), e="str": a
248 lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
249 1 if True else 2
250 str or None if True else str or bytes or None
251 (str or None) if True else (str or bytes or None)
252 str or None if (1 if True else 2) else str or bytes or None
253 (str or None) if (1 if True else 2) else (str or bytes or None)
254 {"2.7": dead, "3.7": (long_live or die_hard)}
255 {"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
256 {**a, **b, **c}
257 {"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
258 ({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
259 ()
260 (1,)
261 (1, 2)
262 (1, 2, 3)
263 []
264 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
265 [1, 2, 3]
266 [*a]
267 [*range(10)]
268 [*a, 4, 5]
269 [4, *a, 5]
270 [
271     this_is_a_very_long_variable_which_will_force_a_delimiter_split,
272     element,
273     another,
274     *more,
275 ]
276 {i for i in (1, 2, 3)}
277 {(i ** 2) for i in (1, 2, 3)}
278 {(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))}
279 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
280 [i for i in (1, 2, 3)]
281 [(i ** 2) for i in (1, 2, 3)]
282 [(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))]
283 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
284 {i: 0 for i in (1, 2, 3)}
285 {i: j for i, j in ((1, "a"), (2, "b"), (3, "c"))}
286 {a: b * 2 for a, b in dictionary.items()}
287 {a: b * -2 for a, b in dictionary.items()}
288 {
289     k: v
290     for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension
291 }
292 Python3 > Python2 > COBOL
293 Life is Life
294 call()
295 call(arg)
296 call(kwarg="hey")
297 call(arg, kwarg="hey")
298 call(arg, another, kwarg="hey", **kwargs)
299 call(
300     this_is_a_very_long_variable_which_will_force_a_delimiter_split,
301     arg,
302     another,
303     kwarg="hey",
304     **kwargs
305 )  # note: no trailing comma pre-3.6
306 call(*gidgets[:2])
307 call(a, *gidgets[:2])
308 call(**self.screen_kwargs)
309 call(b, **self.screen_kwargs)
310 lukasz.langa.pl
311 call.me(maybe)
312 1 .real
313 1.0 .real
314 ....__class__
315 list[str]
316 dict[str, int]
317 tuple[str, ...]
318 tuple[str, int, float, dict[str, int]]
319 very_long_variable_name_filters: t.List[
320     t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
321 ]
322 slice[0]
323 slice[0:1]
324 slice[0:1:2]
325 slice[:]
326 slice[:-1]
327 slice[1:]
328 slice[::-1]
329 slice[d::d + 1]
330 slice[:c, c - 1]
331 numpy[:, 0:1]
332 numpy[:, :-1]
333 numpy[0, :]
334 numpy[:, i]
335 numpy[0, :2]
336 numpy[:N, 0]
337 numpy[:2, :4]
338 numpy[2:4, 1:5]
339 numpy[4:, 2:]
340 numpy[:, (0, 1, 2, 5)]
341 numpy[0, [0]]
342 numpy[:, [i]]
343 numpy[1:c + 1, c]
344 numpy[-(c + 1):, d]
345 numpy[:, l[-2]]
346 numpy[:, ::-1]
347 numpy[np.newaxis, :]
348 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
349 {"2.7": dead, "3.7": long_live or die_hard}
350 {"2.7", "3.6", "3.7", "3.8", "3.9", "4.0" if gilectomy else "3.10"}
351 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
352 (SomeName)
353 SomeName
354 (Good, Bad, Ugly)
355 (i for i in (1, 2, 3))
356 ((i ** 2) for i in (1, 2, 3))
357 ((i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
358 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
359 (*starred)
360 {
361     "id": "1",
362     "type": "type",
363     "started_at": now(),
364     "ended_at": now() + timedelta(days=10),
365     "priority": 1,
366     "import_session_id": 1,
367     **kwargs,
368 }
369 a = (1,)
370 b = 1,
371 c = 1
372 d = (1,) + a + (2,)
373 e = (1,).count(1)
374 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(
375     vars_to_remove
376 )
377 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
378     vars_to_remove
379 )
380 result = session.query(models.Customer.id).filter(
381     models.Customer.account_id == account_id, models.Customer.email == email_address
382 ).order_by(
383     models.Customer.id.asc()
384 ).all()
385 Ø = set()
386 authors.łukasz.say_thanks()
387 mapping = {
388     A: 0.25 * (10.0 / 12),
389     B: 0.1 * (10.0 / 12),
390     C: 0.1 * (10.0 / 12),
391     D: 0.1 * (10.0 / 12),
392 }
393
394
395 def gen():
396     yield from outside_of_generator
397
398     a = (yield)
399
400
401 async def f():
402     await some.complicated[0].call(with_args=(True or (1 is not 1)))
403
404
405 for (x,) in (1,), (2,), (3,):
406     ...
407 for y in ():
408     ...
409 for z in (i for i in (1, 2, 3)):
410     ...
411 for i in call():
412     ...
413 for j in 1 + (2 + 3):
414     ...
415 while this and that:
416     ...
417 if (
418     threading.current_thread() != threading.main_thread()
419     and threading.current_thread() != threading.main_thread()
420     or signal.getsignal(signal.SIGINT) != signal.default_int_handler
421 ):
422     return True
423
424 if (
425     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
426     | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
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 last_call()
461 # standalone comment at ENDMARKER