1
### COPIED FROM CPython 3.12 alpha (July 2022)
2
### Original part after ############
3
# cython: language_level=3
7
from Cython.TestUtils import py_parse_code
11
def compile(code, name, what):
20
############## SLIGHTLY MODIFIED ORIGINAL CODE
28
if sys.version_info >= (3, 10):
30
@dataclasses.dataclass
35
# predates dataclasses with match args
37
__match_args__ = ("x", "y")
41
# TestCompiler removed - it's very CPython-specific
43
class TestCompiler(unittest.TestCase):
45
def test_refleaks(self):
46
# Hunting for leaks using -R doesn't catch leaks in the compiler itself,
47
# just the code under test. This test ensures that if there are leaks in
48
# the pattern compiler, those runs will fail:
49
with open(__file__) as file:
50
compile(file.read(), __file__, "exec")
54
# TestTracing also mainly removed - doesn't seem like a core test
55
# except for one test that seems misplaced in CPython (which is below)
56
class TestTracing(unittest.TestCase):
60
def _trace(func, *args, **kwargs):
63
def trace(frame, event, arg):
64
if event == "line" and frame.f_code.co_name == func.__name__:
66
relative_lineno = frame.f_lineno - func.__code__.co_firstlineno
67
actual_linenos.append(relative_lineno)
70
old_trace = sys.gettrace()
75
sys.settrace(old_trace)
78
def test_default_wildcard(self):
80
match command.split(): # 1
81
case ["go", direction] if direction in "nesw": # 2
82
return f"go {direction}" # 3
88
self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
89
self.assertListEqual(self._trace(f, "go x"), [1, 2, 4, 5])
90
self.assertListEqual(self._trace(f, "spam"), [1, 2, 4, 6, 7])
92
def test_default_capture(self):
94
match command.split(): # 1
95
case ["go", direction] if direction in "nesw": # 2
96
return f"go {direction}" # 3
102
self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
103
self.assertListEqual(self._trace(f, "go x"), [1, 2, 4, 5])
104
self.assertListEqual(self._trace(f, "spam"), [1, 2, 4, 6, 7])
106
def test_no_default(self):
108
match command.split(): # 1
109
case ["go", direction] if direction in "nesw": # 2
110
return f"go {direction}" # 3
114
self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
115
self.assertListEqual(self._trace(f, "go x"), [1, 2, 4, 5])
116
self.assertListEqual(self._trace(f, "spam"), [1, 2, 4])
118
def test_only_default_wildcard(self):
120
match command.split(): # 1
124
self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
125
self.assertListEqual(self._trace(f, "go x"), [1, 2, 3])
126
self.assertListEqual(self._trace(f, "spam"), [1, 2, 3])
128
def test_only_default_capture(self):
130
match command.split(): # 1
134
self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
135
self.assertListEqual(self._trace(f, "go x"), [1, 2, 3])
136
self.assertListEqual(self._trace(f, "spam"), [1, 2, 3])
138
def test_unreachable_code(self):
148
self.assertListEqual(self._trace(f, 1), [1, 2, 3])
149
self.assertListEqual(self._trace(f, 0), [1, 2, 5, 6])
152
def test_parser_deeply_nested_patterns(self):
153
# Deeply nested patterns can cause exponential backtracking when parsing.
154
# See CPython gh-93671 for more information.
156
# DW: Cython note - this doesn't break the parser but may cause a
157
# RecursionError later in the code-generation. I don't believe that's
158
# easily avoidable with the way Cython visitors currently work
163
"A" + "(" * levels + ")" * levels,
164
"{1:" * levels + "1" + "}" * levels,
165
"[" * levels + "1" + "]" * levels,
168
for pattern in patterns:
169
with self.subTest(pattern):
170
code = inspect.cleandoc("""
175
compile(code, "<string>", "exec")
178
# FIXME - remove all the "return"s added to cause code to be dropped
179
############## ORIGINAL PART FROM CPYTHON
182
class TestInheritance(unittest.TestCase):
185
def check_sequence_then_mapping(x):
194
def check_mapping_then_sequence(x):
202
def test_multiple_inheritance_mapping(self):
206
class M1(collections.UserDict, collections.abc.Sequence):
208
class M2(C, collections.UserDict, collections.abc.Sequence):
210
class M3(collections.UserDict, C, list):
212
class M4(dict, collections.abc.Sequence, C):
214
self.assertEqual(self.check_sequence_then_mapping(M1()), "map")
215
self.assertEqual(self.check_sequence_then_mapping(M2()), "map")
216
self.assertEqual(self.check_sequence_then_mapping(M3()), "map")
217
self.assertEqual(self.check_sequence_then_mapping(M4()), "map")
218
self.assertEqual(self.check_mapping_then_sequence(M1()), "map")
219
self.assertEqual(self.check_mapping_then_sequence(M2()), "map")
220
self.assertEqual(self.check_mapping_then_sequence(M3()), "map")
221
self.assertEqual(self.check_mapping_then_sequence(M4()), "map")
223
def test_multiple_inheritance_sequence(self):
227
class S1(collections.UserList, collections.abc.Mapping):
229
class S2(C, collections.UserList, collections.abc.Mapping):
231
class S3(list, C, collections.abc.Mapping):
233
class S4(collections.UserList, dict, C):
235
self.assertEqual(self.check_sequence_then_mapping(S1()), "seq")
236
self.assertEqual(self.check_sequence_then_mapping(S2()), "seq")
237
self.assertEqual(self.check_sequence_then_mapping(S3()), "seq")
238
self.assertEqual(self.check_sequence_then_mapping(S4()), "seq")
239
self.assertEqual(self.check_mapping_then_sequence(S1()), "seq")
240
self.assertEqual(self.check_mapping_then_sequence(S2()), "seq")
241
self.assertEqual(self.check_mapping_then_sequence(S3()), "seq")
242
self.assertEqual(self.check_mapping_then_sequence(S4()), "seq")
244
def test_late_registration_mapping(self):
248
class ChildPre(Parent):
250
class GrandchildPre(ChildPre):
252
collections.abc.Mapping.register(Parent)
253
class ChildPost(Parent):
255
class GrandchildPost(ChildPost):
257
self.assertEqual(self.check_sequence_then_mapping(Parent()), "map")
258
self.assertEqual(self.check_sequence_then_mapping(ChildPre()), "map")
259
self.assertEqual(self.check_sequence_then_mapping(GrandchildPre()), "map")
260
self.assertEqual(self.check_sequence_then_mapping(ChildPost()), "map")
261
self.assertEqual(self.check_sequence_then_mapping(GrandchildPost()), "map")
262
self.assertEqual(self.check_mapping_then_sequence(Parent()), "map")
263
self.assertEqual(self.check_mapping_then_sequence(ChildPre()), "map")
264
self.assertEqual(self.check_mapping_then_sequence(GrandchildPre()), "map")
265
self.assertEqual(self.check_mapping_then_sequence(ChildPost()), "map")
266
self.assertEqual(self.check_mapping_then_sequence(GrandchildPost()), "map")
268
def test_late_registration_sequence(self):
272
class ChildPre(Parent):
274
class GrandchildPre(ChildPre):
276
collections.abc.Sequence.register(Parent)
277
class ChildPost(Parent):
279
class GrandchildPost(ChildPost):
281
self.assertEqual(self.check_sequence_then_mapping(Parent()), "seq")
282
self.assertEqual(self.check_sequence_then_mapping(ChildPre()), "seq")
283
self.assertEqual(self.check_sequence_then_mapping(GrandchildPre()), "seq")
284
self.assertEqual(self.check_sequence_then_mapping(ChildPost()), "seq")
285
self.assertEqual(self.check_sequence_then_mapping(GrandchildPost()), "seq")
286
self.assertEqual(self.check_mapping_then_sequence(Parent()), "seq")
287
self.assertEqual(self.check_mapping_then_sequence(ChildPre()), "seq")
288
self.assertEqual(self.check_mapping_then_sequence(GrandchildPre()), "seq")
289
self.assertEqual(self.check_mapping_then_sequence(ChildPost()), "seq")
290
self.assertEqual(self.check_mapping_then_sequence(GrandchildPost()), "seq")
293
class TestPatma(unittest.TestCase):
295
def test_patma_000(self):
300
self.assertIs(x, True)
302
def test_patma_001(self):
309
self.assertIs(x, True)
311
def test_patma_002(self):
318
self.assertIs(x, True)
320
def test_patma_003(self):
326
self.assertIs(x, True)
328
def test_patma_004(self):
334
self.assertIs(x, True)
336
def test_patma_005(self):
342
self.assertIs(x, True)
344
def test_patma_006(self):
350
self.assertIs(x, True)
352
def test_patma_007(self):
358
self.assertIs(x, False)
360
def test_patma_008(self):
368
self.assertEqual(x, 0)
369
self.assertEqual(A.y, 1)
371
def test_patma_009(self):
378
case _ as y if y == x and y:
382
self.assertEqual(A.B, 0)
383
self.assertEqual(x, 0)
384
self.assertEqual(y, 0)
385
self.assertEqual(z, 2)
387
def test_patma_010(self):
392
self.assertEqual(x, 0)
394
def test_patma_011(self):
399
self.assertEqual(x, [0, 1, 2])
400
self.assertEqual(y, 0)
402
def test_patma_012(self):
407
self.assertEqual(x, [1, 2])
408
self.assertEqual(y, 0)
410
def test_patma_013(self):
415
self.assertEqual(x, [2])
416
self.assertEqual(y, 0)
418
def test_patma_014(self):
423
self.assertEqual(x, [])
424
self.assertEqual(y, 0)
426
def test_patma_015(self):
431
self.assertEqual(x, [0, 1])
432
self.assertEqual(y, 0)
434
def test_patma_016(self):
439
self.assertEqual(x, [0])
440
self.assertEqual(y, 0)
442
def test_patma_017(self):
447
self.assertEqual(x, [])
448
self.assertEqual(y, 0)
450
def test_patma_018(self):
455
self.assertEqual(x, [1])
456
self.assertEqual(y, 0)
458
def test_patma_019(self):
463
self.assertEqual(x, [])
464
self.assertEqual(y, 0)
466
def test_patma_020(self):
471
self.assertEqual(x, [])
472
self.assertEqual(y, 0)
474
def test_patma_021(self):
479
self.assertEqual(x, [0, 1, 2])
480
self.assertEqual(y, 0)
482
def test_patma_022(self):
488
self.assertEqual(x, {})
489
self.assertEqual(y, 0)
491
def test_patma_023(self):
497
self.assertEqual(x, {0: 0})
498
self.assertEqual(y, 0)
500
def test_patma_024(self):
507
self.assertEqual(x, {})
508
self.assertIs(y, None)
510
def test_patma_025(self):
514
case {0: (0 | 1 | 2 as z)}:
516
self.assertEqual(x, {0: 0})
517
self.assertEqual(y, 0)
518
self.assertEqual(z, 0)
520
def test_patma_026(self):
524
case {0: (0 | 1 | 2 as z)}:
526
self.assertEqual(x, {0: 1})
527
self.assertEqual(y, 0)
528
self.assertEqual(z, 1)
530
def test_patma_027(self):
534
case {0: (0 | 1 | 2 as z)}:
536
self.assertEqual(x, {0: 2})
537
self.assertEqual(y, 0)
538
self.assertEqual(z, 2)
540
def test_patma_028(self):
545
case {0: (0 | 1 | 2 as z)}:
547
self.assertEqual(x, {0: 3})
548
self.assertIs(y, None)
550
def test_patma_029(self):
555
case {0: [1, 2, {}]}:
557
case {0: [1, 2, {}], 1: [[]]}:
561
self.assertEqual(x, {})
562
self.assertIs(y, None)
564
def test_patma_030(self):
566
x = {False: (True, 2.0, {})}
568
case {0: [1, 2, {}]}:
570
case {0: [1, 2, {}], 1: [[]]}:
574
self.assertEqual(x, {False: (True, 2.0, {})})
575
self.assertEqual(y, 0)
577
def test_patma_031(self):
579
x = {False: (True, 2.0, {}), 1: [[]], 2: 0}
581
case {0: [1, 2, {}]}:
583
case {0: [1, 2, {}], 1: [[]]}:
587
self.assertEqual(x, {False: (True, 2.0, {}), 1: [[]], 2: 0})
588
self.assertEqual(y, 0)
590
def test_patma_032(self):
592
x = {False: (True, 2.0, {}), 1: [[]], 2: 0}
596
case {0: [1, 2, {}], 1: [[]]}:
600
self.assertEqual(x, {False: (True, 2.0, {}), 1: [[]], 2: 0})
601
self.assertEqual(y, 1)
603
def test_patma_033(self):
607
case {0: [1, 2, {}]}:
609
case {0: [1, 2, {}], 1: [[]]}:
613
self.assertEqual(x, [])
614
self.assertEqual(y, 2)
616
def test_patma_034(self):
620
case {0: [1, 2, {}]}:
622
case {0: ([1, 2, {}] | False)} | {1: [[]]} | {0: [1, 2, {}]} | [] | "X" | {}:
626
self.assertEqual(x, {0: 0})
627
self.assertEqual(y, 1)
629
def test_patma_035(self):
633
case {0: [1, 2, {}]}:
635
case {0: [1, 2, {}] | True} | {1: [[]]} | {0: [1, 2, {}]} | [] | "X" | {}:
639
self.assertEqual(x, {0: 0})
640
self.assertEqual(y, 1)
642
def test_patma_036(self):
648
self.assertEqual(x, 0)
649
self.assertEqual(y, 0)
651
def test_patma_037(self):
657
self.assertEqual(x, 1)
658
self.assertEqual(y, 0)
660
def test_patma_038(self):
666
self.assertEqual(x, 2)
667
self.assertEqual(y, 0)
669
def test_patma_039(self):
676
self.assertEqual(x, 3)
677
self.assertIs(y, None)
679
def test_patma_040(self):
683
case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
685
self.assertEqual(x, 0)
686
self.assertEqual(y, 0)
687
self.assertEqual(z, 0)
689
def test_patma_041(self):
693
case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
695
self.assertEqual(x, 1)
696
self.assertEqual(y, 0)
697
self.assertEqual(z, 1)
699
def test_patma_042(self):
704
case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
706
self.assertEqual(x, 2)
707
self.assertIs(y, None)
708
self.assertEqual(z, 2)
710
def test_patma_043(self):
715
case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
717
self.assertEqual(x, 3)
718
self.assertIs(y, None)
720
def test_patma_044(self):
726
self.assertEqual(x, ())
727
self.assertEqual(y, 0)
729
def test_patma_045(self):
735
self.assertEqual(x, ())
736
self.assertEqual(y, 0)
738
def test_patma_046(self):
744
self.assertEqual(x, (0,))
745
self.assertEqual(y, 0)
747
def test_patma_047(self):
753
self.assertEqual(x, ((),))
754
self.assertEqual(y, 0)
756
def test_patma_048(self):
760
case [0, 1] | [1, 0]:
762
self.assertEqual(x, [0, 1])
763
self.assertEqual(y, 0)
765
def test_patma_049(self):
769
case [0, 1] | [1, 0]:
771
self.assertEqual(x, [1, 0])
772
self.assertEqual(y, 0)
774
def test_patma_050(self):
779
case [0, 1] | [1, 0]:
781
self.assertEqual(x, [0, 0])
782
self.assertIs(y, None)
784
def test_patma_051(self):
791
case [z] | [1, (0 | 1 as z)] | [z]:
793
self.assertIs(w, None)
794
self.assertEqual(x, [1, 0])
795
self.assertEqual(y, 1)
796
self.assertEqual(z, 0)
798
def test_patma_052(self):
804
case [1, 0] if (x := x[:0]):
808
self.assertEqual(x, [])
809
self.assertEqual(y, 2)
811
def test_patma_053(self):
818
self.assertEqual(x, {0})
819
self.assertIs(y, None)
821
def test_patma_054(self):
828
self.assertEqual(x, set())
829
self.assertIs(y, None)
831
def test_patma_055(self):
838
self.assertEqual([*x], [1, 2, 3])
839
self.assertIs(y, None)
841
def test_patma_056(self):
848
self.assertEqual(x, {})
849
self.assertIs(y, None)
851
def test_patma_057(self):
853
x = {0: False, 1: True}
858
self.assertEqual(x, {0: False, 1: True})
859
self.assertIs(y, None)
861
def test_patma_058(self):
867
self.assertEqual(x, 0)
868
self.assertEqual(y, 0)
870
def test_patma_059(self):
877
self.assertEqual(x, 0)
878
self.assertEqual(y, None)
880
def test_patma_060(self):
887
self.assertEqual(x, 0)
888
self.assertIs(y, None)
890
def test_patma_061(self):
897
self.assertEqual(x, 0)
898
self.assertIs(y, None)
900
def test_patma_062(self):
908
self.assertEqual(x, 0)
909
self.assertEqual(y, 0)
911
def test_patma_063(self):
920
self.assertEqual(x, 0)
921
self.assertIs(y, None)
923
def test_patma_064(self):
931
self.assertEqual(x, "x")
932
self.assertEqual(y, 0)
934
def test_patma_065(self):
942
self.assertEqual(x, "x")
943
self.assertEqual(y, 1)
945
def test_patma_066(self):
953
self.assertEqual(x, "x")
954
self.assertEqual(y, 1)
956
def test_patma_067(self):
964
self.assertEqual(x, b"x")
965
self.assertEqual(y, 1)
967
def test_patma_068(self):
975
self.assertEqual(x, 0)
976
self.assertEqual(y, 1)
978
def test_patma_069(self):
987
self.assertEqual(x, 0)
988
self.assertIs(y, None)
990
def test_patma_070(self):
998
self.assertEqual(x, 0)
999
self.assertEqual(y, 0)
1001
def test_patma_071(self):
1009
self.assertEqual(x, 0)
1010
self.assertEqual(y, 0)
1012
def test_patma_072(self):
1021
self.assertEqual(x, 0)
1022
self.assertEqual(y, 2)
1024
def test_patma_073(self):
1033
self.assertEqual(x, 0)
1034
self.assertEqual(y, 2)
1036
def test_patma_074(self):
1041
case 0 if not (x := 1):
1045
self.assertEqual(x, 1)
1046
self.assertIs(y, None)
1048
def test_patma_075(self):
1056
self.assertEqual(x, "x")
1057
self.assertEqual(y, 1)
1059
def test_patma_076(self):
1071
self.assertEqual(x, b"x")
1072
self.assertEqual(y, 4)
1074
def test_patma_077(self):
1083
self.assertEqual(x, b"x")
1084
self.assertIs(y, None)
1086
def test_patma_078(self):
1096
self.assertEqual(x, "")
1097
self.assertEqual(y, 2)
1099
def test_patma_079(self):
1103
case ["x", "x", "x"]:
1109
self.assertEqual(x, "xxx")
1110
self.assertEqual(y, 2)
1112
def test_patma_080(self):
1116
case [120, 120, 120]:
1122
self.assertEqual(x, b"xxx")
1123
self.assertEqual(y, 2)
1125
def test_patma_081(self):
1129
case 0 if not (x := 1):
1133
self.assertEqual(x, 1)
1134
self.assertEqual(y, 1)
1135
self.assertEqual(z, 0)
1137
def test_patma_082(self):
1141
case (1 as z) if not (x := 1):
1145
self.assertEqual(x, 0)
1146
self.assertEqual(y, 1)
1148
def test_patma_083(self):
1154
self.assertEqual(x, 0)
1155
self.assertEqual(y, 0)
1156
self.assertEqual(z, 0)
1158
def test_patma_084(self):
1165
self.assertEqual(x, 0)
1166
self.assertIs(y, None)
1168
def test_patma_085(self):
1173
case (0 as z) if (w := 0):
1175
self.assertEqual(w, 0)
1176
self.assertEqual(x, 0)
1177
self.assertIs(y, None)
1178
self.assertEqual(z, 0)
1180
def test_patma_086(self):
1184
case ((0 as w) as z):
1186
self.assertEqual(w, 0)
1187
self.assertEqual(x, 0)
1188
self.assertEqual(y, 0)
1189
self.assertEqual(z, 0)
1191
def test_patma_087(self):
1197
self.assertEqual(x, 0)
1198
self.assertEqual(y, 0)
1200
def test_patma_088(self):
1206
self.assertEqual(x, 1)
1207
self.assertEqual(y, 0)
1209
def test_patma_089(self):
1215
self.assertEqual(x, 2)
1216
self.assertEqual(y, 0)
1218
def test_patma_090(self):
1225
self.assertEqual(x, 3)
1226
self.assertIs(y, None)
1228
def test_patma_091(self):
1234
self.assertEqual(x, 0)
1235
self.assertEqual(y, 0)
1237
def test_patma_092(self):
1243
self.assertEqual(x, 1)
1244
self.assertEqual(y, 0)
1246
def test_patma_093(self):
1252
self.assertEqual(x, 2)
1253
self.assertEqual(y, 0)
1255
def test_patma_094(self):
1262
self.assertEqual(x, 3)
1263
self.assertIs(y, None)
1265
def test_patma_095(self):
1271
self.assertEqual(x, 0)
1272
self.assertEqual(y, 0)
1274
def test_patma_096(self):
1280
self.assertEqual(x, 0)
1281
self.assertEqual(y, 0)
1283
def test_patma_097(self):
1289
self.assertEqual(x, 0)
1290
self.assertEqual(y, 0)
1292
def test_patma_098(self):
1298
self.assertEqual(x, 0)
1299
self.assertEqual(y, 0)
1301
def test_patma_099(self):
1307
self.assertEqual(x, -1)
1308
self.assertEqual(y, 0)
1310
def test_patma_100(self):
1316
self.assertEqual(x, -1.5)
1317
self.assertEqual(y, 0)
1319
def test_patma_101(self):
1325
self.assertEqual(x, -1j)
1326
self.assertEqual(y, 0)
1328
def test_patma_102(self):
1334
self.assertEqual(x, -1.5j)
1335
self.assertEqual(y, 0)
1337
def test_patma_103(self):
1343
self.assertEqual(x, 0)
1344
self.assertEqual(y, 0)
1346
def test_patma_104(self):
1352
self.assertEqual(x, 0)
1353
self.assertEqual(y, 0)
1355
def test_patma_105(self):
1361
self.assertEqual(x, 0)
1362
self.assertEqual(y, 0)
1364
def test_patma_106(self):
1370
self.assertEqual(x, 0)
1371
self.assertEqual(y, 0)
1373
def test_patma_107(self):
1379
self.assertEqual(x, 0.25 + 1.75j)
1380
self.assertEqual(y, 0)
1382
def test_patma_108(self):
1388
self.assertEqual(x, 0.25 - 1.75j)
1389
self.assertEqual(y, 0)
1391
def test_patma_109(self):
1397
self.assertEqual(x, -0.25 + 1.75j)
1398
self.assertEqual(y, 0)
1400
def test_patma_110(self):
1406
self.assertEqual(x, -0.25 - 1.75j)
1407
self.assertEqual(y, 0)
1409
def test_patma_111(self):
1417
self.assertEqual(A.B, 0)
1418
self.assertEqual(x, 0)
1419
self.assertEqual(y, 0)
1421
def test_patma_112(self):
1430
self.assertEqual(A.B.C, 0)
1431
self.assertEqual(x, 0)
1432
self.assertEqual(y, 0)
1434
def test_patma_113(self):
1446
self.assertEqual(A.B.C, 0)
1447
self.assertEqual(A.B.D, 1)
1448
self.assertEqual(x, 1)
1449
self.assertEqual(y, 1)
1451
def test_patma_114(self):
1461
self.assertEqual(A.B.C.D, 0)
1462
self.assertEqual(x, 0)
1463
self.assertEqual(y, 0)
1465
def test_patma_115(self):
1478
self.assertEqual(A.B.C.D, 0)
1479
self.assertEqual(A.B.C.E, 1)
1480
self.assertEqual(x, 1)
1481
self.assertEqual(y, 1)
1483
def test_patma_116(self):
1489
self.assertEqual(match, 0)
1490
self.assertEqual(case, 0)
1491
self.assertEqual(x, 0)
1493
def test_patma_117(self):
1499
self.assertEqual(match, 0)
1500
self.assertEqual(case, 0)
1501
self.assertEqual(x, 0)
1503
def test_patma_118(self):
1511
self.assertEqual(x, [])
1512
self.assertEqual(y, 1)
1514
def test_patma_119(self):
1516
x = collections.defaultdict(int)
1522
self.assertEqual(x, {})
1523
self.assertEqual(y, 1)
1525
def test_patma_120(self):
1527
x = collections.defaultdict(int)
1533
self.assertEqual(x, {})
1534
self.assertEqual(y, 1)
1535
self.assertEqual(z, {})
1537
def test_patma_121(self):
1542
self.assertEqual(x, 0)
1544
def test_patma_122(self):
1549
self.assertEqual(x, [0, 1, 2])
1550
self.assertEqual(y, 0)
1552
def test_patma_123(self):
1557
self.assertEqual(x, [1, 2])
1558
self.assertEqual(y, 0)
1560
def test_patma_124(self):
1565
self.assertEqual(x, [2])
1566
self.assertEqual(y, 0)
1568
def test_patma_125(self):
1573
self.assertEqual(x, [])
1574
self.assertEqual(y, 0)
1576
def test_patma_126(self):
1581
self.assertEqual(x, [0, 1])
1582
self.assertEqual(y, 0)
1584
def test_patma_127(self):
1589
self.assertEqual(x, [0])
1590
self.assertEqual(y, 0)
1592
def test_patma_128(self):
1597
self.assertEqual(x, [])
1598
self.assertEqual(y, 0)
1600
def test_patma_129(self):
1605
self.assertEqual(x, [1])
1606
self.assertEqual(y, 0)
1608
def test_patma_130(self):
1613
self.assertEqual(x, [])
1614
self.assertEqual(y, 0)
1616
def test_patma_131(self):
1621
self.assertEqual(x, [])
1622
self.assertEqual(y, 0)
1624
def test_patma_132(self):
1629
self.assertEqual(x, [0, 1, 2])
1630
self.assertEqual(y, 0)
1632
def test_patma_133(self):
1634
x = collections.defaultdict(int, {0: 1})
1642
self.assertEqual(x, {0: 1})
1643
self.assertEqual(y, 2)
1645
def test_patma_134(self):
1647
x = collections.defaultdict(int, {0: 1})
1655
self.assertEqual(x, {0: 1})
1656
self.assertEqual(y, 2)
1657
self.assertEqual(z, {0: 1})
1659
def test_patma_135(self):
1661
x = collections.defaultdict(int, {0: 1})
1669
self.assertEqual(x, {0: 1})
1670
self.assertEqual(y, 2)
1671
self.assertEqual(z, {})
1673
def test_patma_136(self):
1683
self.assertEqual(x, {0: 1})
1684
self.assertEqual(y, 1)
1686
def test_patma_137(self):
1696
self.assertEqual(x, {0: 1})
1697
self.assertEqual(y, 1)
1698
self.assertEqual(z, {0: 1})
1700
def test_patma_138(self):
1710
self.assertEqual(x, {0: 1})
1711
self.assertEqual(y, 1)
1712
self.assertEqual(z, {})
1714
def test_patma_139(self):
1720
self.assertIs(x, False)
1721
self.assertEqual(y, 0)
1724
def test_patma_140(self):
1730
self.assertIs(x, True)
1731
self.assertEqual(y, 0)
1734
def test_patma_141(self):
1740
self.assertEqual(x, bytearray())
1741
self.assertEqual(y, 0)
1744
def test_patma_142(self):
1750
self.assertEqual(x, b"")
1751
self.assertEqual(y, 0)
1754
def test_patma_143(self):
1760
self.assertEqual(x, {})
1761
self.assertEqual(y, 0)
1764
def test_patma_144(self):
1770
self.assertEqual(x, 0.0)
1771
self.assertEqual(y, 0)
1774
def test_patma_145(self):
1780
self.assertEqual(x, frozenset())
1781
self.assertEqual(y, 0)
1784
def test_patma_146(self):
1790
self.assertEqual(x, 0)
1791
self.assertEqual(y, 0)
1794
def test_patma_147(self):
1800
self.assertEqual(x, [])
1801
self.assertEqual(y, 0)
1804
def test_patma_148(self):
1810
self.assertEqual(x, set())
1811
self.assertEqual(y, 0)
1814
def test_patma_149(self):
1820
self.assertEqual(x, "")
1821
self.assertEqual(y, 0)
1824
def test_patma_150(self):
1830
self.assertEqual(x, ())
1831
self.assertEqual(y, 0)
1834
def test_patma_151(self):
1840
self.assertEqual(x, 0)
1844
def test_patma_152(self):
1851
self.assertEqual(w, 0)
1852
self.assertEqual(x, 0)
1855
self.assertEqual(v, 0)
1857
def test_patma_153(self):
1863
self.assertEqual(x, 0)
1865
self.assertEqual(z, 0)
1869
def test_patma_154(self):
1876
self.assertEqual(x, 0)
1877
self.assertIs(y, None)
1879
def test_patma_155(self):
1886
self.assertEqual(x, 0)
1887
self.assertIs(y, None)
1889
def test_patma_156(self):
1895
self.assertEqual(x, 0)
1896
self.assertEqual(y, 0)
1899
def test_patma_157(self):
1906
self.assertEqual(x, 0)
1907
self.assertIs(y, None)
1909
def test_patma_158(self):
1917
self.assertEqual(x, 0)
1918
self.assertEqual(y, 1)
1920
def test_patma_159(self):
1928
self.assertEqual(x, 0)
1929
self.assertEqual(y, 0)
1931
def test_patma_160(self):
1940
self.assertEqual(x, 0)
1941
self.assertEqual(y, 0)
1942
self.assertIs(z, None)
1944
def test_patma_161(self):
1952
self.assertEqual(x, 0)
1953
self.assertEqual(y, 0)
1955
def test_patma_162(self):
1963
self.assertEqual(x, 0)
1964
self.assertEqual(y, 1)
1966
def test_patma_163(self):
1975
self.assertEqual(x, 0)
1976
self.assertIs(y, None)
1978
def test_patma_164(self):
1986
self.assertEqual(x, 0)
1987
self.assertEqual(y, 1)
1990
def test_patma_165(self):
1998
self.assertEqual(x, 0)
1999
self.assertEqual(y, 1)
2001
def test_patma_166(self):
2009
self.assertEqual(x, 0)
2010
self.assertEqual(y, 0)
2013
def test_patma_167(self):
2021
self.assertEqual(x, 0)
2022
self.assertEqual(y, 0)
2025
def test_patma_168(self):
2033
self.assertEqual(x, 0)
2034
self.assertEqual(y, 0)
2037
def test_patma_169(self):
2045
self.assertEqual(x, 0)
2046
self.assertEqual(y, 0)
2049
def test_patma_170(self):
2057
self.assertEqual(x, 0)
2058
self.assertEqual(y, 0)
2060
def test_patma_171(self):
2069
self.assertEqual(x, 0)
2070
self.assertIs(y, None)
2072
def test_patma_172(self):
2081
self.assertEqual(x, 0)
2082
self.assertEqual(y, 0)
2083
self.assertIs(z, None)
2085
def test_patma_173(self):
2093
self.assertEqual(x, 0)
2094
self.assertEqual(y, 0)
2096
def test_patma_174(self):
2098
def http_error(status):
2101
return "Bad request"
2103
return "Unauthorized"
2109
return "I'm a teapot"
2111
return "Something else"
2112
self.assertEqual(http_error(400), "Bad request")
2113
self.assertEqual(http_error(401), "Unauthorized")
2114
self.assertEqual(http_error(403), "Forbidden")
2115
self.assertEqual(http_error(404), "Not found")
2116
self.assertEqual(http_error(418), "I'm a teapot")
2117
self.assertEqual(http_error(123), "Something else")
2118
self.assertEqual(http_error("400"), "Something else")
2119
self.assertEqual(http_error(401 | 403 | 404), "Something else") # 407
2121
def test_patma_175(self):
2123
def http_error(status):
2126
return "Bad request"
2127
case 401 | 403 | 404:
2128
return "Not allowed"
2130
return "I'm a teapot"
2131
self.assertEqual(http_error(400), "Bad request")
2132
self.assertEqual(http_error(401), "Not allowed")
2133
self.assertEqual(http_error(403), "Not allowed")
2134
self.assertEqual(http_error(404), "Not allowed")
2135
self.assertEqual(http_error(418), "I'm a teapot")
2136
self.assertIs(http_error(123), None)
2137
self.assertIs(http_error("400"), None)
2138
self.assertIs(http_error(401 | 403 | 404), None) # 407
2140
def test_patma_176(self):
2151
return f"X={x}, Y={y}"
2153
return "Not a point"
2154
self.assertEqual(whereis((0, 0)), "Origin")
2155
self.assertEqual(whereis((0, -1.0)), "Y=-1.0")
2156
self.assertEqual(whereis(("X", 0)), "X=X")
2157
self.assertEqual(whereis((None, 1j)), "X=None, Y=1j")
2158
self.assertEqual(whereis(42), "Not a point")
2160
def test_patma_177(self):
2171
return "Somewhere else"
2173
return "Not a point"
2174
self.assertEqual(whereis(Point(1, 0)), "X=1")
2175
self.assertEqual(whereis(Point(0, 0)), "Origin")
2176
self.assertEqual(whereis(10), "Not a point")
2177
self.assertEqual(whereis(Point(False, False)), "Origin")
2178
self.assertEqual(whereis(Point(0, -1.0)), "Y=-1.0")
2179
self.assertEqual(whereis(Point("X", 0)), "X=X")
2180
self.assertEqual(whereis(Point(None, 1j)), "Somewhere else")
2181
self.assertEqual(whereis(Point), "Not a point")
2182
self.assertEqual(whereis(42), "Not a point")
2184
def test_patma_178(self):
2190
self.assertEqual(whereis(Point(1, 0)), 0)
2191
self.assertIs(whereis(Point(0, 0)), None)
2193
def test_patma_179(self):
2197
case Point(1, y=var):
2199
self.assertEqual(whereis(Point(1, 0)), 0)
2200
self.assertIs(whereis(Point(0, 0)), None)
2202
def test_patma_180(self):
2206
case Point(x=1, y=var):
2208
self.assertEqual(whereis(Point(1, 0)), 0)
2209
self.assertIs(whereis(Point(0, 0)), None)
2211
def test_patma_181(self):
2215
case Point(y=var, x=1):
2217
self.assertEqual(whereis(Point(1, 0)), 0)
2218
self.assertIs(whereis(Point(0, 0)), None)
2220
def test_patma_182(self):
2222
def whereis(points):
2229
return f"Single point {x}, {y}"
2230
case [Point(0, y1), Point(0, y2)]:
2231
return f"Two on the Y axis at {y1}, {y2}"
2233
return "Something else"
2234
self.assertEqual(whereis([]), "No points")
2235
self.assertEqual(whereis([Point(0, 0)]), "The origin")
2236
self.assertEqual(whereis([Point(0, 1)]), "Single point 0, 1")
2237
self.assertEqual(whereis([Point(0, 0), Point(0, 0)]), "Two on the Y axis at 0, 0")
2238
self.assertEqual(whereis([Point(0, 1), Point(0, 1)]), "Two on the Y axis at 1, 1")
2239
self.assertEqual(whereis([Point(0, 0), Point(1, 0)]), "Something else")
2240
self.assertEqual(whereis([Point(0, 0), Point(0, 0), Point(0, 0)]), "Something else")
2241
self.assertEqual(whereis([Point(0, 1), Point(0, 1), Point(0, 1)]), "Something else")
2243
def test_patma_183(self):
2247
case Point(x, y) if x == y:
2248
return f"Y=X at {x}"
2250
return "Not on the diagonal"
2251
self.assertEqual(whereis(Point(0, 0)), "Y=X at 0")
2252
self.assertEqual(whereis(Point(0, False)), "Y=X at 0")
2253
self.assertEqual(whereis(Point(False, 0)), "Y=X at False")
2254
self.assertEqual(whereis(Point(-1 - 1j, -1 - 1j)), "Y=X at (-1-1j)")
2255
self.assertEqual(whereis(Point("X", "X")), "Y=X at X")
2256
self.assertEqual(whereis(Point("X", "x")), "Not on the diagonal")
2258
def test_patma_184(self):
2260
class Seq(collections.abc.Sequence):
2267
self.assertEqual(y, 0)
2269
def test_patma_185(self):
2271
class Seq(collections.abc.Sequence):
2278
self.assertEqual(y, 0)
2280
def test_patma_186(self):
2282
class Seq(collections.abc.Sequence):
2283
def __getitem__(self, i):
2290
self.assertEqual(x, 0)
2291
self.assertEqual(y, 41)
2292
self.assertEqual(z, 0)
2294
def test_patma_187(self):
2300
self.assertEqual(w, range(10))
2301
self.assertEqual(x, 0)
2302
self.assertEqual(y, 1)
2303
self.assertEqual(z, 0)
2304
self.assertEqual(rest, list(range(2, 10)))
2306
def test_patma_188(self):
2312
self.assertEqual(w, range(100))
2313
self.assertEqual(x, 0)
2314
self.assertEqual(y, 1)
2315
self.assertEqual(z, 0)
2316
self.assertEqual(rest, list(range(2, 100)))
2318
def test_patma_189(self):
2324
self.assertEqual(w, range(1000))
2325
self.assertEqual(x, 0)
2326
self.assertEqual(y, 1)
2327
self.assertEqual(z, 0)
2328
self.assertEqual(rest, list(range(2, 1000)))
2330
def test_patma_190(self):
2336
self.assertEqual(w, range(1 << 10))
2337
self.assertEqual(x, 0)
2338
self.assertEqual(y, 1)
2339
self.assertEqual(z, 0)
2341
def test_patma_191(self):
2347
self.assertEqual(w, range(1 << 20))
2348
self.assertEqual(x, 0)
2349
self.assertEqual(y, 1)
2350
self.assertEqual(z, 0)
2352
def test_patma_192(self):
2358
self.assertEqual(w, range(1 << 30))
2359
self.assertEqual(x, 0)
2360
self.assertEqual(y, 1)
2361
self.assertEqual(z, 0)
2363
def test_patma_193(self):
2365
x = {"bandwidth": 0, "latency": 1}
2367
case {"bandwidth": b, "latency": l}:
2369
self.assertEqual(x, {"bandwidth": 0, "latency": 1})
2370
self.assertIs(b, x["bandwidth"])
2371
self.assertIs(l, x["latency"])
2372
self.assertEqual(y, 0)
2374
def test_patma_194(self):
2376
x = {"bandwidth": 0, "latency": 1, "key": "value"}
2378
case {"latency": l, "bandwidth": b}:
2380
self.assertEqual(x, {"bandwidth": 0, "latency": 1, "key": "value"})
2381
self.assertIs(l, x["latency"])
2382
self.assertIs(b, x["bandwidth"])
2383
self.assertEqual(y, 0)
2385
def test_patma_195(self):
2387
x = {"bandwidth": 0, "latency": 1, "key": "value"}
2389
case {"bandwidth": b, "latency": l, **rest}:
2391
self.assertEqual(x, {"bandwidth": 0, "latency": 1, "key": "value"})
2392
self.assertIs(b, x["bandwidth"])
2393
self.assertIs(l, x["latency"])
2394
self.assertEqual(rest, {"key": "value"})
2395
self.assertEqual(y, 0)
2397
def test_patma_196(self):
2399
x = {"bandwidth": 0, "latency": 1}
2401
case {"latency": l, "bandwidth": b, **rest}:
2403
self.assertEqual(x, {"bandwidth": 0, "latency": 1})
2404
self.assertIs(l, x["latency"])
2405
self.assertIs(b, x["bandwidth"])
2406
self.assertEqual(rest, {})
2407
self.assertEqual(y, 0)
2409
def test_patma_197(self):
2411
w = [Point(-1, 0), Point(1, 2)]
2413
case (Point(x1, y1), Point(x2, y2) as p2):
2415
self.assertEqual(w, [Point(-1, 0), Point(1, 2)])
2416
self.assertIs(x1, w[0].x)
2417
self.assertIs(y1, w[0].y)
2418
self.assertIs(p2, w[1])
2419
self.assertIs(x2, w[1].x)
2420
self.assertIs(y2, w[1].y)
2423
def test_patma_198(self):
2425
class Color(enum.Enum):
2434
return "Grass is green"
2436
return "I'm feeling the blues :("
2437
self.assertEqual(f(Color.RED), "I see red!")
2438
self.assertEqual(f(Color.GREEN), "Grass is green")
2439
self.assertEqual(f(Color.BLUE), "I'm feeling the blues :(")
2440
self.assertIs(f(Color), None)
2441
self.assertIs(f(0), None)
2442
self.assertIs(f(1), None)
2443
self.assertIs(f(2), None)
2444
self.assertIs(f(3), None)
2445
self.assertIs(f(False), None)
2446
self.assertIs(f(True), None)
2447
self.assertIs(f(2+0j), None)
2448
self.assertIs(f(3.0), None)
2450
def test_patma_199(self):
2452
class Color(int, enum.Enum):
2461
return "Grass is green"
2463
return "I'm feeling the blues :("
2464
self.assertEqual(f(Color.RED), "I see red!")
2465
self.assertEqual(f(Color.GREEN), "Grass is green")
2466
self.assertEqual(f(Color.BLUE), "I'm feeling the blues :(")
2467
self.assertIs(f(Color), None)
2468
self.assertEqual(f(0), "I see red!")
2469
self.assertEqual(f(1), "Grass is green")
2470
self.assertEqual(f(2), "I'm feeling the blues :(")
2471
self.assertIs(f(3), None)
2472
self.assertEqual(f(False), "I see red!")
2473
self.assertEqual(f(True), "Grass is green")
2474
self.assertEqual(f(2+0j), "I'm feeling the blues :(")
2475
self.assertIs(f(3.0), None)
2477
def test_patma_200(self):
2480
__match_args__ = ("a", "b")
2487
self.assertIs(x, c.a)
2488
self.assertIs(y, c.b)
2489
self.assertEqual(z, 0)
2491
def test_patma_201(self):
2494
__match_args__ = ("a", "b")
2501
self.assertIs(x, c.a)
2502
self.assertIs(y, c.b)
2503
self.assertEqual(z, 0)
2505
def test_patma_202(self):
2508
__match_args__ = "a", "b"
2509
class Child(Parent):
2510
__match_args__ = ("c", "d")
2517
self.assertIs(x, c.a)
2518
self.assertIs(y, c.b)
2519
self.assertEqual(z, 0)
2521
def test_patma_203(self):
2524
__match_args__ = ("a", "b")
2525
class Child(Parent):
2526
__match_args__ = "c", "d"
2531
case Parent(x, b=y):
2533
self.assertIs(x, c.a)
2534
self.assertIs(y, c.b)
2535
self.assertEqual(z, 0)
2537
def test_patma_204(self):
2545
self.assertEqual(f(42), {})
2546
self.assertIs(f(0), None)
2547
self.assertEqual(f(42.0), {})
2548
self.assertIs(f("42"), None)
2550
def test_patma_205(self):
2558
self.assertEqual(f(42.0), {})
2559
self.assertEqual(f(42), {})
2560
self.assertIs(f(0.0), None)
2561
self.assertIs(f(0), None)
2563
def test_patma_206(self):
2571
self.assertEqual(f(1), {})
2572
self.assertEqual(f(2), {})
2573
self.assertEqual(f(3), {})
2574
self.assertEqual(f(3.0), {})
2575
self.assertIs(f(0), None)
2576
self.assertIs(f(4), None)
2577
self.assertIs(f("1"), None)
2579
def test_patma_207(self):
2583
case [1, 2] | [3, 4]:
2587
self.assertEqual(f([1, 2]), {})
2588
self.assertEqual(f([3, 4]), {})
2589
self.assertIs(f(42), None)
2590
self.assertIs(f([2, 3]), None)
2591
self.assertIs(f([1, 2, 3]), None)
2592
self.assertEqual(f([1, 2.0]), {})
2594
def test_patma_208(self):
2602
self.assertEqual(f(42), {"x": 42})
2603
self.assertEqual(f((1, 2)), {"x": (1, 2)})
2604
self.assertEqual(f(None), {"x": None})
2606
def test_patma_209(self):
2614
self.assertEqual(f(42), {})
2615
self.assertEqual(f(None), {})
2616
self.assertEqual(f((1, 2)), {})
2618
def test_patma_210(self):
2626
self.assertEqual(f((1, 2, 3)), {"x": 1, "y": 2, "z": 3})
2627
self.assertIs(f((1, 2)), None)
2628
self.assertIs(f((1, 2, 3, 4)), None)
2629
self.assertIs(f(123), None)
2630
self.assertIs(f("abc"), None)
2631
self.assertIs(f(b"abc"), None)
2632
self.assertEqual(f(array.array("b", b"abc")), {'x': 97, 'y': 98, 'z': 99})
2633
self.assertEqual(f(memoryview(b"abc")), {"x": 97, "y": 98, "z": 99})
2634
self.assertIs(f(bytearray(b"abc")), None)
2636
def test_patma_211(self):
2640
case {"x": x, "y": "y", "z": z}:
2644
self.assertEqual(f({"x": "x", "y": "y", "z": "z"}), {"x": "x", "z": "z"})
2645
self.assertEqual(f({"x": "x", "y": "y", "z": "z", "a": "a"}), {"x": "x", "z": "z"})
2646
self.assertIs(f(({"x": "x", "y": "yy", "z": "z", "a": "a"})), None)
2647
self.assertIs(f(({"x": "x", "y": "y"})), None)
2649
def test_patma_212(self):
2653
case Point(int(xx), y="hello"):
2657
self.assertEqual(f(Point(42, "hello")), {"xx": 42})
2659
def test_patma_213(self):
2667
self.assertEqual(f((1, 2)), {"p": 1, "q": 2, "x": (1, 2)})
2668
self.assertEqual(f([1, 2]), {"p": 1, "q": 2, "x": [1, 2]})
2669
self.assertIs(f(12), None)
2670
self.assertIs(f((1, 2, 3)), None)
2672
def test_patma_214(self):
2678
self.assertEqual(set(f()), set())
2680
def test_patma_215(self):
2686
self.assertEqual(set(f()), set())
2688
def test_patma_216(self):
2694
self.assertEqual(set(f()), set())
2696
def test_patma_217(self):
2702
self.assertEqual(set(f()), {"abc"})
2704
def test_patma_218(self):
2710
self.assertEqual(set(f()), {"a", "b"})
2712
def test_patma_219(self):
2715
match {"k": ..., "l": ...}:
2716
case {"k": a, "l": b}:
2718
self.assertEqual(set(f()), {"a", "b"})
2720
def test_patma_220(self):
2723
match Point(..., ...):
2726
self.assertEqual(set(f()), {"x", "y"})
2728
def test_patma_221(self):
2734
self.assertEqual(set(f()), {"a", "b"})
2736
def test_patma_222(self):
2742
self.assertEqual(f(0), 0)
2743
self.assertEqual(f(1), 0)
2744
self.assertEqual(f(2), 0)
2745
self.assertEqual(f(3), 0)
2747
def test_patma_223(self):
2753
self.assertEqual(f(0), 0)
2754
self.assertIs(f(1), None)
2755
self.assertIs(f(2), None)
2756
self.assertIs(f(3), None)
2758
def test_patma_224(self):
2766
self.assertEqual(f(0), 0)
2767
self.assertEqual(f(1), 1)
2768
self.assertEqual(f(2), 1)
2769
self.assertEqual(f(3), 1)
2771
def test_patma_225(self):
2779
self.assertEqual(f(0), 0)
2780
self.assertEqual(f(1), 1)
2781
self.assertIs(f(2), None)
2782
self.assertIs(f(3), None)
2784
def test_patma_226(self):
2794
self.assertEqual(f(0), 0)
2795
self.assertEqual(f(1), 1)
2796
self.assertEqual(f(2), 2)
2797
self.assertEqual(f(3), 2)
2799
def test_patma_227(self):
2809
self.assertEqual(f(0), 0)
2810
self.assertEqual(f(1), 1)
2811
self.assertEqual(f(2), 2)
2812
self.assertIs(f(3), None)
2814
def test_patma_228(self):
2819
self.assertEqual(x, 0)
2821
def test_patma_229(self):
2827
self.assertEqual(x, 0)
2828
self.assertEqual(y, 0)
2830
def test_patma_230(self):
2838
self.assertEqual(x, 0)
2839
self.assertEqual(y, 1)
2841
def test_patma_231(self):
2849
self.assertEqual(x, 1)
2850
self.assertEqual(y, 1)
2852
def test_patma_232(self):
2855
def __eq__(self, other):
2862
self.assertIs(x, eq)
2863
self.assertEqual(y, None)
2865
def test_patma_233(self):
2871
self.assertIs(x, False)
2872
self.assertEqual(y, 0)
2874
def test_patma_234(self):
2880
self.assertIs(x, True)
2881
self.assertEqual(y, 0)
2883
def test_patma_235(self):
2889
self.assertIs(x, None)
2890
self.assertEqual(y, 0)
2892
def test_patma_236(self):
2898
self.assertEqual(w, 0)
2899
self.assertEqual(x, 0)
2900
self.assertEqual(y, 0)
2901
self.assertEqual(z, 0)
2903
def test_patma_237(self):
2909
self.assertEqual(w, 0)
2910
self.assertEqual(x, 0)
2911
self.assertEqual(y, 0)
2912
self.assertEqual(z, 0)
2914
def test_patma_238(self):
2916
x = ((0, 1), (2, 3))
2918
case ((a as b, c as d) as e) as w, ((f as g, h) as i) as z:
2920
self.assertEqual(a, 0)
2921
self.assertEqual(b, 0)
2922
self.assertEqual(c, 1)
2923
self.assertEqual(d, 1)
2924
self.assertEqual(e, (0, 1))
2925
self.assertEqual(f, 2)
2926
self.assertEqual(g, 2)
2927
self.assertEqual(h, 3)
2928
self.assertEqual(i, (2, 3))
2929
self.assertEqual(w, (0, 1))
2930
self.assertEqual(x, ((0, 1), (2, 3)))
2931
self.assertEqual(y, 0)
2932
self.assertEqual(z, (2, 3))
2934
def test_patma_239(self):
2936
x = collections.UserDict({0: 1, 2: 3})
2940
self.assertEqual(x, {0: 1, 2: 3})
2941
self.assertEqual(y, 0)
2943
def test_patma_240(self):
2945
x = collections.UserDict({0: 1, 2: 3})
2949
self.assertEqual(x, {0: 1, 2: 3})
2950
self.assertEqual(y, 0)
2951
self.assertEqual(z, {0: 1})
2953
def test_patma_241(self):
2957
case list([({-0-0j: int(real=0+0j, imag=0-0j) | (1) as z},)]):
2959
self.assertEqual(x, [[{0: 0}]])
2960
self.assertEqual(y, 0)
2961
self.assertEqual(z, 0)
2963
def test_patma_242(self):
2969
self.assertEqual(w, 0)
2970
self.assertEqual(x, range(3))
2971
self.assertEqual(y, 0)
2972
self.assertEqual(z, 2)
2974
def test_patma_243(self):
2980
self.assertEqual(x, range(3))
2981
self.assertEqual(y, 2)
2982
self.assertEqual(z, 0)
2984
def test_patma_244(self):
2990
self.assertEqual(x, range(3))
2991
self.assertEqual(y, 2)
2992
self.assertEqual(z, 0)
2994
def test_patma_245(self):
2998
case {"y": (0 as y) | (1 as y)}:
3000
self.assertEqual(x, {"y": 1})
3001
self.assertEqual(y, 1)
3002
self.assertEqual(z, 0)
3004
def test_patma_246(self):
3008
case ((a, b, c, d, e, f, g, h, i, 9) |
3009
(h, g, i, a, b, d, e, c, f, 10) |
3010
(g, b, a, c, d, -5, e, h, i, f) |
3011
(-1, d, f, b, g, e, i, a, h, c)):
3017
dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0),
3018
dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0),
3019
dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0),
3020
dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0),
3023
self.assertEqual(f(range(10)), alts[0])
3024
self.assertEqual(f(range(1, 11)), alts[1])
3025
self.assertEqual(f(range(0, -10, -1)), alts[2])
3026
self.assertEqual(f(range(-1, -11, -1)), alts[3])
3027
self.assertEqual(f(range(10, 20)), alts[4])
3029
def test_patma_247(self):
3033
case [y, (a, b, c, d, e, f, g, h, i, 9) |
3034
(h, g, i, a, b, d, e, c, f, 10) |
3035
(g, b, a, c, d, -5, e, h, i, f) |
3036
(-1, d, f, b, g, e, i, a, h, c), z]:
3042
dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0, y=False, z=True),
3043
dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0, y=False, z=True),
3044
dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0, y=False, z=True),
3045
dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0, y=False, z=True),
3048
self.assertEqual(f((False, range(10), True)), alts[0])
3049
self.assertEqual(f((False, range(1, 11), True)), alts[1])
3050
self.assertEqual(f((False, range(0, -10, -1), True)), alts[2])
3051
self.assertEqual(f((False, range(-1, -11, -1), True)), alts[3])
3052
self.assertEqual(f((False, range(10, 20), True)), alts[4])
3054
def test_patma_248(self):
3058
def get(key, default=None):
3061
x = C({'foo': 'bar'})
3066
self.assertEqual(y, 'bar')
3068
def test_patma_249(self):
3071
__attr = "eggs" # mangled to _C__attr
3072
_Outer__attr = "bacon"
3076
# looks up __attr, not _C__attr or _Outer__attr
3080
setattr(c, "__attr", "spam") # setattr is needed because we're in a class scope
3081
self.assertEqual(Outer().f(c), "spam")
3084
class TestSyntaxErrors(unittest.TestCase):
3086
def assert_syntax_error(self, code: str):
3087
with self.assertRaises(SyntaxError):
3088
compile(inspect.cleandoc(code), "<test>", "exec")
3090
def test_alternative_patterns_bind_different_names_0(self):
3091
self.assert_syntax_error("""
3097
def test_alternative_patterns_bind_different_names_1(self):
3098
self.assert_syntax_error("""
3100
case [a, [b] | [c] | [d]]:
3105
@disable # validation will be added when class patterns are added
3106
def test_attribute_name_repeated_in_class_pattern(self):
3107
self.assert_syntax_error("""
3109
case Class(a=_, a=_):
3113
def test_imaginary_number_required_in_complex_literal_0(self):
3114
self.assert_syntax_error("""
3120
def test_imaginary_number_required_in_complex_literal_1(self):
3121
self.assert_syntax_error("""
3127
def test_invalid_syntax_0(self):
3128
self.assert_syntax_error("""
3130
case {**rest, "key": value}:
3134
def test_invalid_syntax_1(self):
3135
self.assert_syntax_error("""
3137
case {"first": first, **rest, "last": last}:
3141
def test_invalid_syntax_2(self):
3142
self.assert_syntax_error("""
3148
def test_invalid_syntax_3(self):
3149
self.assert_syntax_error("""
3155
def test_mapping_pattern_keys_may_only_match_literals_and_attribute_lookups(self):
3156
self.assert_syntax_error("""
3162
def test_multiple_assignments_to_name_in_pattern_0(self):
3163
self.assert_syntax_error("""
3169
def test_multiple_assignments_to_name_in_pattern_1(self):
3170
self.assert_syntax_error("""
3172
case {"k": a, "l": a}:
3176
def test_multiple_assignments_to_name_in_pattern_2(self):
3177
self.assert_syntax_error("""
3183
def test_multiple_assignments_to_name_in_pattern_3(self):
3184
self.assert_syntax_error("""
3186
case MyClass(x=x, y=x):
3190
def test_multiple_assignments_to_name_in_pattern_4(self):
3191
self.assert_syntax_error("""
3193
case MyClass(x, y=x):
3197
def test_multiple_assignments_to_name_in_pattern_5(self):
3198
self.assert_syntax_error("""
3204
@disable # will be implemented as part of sequence patterns
3205
def test_multiple_starred_names_in_sequence_pattern_0(self):
3206
self.assert_syntax_error("""
3208
case *a, b, *c, d, *e:
3212
@disable # will be implemented as part of sequence patterns
3213
def test_multiple_starred_names_in_sequence_pattern_1(self):
3214
self.assert_syntax_error("""
3216
case a, *b, c, *d, e:
3220
def test_name_capture_makes_remaining_patterns_unreachable_0(self):
3221
self.assert_syntax_error("""
3227
def test_name_capture_makes_remaining_patterns_unreachable_1(self):
3228
self.assert_syntax_error("""
3236
def test_name_capture_makes_remaining_patterns_unreachable_2(self):
3237
self.assert_syntax_error("""
3239
case x | [_ as x] if x:
3243
def test_name_capture_makes_remaining_patterns_unreachable_3(self):
3244
self.assert_syntax_error("""
3252
def test_name_capture_makes_remaining_patterns_unreachable_4(self):
3253
self.assert_syntax_error("""
3261
def test_patterns_may_only_match_literals_and_attribute_lookups_0(self):
3262
self.assert_syntax_error("""
3268
def test_patterns_may_only_match_literals_and_attribute_lookups_1(self):
3269
self.assert_syntax_error("""
3275
def test_real_number_required_in_complex_literal_0(self):
3276
self.assert_syntax_error("""
3282
def test_real_number_required_in_complex_literal_1(self):
3283
self.assert_syntax_error("""
3289
def test_real_number_required_in_complex_literal_2(self):
3290
self.assert_syntax_error("""
3296
def test_real_number_required_in_complex_literal_3(self):
3297
self.assert_syntax_error("""
3303
def test_wildcard_makes_remaining_patterns_unreachable_0(self):
3304
self.assert_syntax_error("""
3310
def test_wildcard_makes_remaining_patterns_unreachable_1(self):
3311
self.assert_syntax_error("""
3313
case (_ as x) | [x]:
3317
def test_wildcard_makes_remaining_patterns_unreachable_2(self):
3318
self.assert_syntax_error("""
3320
case _ | _ if condition():
3324
def test_wildcard_makes_remaining_patterns_unreachable_3(self):
3325
self.assert_syntax_error("""
3333
def test_wildcard_makes_remaining_patterns_unreachable_4(self):
3334
self.assert_syntax_error("""
3336
case (None | _) | _:
3340
def test_wildcard_makes_remaining_patterns_unreachable_5(self):
3341
self.assert_syntax_error("""
3343
case _ | (True | False):
3347
@disable # validation will be added when class patterns are added
3348
def test_mapping_pattern_duplicate_key(self):
3349
self.assert_syntax_error("""
3351
case {"a": _, "a": _}:
3355
@disable # validation will be added when class patterns are added
3356
def test_mapping_pattern_duplicate_key_edge_case0(self):
3357
self.assert_syntax_error("""
3359
case {0: _, False: _}:
3363
@disable # validation will be added when class patterns are added
3364
def test_mapping_pattern_duplicate_key_edge_case1(self):
3365
self.assert_syntax_error("""
3367
case {0: _, 0.0: _}:
3371
@disable # validation will be added when class patterns are added
3372
def test_mapping_pattern_duplicate_key_edge_case2(self):
3373
self.assert_syntax_error("""
3379
@disable # validation will be added when class patterns are added
3380
def test_mapping_pattern_duplicate_key_edge_case3(self):
3381
self.assert_syntax_error("""
3387
class TestTypeErrors(unittest.TestCase):
3389
def test_accepts_positional_subpatterns_0(self):
3395
with self.assertRaises(TypeError):
3399
self.assertIs(y, None)
3400
self.assertIs(z, None)
3402
def test_accepts_positional_subpatterns_1(self):
3406
with self.assertRaises(TypeError):
3410
self.assertEqual(x, range(10))
3411
self.assertIs(y, None)
3413
def test_got_multiple_subpatterns_for_attribute_0(self):
3416
__match_args__ = ("a", "a")
3420
with self.assertRaises(TypeError):
3424
self.assertIs(w, None)
3425
self.assertIs(y, None)
3426
self.assertIs(z, None)
3428
def test_got_multiple_subpatterns_for_attribute_1(self):
3431
__match_args__ = ("a",)
3435
with self.assertRaises(TypeError):
3439
self.assertIs(w, None)
3440
self.assertIs(y, None)
3441
self.assertIs(z, None)
3443
def test_match_args_elements_must_be_strings(self):
3446
__match_args__ = (None,)
3449
with self.assertRaises(TypeError):
3453
self.assertIs(y, None)
3454
self.assertIs(z, None)
3456
def test_match_args_must_be_a_tuple_0(self):
3459
__match_args__ = None
3462
with self.assertRaises(TypeError):
3466
self.assertIs(y, None)
3467
self.assertIs(z, None)
3469
def test_match_args_must_be_a_tuple_1(self):
3472
__match_args__ = "XYZ"
3475
with self.assertRaises(TypeError):
3479
self.assertIs(y, None)
3480
self.assertIs(z, None)
3482
def test_match_args_must_be_a_tuple_2(self):
3485
__match_args__ = ["spam", "eggs"]
3490
with self.assertRaises(TypeError):
3494
self.assertIs(w, None)
3495
self.assertIs(y, None)
3496
self.assertIs(z, None)
3499
class TestValueErrors(unittest.TestCase):
3501
def test_mapping_pattern_checks_duplicate_key_1(self):
3505
x = {"a": 0, "b": 1}
3507
with self.assertRaises(ValueError):
3509
case {Keys.KEY: y, "a": z}:
3511
self.assertIs(w, None)
3512
self.assertIs(y, None)
3513
self.assertIs(z, None)
3520
class PerfPatma(TestPatma):
3522
def assertEqual(*_, **__):
3525
def assertIs(*_, **__):
3528
def assertRaises(*_, **__):
3529
assert False, "this test should be a method of a different class!"
3531
def run_perf(self, count):
3533
for attr in vars(TestPatma):
3534
if attr.startswith("test_"):
3535
tests.append(getattr(self, attr))
3537
start = pyperf.perf_counter()
3540
return pyperf.perf_counter() - start
3543
runner = pyperf.Runner()
3544
runner.bench_time_func("patma", PerfPatma().run_perf)
3547
if __name__ == "__main__":
3549
# From inside environment using this Python, with pyperf installed:
3550
sudo $(which pyperf) system tune && \
3551
$(which python) -m test.test_patma --rigorous; \
3552
sudo $(which pyperf) system reset