| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210 |
- import array
- import collections
- import dataclasses
- import enum
- import inspect
- import sys
- import unittest
- @dataclasses.dataclass
- class Point:
- x: int
- y: int
- class TestCompiler(unittest.TestCase):
- def test_refleaks(self):
- # Hunting for leaks using -R doesn't catch leaks in the compiler itself,
- # just the code under test. This test ensures that if there are leaks in
- # the pattern compiler, those runs will fail:
- with open(__file__) as file:
- compile(file.read(), __file__, "exec")
- class TestInheritance(unittest.TestCase):
- @staticmethod
- def check_sequence_then_mapping(x):
- match x:
- case [*_]:
- return "seq"
- case {}:
- return "map"
- @staticmethod
- def check_mapping_then_sequence(x):
- match x:
- case {}:
- return "map"
- case [*_]:
- return "seq"
- def test_multiple_inheritance_mapping(self):
- class C:
- pass
- class M1(collections.UserDict, collections.abc.Sequence):
- pass
- class M2(C, collections.UserDict, collections.abc.Sequence):
- pass
- class M3(collections.UserDict, C, list):
- pass
- class M4(dict, collections.abc.Sequence, C):
- pass
- self.assertEqual(self.check_sequence_then_mapping(M1()), "map")
- self.assertEqual(self.check_sequence_then_mapping(M2()), "map")
- self.assertEqual(self.check_sequence_then_mapping(M3()), "map")
- self.assertEqual(self.check_sequence_then_mapping(M4()), "map")
- self.assertEqual(self.check_mapping_then_sequence(M1()), "map")
- self.assertEqual(self.check_mapping_then_sequence(M2()), "map")
- self.assertEqual(self.check_mapping_then_sequence(M3()), "map")
- self.assertEqual(self.check_mapping_then_sequence(M4()), "map")
- def test_multiple_inheritance_sequence(self):
- class C:
- pass
- class S1(collections.UserList, collections.abc.Mapping):
- pass
- class S2(C, collections.UserList, collections.abc.Mapping):
- pass
- class S3(list, C, collections.abc.Mapping):
- pass
- class S4(collections.UserList, dict, C):
- pass
- self.assertEqual(self.check_sequence_then_mapping(S1()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(S2()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(S3()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(S4()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(S1()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(S2()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(S3()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(S4()), "seq")
- def test_late_registration_mapping(self):
- class Parent:
- pass
- class ChildPre(Parent):
- pass
- class GrandchildPre(ChildPre):
- pass
- collections.abc.Mapping.register(Parent)
- class ChildPost(Parent):
- pass
- class GrandchildPost(ChildPost):
- pass
- self.assertEqual(self.check_sequence_then_mapping(Parent()), "map")
- self.assertEqual(self.check_sequence_then_mapping(ChildPre()), "map")
- self.assertEqual(self.check_sequence_then_mapping(GrandchildPre()), "map")
- self.assertEqual(self.check_sequence_then_mapping(ChildPost()), "map")
- self.assertEqual(self.check_sequence_then_mapping(GrandchildPost()), "map")
- self.assertEqual(self.check_mapping_then_sequence(Parent()), "map")
- self.assertEqual(self.check_mapping_then_sequence(ChildPre()), "map")
- self.assertEqual(self.check_mapping_then_sequence(GrandchildPre()), "map")
- self.assertEqual(self.check_mapping_then_sequence(ChildPost()), "map")
- self.assertEqual(self.check_mapping_then_sequence(GrandchildPost()), "map")
- def test_late_registration_sequence(self):
- class Parent:
- pass
- class ChildPre(Parent):
- pass
- class GrandchildPre(ChildPre):
- pass
- collections.abc.Sequence.register(Parent)
- class ChildPost(Parent):
- pass
- class GrandchildPost(ChildPost):
- pass
- self.assertEqual(self.check_sequence_then_mapping(Parent()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(ChildPre()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(GrandchildPre()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(ChildPost()), "seq")
- self.assertEqual(self.check_sequence_then_mapping(GrandchildPost()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(Parent()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(ChildPre()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(GrandchildPre()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(ChildPost()), "seq")
- self.assertEqual(self.check_mapping_then_sequence(GrandchildPost()), "seq")
- class TestPatma(unittest.TestCase):
- def test_patma_000(self):
- match 0:
- case 0:
- x = True
- self.assertIs(x, True)
- def test_patma_001(self):
- match 0:
- case 0 if False:
- x = False
- case 0 if True:
- x = True
- self.assertIs(x, True)
- def test_patma_002(self):
- match 0:
- case 0:
- x = True
- case 0:
- x = False
- self.assertIs(x, True)
- def test_patma_003(self):
- x = False
- match 0:
- case 0 | 1 | 2 | 3:
- x = True
- self.assertIs(x, True)
- def test_patma_004(self):
- x = False
- match 1:
- case 0 | 1 | 2 | 3:
- x = True
- self.assertIs(x, True)
- def test_patma_005(self):
- x = False
- match 2:
- case 0 | 1 | 2 | 3:
- x = True
- self.assertIs(x, True)
- def test_patma_006(self):
- x = False
- match 3:
- case 0 | 1 | 2 | 3:
- x = True
- self.assertIs(x, True)
- def test_patma_007(self):
- x = False
- match 4:
- case 0 | 1 | 2 | 3:
- x = True
- self.assertIs(x, False)
- def test_patma_008(self):
- x = 0
- class A:
- y = 1
- match x:
- case A.y as z:
- pass
- self.assertEqual(x, 0)
- self.assertEqual(A.y, 1)
- def test_patma_009(self):
- class A:
- B = 0
- match 0:
- case x if x:
- z = 0
- case _ as y if y == x and y:
- z = 1
- case A.B:
- z = 2
- self.assertEqual(A.B, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertEqual(z, 2)
- def test_patma_010(self):
- match ():
- case []:
- x = 0
- self.assertEqual(x, 0)
- def test_patma_011(self):
- match (0, 1, 2):
- case [*x]:
- y = 0
- self.assertEqual(x, [0, 1, 2])
- self.assertEqual(y, 0)
- def test_patma_012(self):
- match (0, 1, 2):
- case [0, *x]:
- y = 0
- self.assertEqual(x, [1, 2])
- self.assertEqual(y, 0)
- def test_patma_013(self):
- match (0, 1, 2):
- case [0, 1, *x,]:
- y = 0
- self.assertEqual(x, [2])
- self.assertEqual(y, 0)
- def test_patma_014(self):
- match (0, 1, 2):
- case [0, 1, 2, *x]:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_015(self):
- match (0, 1, 2):
- case [*x, 2,]:
- y = 0
- self.assertEqual(x, [0, 1])
- self.assertEqual(y, 0)
- def test_patma_016(self):
- match (0, 1, 2):
- case [*x, 1, 2]:
- y = 0
- self.assertEqual(x, [0])
- self.assertEqual(y, 0)
- def test_patma_017(self):
- match (0, 1, 2):
- case [*x, 0, 1, 2,]:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_018(self):
- match (0, 1, 2):
- case [0, *x, 2]:
- y = 0
- self.assertEqual(x, [1])
- self.assertEqual(y, 0)
- def test_patma_019(self):
- match (0, 1, 2):
- case [0, 1, *x, 2,]:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_020(self):
- match (0, 1, 2):
- case [0, *x, 1, 2]:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_021(self):
- match (0, 1, 2):
- case [*x,]:
- y = 0
- self.assertEqual(x, [0, 1, 2])
- self.assertEqual(y, 0)
- def test_patma_022(self):
- x = {}
- match x:
- case {}:
- y = 0
- self.assertEqual(x, {})
- self.assertEqual(y, 0)
- def test_patma_023(self):
- x = {0: 0}
- match x:
- case {}:
- y = 0
- self.assertEqual(x, {0: 0})
- self.assertEqual(y, 0)
- def test_patma_024(self):
- x = {}
- y = None
- match x:
- case {0: 0}:
- y = 0
- self.assertEqual(x, {})
- self.assertIs(y, None)
- def test_patma_025(self):
- x = {0: 0}
- match x:
- case {0: (0 | 1 | 2 as z)}:
- y = 0
- self.assertEqual(x, {0: 0})
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_026(self):
- x = {0: 1}
- match x:
- case {0: (0 | 1 | 2 as z)}:
- y = 0
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 0)
- self.assertEqual(z, 1)
- def test_patma_027(self):
- x = {0: 2}
- match x:
- case {0: (0 | 1 | 2 as z)}:
- y = 0
- self.assertEqual(x, {0: 2})
- self.assertEqual(y, 0)
- self.assertEqual(z, 2)
- def test_patma_028(self):
- x = {0: 3}
- y = None
- match x:
- case {0: (0 | 1 | 2 as z)}:
- y = 0
- self.assertEqual(x, {0: 3})
- self.assertIs(y, None)
- def test_patma_029(self):
- x = {}
- y = None
- match x:
- case {0: [1, 2, {}]}:
- y = 0
- case {0: [1, 2, {}], 1: [[]]}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, {})
- self.assertIs(y, None)
- def test_patma_030(self):
- x = {False: (True, 2.0, {})}
- match x:
- case {0: [1, 2, {}]}:
- y = 0
- case {0: [1, 2, {}], 1: [[]]}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, {False: (True, 2.0, {})})
- self.assertEqual(y, 0)
- def test_patma_031(self):
- x = {False: (True, 2.0, {}), 1: [[]], 2: 0}
- match x:
- case {0: [1, 2, {}]}:
- y = 0
- case {0: [1, 2, {}], 1: [[]]}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, {False: (True, 2.0, {}), 1: [[]], 2: 0})
- self.assertEqual(y, 0)
- def test_patma_032(self):
- x = {False: (True, 2.0, {}), 1: [[]], 2: 0}
- match x:
- case {0: [1, 2]}:
- y = 0
- case {0: [1, 2, {}], 1: [[]]}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, {False: (True, 2.0, {}), 1: [[]], 2: 0})
- self.assertEqual(y, 1)
- def test_patma_033(self):
- x = []
- match x:
- case {0: [1, 2, {}]}:
- y = 0
- case {0: [1, 2, {}], 1: [[]]}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, [])
- self.assertEqual(y, 2)
- def test_patma_034(self):
- x = {0: 0}
- match x:
- case {0: [1, 2, {}]}:
- y = 0
- case {0: ([1, 2, {}] | False)} | {1: [[]]} | {0: [1, 2, {}]} | [] | "X" | {}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, {0: 0})
- self.assertEqual(y, 1)
- def test_patma_035(self):
- x = {0: 0}
- match x:
- case {0: [1, 2, {}]}:
- y = 0
- case {0: [1, 2, {}] | True} | {1: [[]]} | {0: [1, 2, {}]} | [] | "X" | {}:
- y = 1
- case []:
- y = 2
- self.assertEqual(x, {0: 0})
- self.assertEqual(y, 1)
- def test_patma_036(self):
- x = 0
- match x:
- case 0 | 1 | 2:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_037(self):
- x = 1
- match x:
- case 0 | 1 | 2:
- y = 0
- self.assertEqual(x, 1)
- self.assertEqual(y, 0)
- def test_patma_038(self):
- x = 2
- match x:
- case 0 | 1 | 2:
- y = 0
- self.assertEqual(x, 2)
- self.assertEqual(y, 0)
- def test_patma_039(self):
- x = 3
- y = None
- match x:
- case 0 | 1 | 2:
- y = 0
- self.assertEqual(x, 3)
- self.assertIs(y, None)
- def test_patma_040(self):
- x = 0
- match x:
- case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_041(self):
- x = 1
- match x:
- case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
- y = 0
- self.assertEqual(x, 1)
- self.assertEqual(y, 0)
- self.assertEqual(z, 1)
- def test_patma_042(self):
- x = 2
- y = None
- match x:
- case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
- y = 0
- self.assertEqual(x, 2)
- self.assertIs(y, None)
- self.assertEqual(z, 2)
- def test_patma_043(self):
- x = 3
- y = None
- match x:
- case (0 as z) | (1 as z) | (2 as z) if z == x % 2:
- y = 0
- self.assertEqual(x, 3)
- self.assertIs(y, None)
- def test_patma_044(self):
- x = ()
- match x:
- case []:
- y = 0
- self.assertEqual(x, ())
- self.assertEqual(y, 0)
- def test_patma_045(self):
- x = ()
- match x:
- case ():
- y = 0
- self.assertEqual(x, ())
- self.assertEqual(y, 0)
- def test_patma_046(self):
- x = (0,)
- match x:
- case [0]:
- y = 0
- self.assertEqual(x, (0,))
- self.assertEqual(y, 0)
- def test_patma_047(self):
- x = ((),)
- match x:
- case [[]]:
- y = 0
- self.assertEqual(x, ((),))
- self.assertEqual(y, 0)
- def test_patma_048(self):
- x = [0, 1]
- match x:
- case [0, 1] | [1, 0]:
- y = 0
- self.assertEqual(x, [0, 1])
- self.assertEqual(y, 0)
- def test_patma_049(self):
- x = [1, 0]
- match x:
- case [0, 1] | [1, 0]:
- y = 0
- self.assertEqual(x, [1, 0])
- self.assertEqual(y, 0)
- def test_patma_050(self):
- x = [0, 0]
- y = None
- match x:
- case [0, 1] | [1, 0]:
- y = 0
- self.assertEqual(x, [0, 0])
- self.assertIs(y, None)
- def test_patma_051(self):
- w = None
- x = [1, 0]
- match x:
- case [(0 as w)]:
- y = 0
- case [z] | [1, (0 | 1 as z)] | [z]:
- y = 1
- self.assertIs(w, None)
- self.assertEqual(x, [1, 0])
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- def test_patma_052(self):
- x = [1, 0]
- match x:
- case [0]:
- y = 0
- case [1, 0] if (x := x[:0]):
- y = 1
- case [1, 0]:
- y = 2
- self.assertEqual(x, [])
- self.assertEqual(y, 2)
- def test_patma_053(self):
- x = {0}
- y = None
- match x:
- case [0]:
- y = 0
- self.assertEqual(x, {0})
- self.assertIs(y, None)
- def test_patma_054(self):
- x = set()
- y = None
- match x:
- case []:
- y = 0
- self.assertEqual(x, set())
- self.assertIs(y, None)
- def test_patma_055(self):
- x = iter([1, 2, 3])
- y = None
- match x:
- case []:
- y = 0
- self.assertEqual([*x], [1, 2, 3])
- self.assertIs(y, None)
- def test_patma_056(self):
- x = {}
- y = None
- match x:
- case []:
- y = 0
- self.assertEqual(x, {})
- self.assertIs(y, None)
- def test_patma_057(self):
- x = {0: False, 1: True}
- y = None
- match x:
- case [0, 1]:
- y = 0
- self.assertEqual(x, {0: False, 1: True})
- self.assertIs(y, None)
- def test_patma_058(self):
- x = 0
- match x:
- case 0:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_059(self):
- x = 0
- y = None
- match x:
- case False:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, None)
- def test_patma_060(self):
- x = 0
- y = None
- match x:
- case 1:
- y = 0
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_061(self):
- x = 0
- y = None
- match x:
- case None:
- y = 0
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_062(self):
- x = 0
- match x:
- case 0:
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_063(self):
- x = 0
- y = None
- match x:
- case 1:
- y = 0
- case 1:
- y = 1
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_064(self):
- x = "x"
- match x:
- case "x":
- y = 0
- case "y":
- y = 1
- self.assertEqual(x, "x")
- self.assertEqual(y, 0)
- def test_patma_065(self):
- x = "x"
- match x:
- case "y":
- y = 0
- case "x":
- y = 1
- self.assertEqual(x, "x")
- self.assertEqual(y, 1)
- def test_patma_066(self):
- x = "x"
- match x:
- case "":
- y = 0
- case "x":
- y = 1
- self.assertEqual(x, "x")
- self.assertEqual(y, 1)
- def test_patma_067(self):
- x = b"x"
- match x:
- case b"y":
- y = 0
- case b"x":
- y = 1
- self.assertEqual(x, b"x")
- self.assertEqual(y, 1)
- def test_patma_068(self):
- x = 0
- match x:
- case 0 if False:
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- def test_patma_069(self):
- x = 0
- y = None
- match x:
- case 0 if 0:
- y = 0
- case 0 if 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_070(self):
- x = 0
- match x:
- case 0 if True:
- y = 0
- case 0 if True:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_071(self):
- x = 0
- match x:
- case 0 if 1:
- y = 0
- case 0 if 1:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_072(self):
- x = 0
- match x:
- case 0 if True:
- y = 0
- case 0 if True:
- y = 1
- y = 2
- self.assertEqual(x, 0)
- self.assertEqual(y, 2)
- def test_patma_073(self):
- x = 0
- match x:
- case 0 if 0:
- y = 0
- case 0 if 1:
- y = 1
- y = 2
- self.assertEqual(x, 0)
- self.assertEqual(y, 2)
- def test_patma_074(self):
- x = 0
- y = None
- match x:
- case 0 if not (x := 1):
- y = 0
- case 1:
- y = 1
- self.assertEqual(x, 1)
- self.assertIs(y, None)
- def test_patma_075(self):
- x = "x"
- match x:
- case ["x"]:
- y = 0
- case "x":
- y = 1
- self.assertEqual(x, "x")
- self.assertEqual(y, 1)
- def test_patma_076(self):
- x = b"x"
- match x:
- case [b"x"]:
- y = 0
- case ["x"]:
- y = 1
- case [120]:
- y = 2
- case b"x":
- y = 4
- self.assertEqual(x, b"x")
- self.assertEqual(y, 4)
- def test_patma_077(self):
- x = bytearray(b"x")
- y = None
- match x:
- case [120]:
- y = 0
- case 120:
- y = 1
- self.assertEqual(x, b"x")
- self.assertIs(y, None)
- def test_patma_078(self):
- x = ""
- match x:
- case []:
- y = 0
- case [""]:
- y = 1
- case "":
- y = 2
- self.assertEqual(x, "")
- self.assertEqual(y, 2)
- def test_patma_079(self):
- x = "xxx"
- match x:
- case ["x", "x", "x"]:
- y = 0
- case ["xxx"]:
- y = 1
- case "xxx":
- y = 2
- self.assertEqual(x, "xxx")
- self.assertEqual(y, 2)
- def test_patma_080(self):
- x = b"xxx"
- match x:
- case [120, 120, 120]:
- y = 0
- case [b"xxx"]:
- y = 1
- case b"xxx":
- y = 2
- self.assertEqual(x, b"xxx")
- self.assertEqual(y, 2)
- def test_patma_081(self):
- x = 0
- match x:
- case 0 if not (x := 1):
- y = 0
- case (0 as z):
- y = 1
- self.assertEqual(x, 1)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- def test_patma_082(self):
- x = 0
- match x:
- case (1 as z) if not (x := 1):
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- def test_patma_083(self):
- x = 0
- match x:
- case (0 as z):
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_084(self):
- x = 0
- y = None
- match x:
- case (1 as z):
- y = 0
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_085(self):
- x = 0
- y = None
- match x:
- case (0 as z) if (w := 0):
- y = 0
- self.assertEqual(w, 0)
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- self.assertEqual(z, 0)
- def test_patma_086(self):
- x = 0
- match x:
- case ((0 as w) as z):
- y = 0
- self.assertEqual(w, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_087(self):
- x = 0
- match x:
- case (0 | 1) | 2:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_088(self):
- x = 1
- match x:
- case (0 | 1) | 2:
- y = 0
- self.assertEqual(x, 1)
- self.assertEqual(y, 0)
- def test_patma_089(self):
- x = 2
- match x:
- case (0 | 1) | 2:
- y = 0
- self.assertEqual(x, 2)
- self.assertEqual(y, 0)
- def test_patma_090(self):
- x = 3
- y = None
- match x:
- case (0 | 1) | 2:
- y = 0
- self.assertEqual(x, 3)
- self.assertIs(y, None)
- def test_patma_091(self):
- x = 0
- match x:
- case 0 | (1 | 2):
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_092(self):
- x = 1
- match x:
- case 0 | (1 | 2):
- y = 0
- self.assertEqual(x, 1)
- self.assertEqual(y, 0)
- def test_patma_093(self):
- x = 2
- match x:
- case 0 | (1 | 2):
- y = 0
- self.assertEqual(x, 2)
- self.assertEqual(y, 0)
- def test_patma_094(self):
- x = 3
- y = None
- match x:
- case 0 | (1 | 2):
- y = 0
- self.assertEqual(x, 3)
- self.assertIs(y, None)
- def test_patma_095(self):
- x = 0
- match x:
- case -0:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_096(self):
- x = 0
- match x:
- case -0.0:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_097(self):
- x = 0
- match x:
- case -0j:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_098(self):
- x = 0
- match x:
- case -0.0j:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_099(self):
- x = -1
- match x:
- case -1:
- y = 0
- self.assertEqual(x, -1)
- self.assertEqual(y, 0)
- def test_patma_100(self):
- x = -1.5
- match x:
- case -1.5:
- y = 0
- self.assertEqual(x, -1.5)
- self.assertEqual(y, 0)
- def test_patma_101(self):
- x = -1j
- match x:
- case -1j:
- y = 0
- self.assertEqual(x, -1j)
- self.assertEqual(y, 0)
- def test_patma_102(self):
- x = -1.5j
- match x:
- case -1.5j:
- y = 0
- self.assertEqual(x, -1.5j)
- self.assertEqual(y, 0)
- def test_patma_103(self):
- x = 0
- match x:
- case 0 + 0j:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_104(self):
- x = 0
- match x:
- case 0 - 0j:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_105(self):
- x = 0
- match x:
- case -0 + 0j:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_106(self):
- x = 0
- match x:
- case -0 - 0j:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_107(self):
- x = 0.25 + 1.75j
- match x:
- case 0.25 + 1.75j:
- y = 0
- self.assertEqual(x, 0.25 + 1.75j)
- self.assertEqual(y, 0)
- def test_patma_108(self):
- x = 0.25 - 1.75j
- match x:
- case 0.25 - 1.75j:
- y = 0
- self.assertEqual(x, 0.25 - 1.75j)
- self.assertEqual(y, 0)
- def test_patma_109(self):
- x = -0.25 + 1.75j
- match x:
- case -0.25 + 1.75j:
- y = 0
- self.assertEqual(x, -0.25 + 1.75j)
- self.assertEqual(y, 0)
- def test_patma_110(self):
- x = -0.25 - 1.75j
- match x:
- case -0.25 - 1.75j:
- y = 0
- self.assertEqual(x, -0.25 - 1.75j)
- self.assertEqual(y, 0)
- def test_patma_111(self):
- class A:
- B = 0
- x = 0
- match x:
- case A.B:
- y = 0
- self.assertEqual(A.B, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_112(self):
- class A:
- class B:
- C = 0
- x = 0
- match x:
- case A.B.C:
- y = 0
- self.assertEqual(A.B.C, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_113(self):
- class A:
- class B:
- C = 0
- D = 1
- x = 1
- match x:
- case A.B.C:
- y = 0
- case A.B.D:
- y = 1
- self.assertEqual(A.B.C, 0)
- self.assertEqual(A.B.D, 1)
- self.assertEqual(x, 1)
- self.assertEqual(y, 1)
- def test_patma_114(self):
- class A:
- class B:
- class C:
- D = 0
- x = 0
- match x:
- case A.B.C.D:
- y = 0
- self.assertEqual(A.B.C.D, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_115(self):
- class A:
- class B:
- class C:
- D = 0
- E = 1
- x = 1
- match x:
- case A.B.C.D:
- y = 0
- case A.B.C.E:
- y = 1
- self.assertEqual(A.B.C.D, 0)
- self.assertEqual(A.B.C.E, 1)
- self.assertEqual(x, 1)
- self.assertEqual(y, 1)
- def test_patma_116(self):
- match = case = 0
- match match:
- case case:
- x = 0
- self.assertEqual(match, 0)
- self.assertEqual(case, 0)
- self.assertEqual(x, 0)
- def test_patma_117(self):
- match = case = 0
- match case:
- case match:
- x = 0
- self.assertEqual(match, 0)
- self.assertEqual(case, 0)
- self.assertEqual(x, 0)
- def test_patma_118(self):
- x = []
- match x:
- case [*_, _]:
- y = 0
- case []:
- y = 1
- self.assertEqual(x, [])
- self.assertEqual(y, 1)
- def test_patma_119(self):
- x = collections.defaultdict(int)
- match x:
- case {0: 0}:
- y = 0
- case {}:
- y = 1
- self.assertEqual(x, {})
- self.assertEqual(y, 1)
- def test_patma_120(self):
- x = collections.defaultdict(int)
- match x:
- case {0: 0}:
- y = 0
- case {**z}:
- y = 1
- self.assertEqual(x, {})
- self.assertEqual(y, 1)
- self.assertEqual(z, {})
- def test_patma_121(self):
- match ():
- case ():
- x = 0
- self.assertEqual(x, 0)
- def test_patma_122(self):
- match (0, 1, 2):
- case (*x,):
- y = 0
- self.assertEqual(x, [0, 1, 2])
- self.assertEqual(y, 0)
- def test_patma_123(self):
- match (0, 1, 2):
- case 0, *x:
- y = 0
- self.assertEqual(x, [1, 2])
- self.assertEqual(y, 0)
- def test_patma_124(self):
- match (0, 1, 2):
- case (0, 1, *x,):
- y = 0
- self.assertEqual(x, [2])
- self.assertEqual(y, 0)
- def test_patma_125(self):
- match (0, 1, 2):
- case 0, 1, 2, *x:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_126(self):
- match (0, 1, 2):
- case *x, 2,:
- y = 0
- self.assertEqual(x, [0, 1])
- self.assertEqual(y, 0)
- def test_patma_127(self):
- match (0, 1, 2):
- case (*x, 1, 2):
- y = 0
- self.assertEqual(x, [0])
- self.assertEqual(y, 0)
- def test_patma_128(self):
- match (0, 1, 2):
- case *x, 0, 1, 2,:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_129(self):
- match (0, 1, 2):
- case (0, *x, 2):
- y = 0
- self.assertEqual(x, [1])
- self.assertEqual(y, 0)
- def test_patma_130(self):
- match (0, 1, 2):
- case 0, 1, *x, 2,:
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_131(self):
- match (0, 1, 2):
- case (0, *x, 1, 2):
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- def test_patma_132(self):
- match (0, 1, 2):
- case *x,:
- y = 0
- self.assertEqual(x, [0, 1, 2])
- self.assertEqual(y, 0)
- def test_patma_133(self):
- x = collections.defaultdict(int, {0: 1})
- match x:
- case {1: 0}:
- y = 0
- case {0: 0}:
- y = 1
- case {}:
- y = 2
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 2)
- def test_patma_134(self):
- x = collections.defaultdict(int, {0: 1})
- match x:
- case {1: 0}:
- y = 0
- case {0: 0}:
- y = 1
- case {**z}:
- y = 2
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 2)
- self.assertEqual(z, {0: 1})
- def test_patma_135(self):
- x = collections.defaultdict(int, {0: 1})
- match x:
- case {1: 0}:
- y = 0
- case {0: 0}:
- y = 1
- case {0: _, **z}:
- y = 2
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 2)
- self.assertEqual(z, {})
- def test_patma_136(self):
- x = {0: 1}
- match x:
- case {1: 0}:
- y = 0
- case {0: 0}:
- y = 0
- case {}:
- y = 1
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 1)
- def test_patma_137(self):
- x = {0: 1}
- match x:
- case {1: 0}:
- y = 0
- case {0: 0}:
- y = 0
- case {**z}:
- y = 1
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 1)
- self.assertEqual(z, {0: 1})
- def test_patma_138(self):
- x = {0: 1}
- match x:
- case {1: 0}:
- y = 0
- case {0: 0}:
- y = 0
- case {0: _, **z}:
- y = 1
- self.assertEqual(x, {0: 1})
- self.assertEqual(y, 1)
- self.assertEqual(z, {})
- def test_patma_139(self):
- x = False
- match x:
- case bool(z):
- y = 0
- self.assertIs(x, False)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_140(self):
- x = True
- match x:
- case bool(z):
- y = 0
- self.assertIs(x, True)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_141(self):
- x = bytearray()
- match x:
- case bytearray(z):
- y = 0
- self.assertEqual(x, bytearray())
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_142(self):
- x = b""
- match x:
- case bytes(z):
- y = 0
- self.assertEqual(x, b"")
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_143(self):
- x = {}
- match x:
- case dict(z):
- y = 0
- self.assertEqual(x, {})
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_144(self):
- x = 0.0
- match x:
- case float(z):
- y = 0
- self.assertEqual(x, 0.0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_145(self):
- x = frozenset()
- match x:
- case frozenset(z):
- y = 0
- self.assertEqual(x, frozenset())
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_146(self):
- x = 0
- match x:
- case int(z):
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_147(self):
- x = []
- match x:
- case list(z):
- y = 0
- self.assertEqual(x, [])
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_148(self):
- x = set()
- match x:
- case set(z):
- y = 0
- self.assertEqual(x, set())
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_149(self):
- x = ""
- match x:
- case str(z):
- y = 0
- self.assertEqual(x, "")
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_150(self):
- x = ()
- match x:
- case tuple(z):
- y = 0
- self.assertEqual(x, ())
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_151(self):
- x = 0
- match x,:
- case y,:
- z = 0
- self.assertEqual(x, 0)
- self.assertIs(y, x)
- self.assertIs(z, 0)
- def test_patma_152(self):
- w = 0
- x = 0
- match w, x:
- case y, z:
- v = 0
- self.assertEqual(w, 0)
- self.assertEqual(x, 0)
- self.assertIs(y, w)
- self.assertIs(z, x)
- self.assertEqual(v, 0)
- def test_patma_153(self):
- x = 0
- match w := x,:
- case y as v,:
- z = 0
- self.assertEqual(x, 0)
- self.assertIs(y, x)
- self.assertEqual(z, 0)
- self.assertIs(w, x)
- self.assertIs(v, y)
- def test_patma_154(self):
- x = 0
- y = None
- match x:
- case 0 if x:
- y = 0
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_155(self):
- x = 0
- y = None
- match x:
- case 1e1000:
- y = 0
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_156(self):
- x = 0
- match x:
- case z:
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_157(self):
- x = 0
- y = None
- match x:
- case _ if x:
- y = 0
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_158(self):
- x = 0
- match x:
- case -1e1000:
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- def test_patma_159(self):
- x = 0
- match x:
- case 0 if not x:
- y = 0
- case 1:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_160(self):
- x = 0
- z = None
- match x:
- case 0:
- y = 0
- case z if x:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, None)
- def test_patma_161(self):
- x = 0
- match x:
- case 0:
- y = 0
- case _:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_162(self):
- x = 0
- match x:
- case 1 if x:
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- def test_patma_163(self):
- x = 0
- y = None
- match x:
- case 1:
- y = 0
- case 1 if not x:
- y = 1
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_164(self):
- x = 0
- match x:
- case 1:
- y = 0
- case z:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertIs(z, x)
- def test_patma_165(self):
- x = 0
- match x:
- case 1 if x:
- y = 0
- case _:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- def test_patma_166(self):
- x = 0
- match x:
- case z if not z:
- y = 0
- case 0 if x:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_167(self):
- x = 0
- match x:
- case z if not z:
- y = 0
- case 1:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_168(self):
- x = 0
- match x:
- case z if not x:
- y = 0
- case z:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_169(self):
- x = 0
- match x:
- case z if not z:
- y = 0
- case _ if x:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, x)
- def test_patma_170(self):
- x = 0
- match x:
- case _ if not x:
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_171(self):
- x = 0
- y = None
- match x:
- case _ if x:
- y = 0
- case 1:
- y = 1
- self.assertEqual(x, 0)
- self.assertIs(y, None)
- def test_patma_172(self):
- x = 0
- z = None
- match x:
- case _ if not x:
- y = 0
- case z if not x:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertIs(z, None)
- def test_patma_173(self):
- x = 0
- match x:
- case _ if not x:
- y = 0
- case _:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_174(self):
- def http_error(status):
- match status:
- case 400:
- return "Bad request"
- case 401:
- return "Unauthorized"
- case 403:
- return "Forbidden"
- case 404:
- return "Not found"
- case 418:
- return "I'm a teapot"
- case _:
- return "Something else"
- self.assertEqual(http_error(400), "Bad request")
- self.assertEqual(http_error(401), "Unauthorized")
- self.assertEqual(http_error(403), "Forbidden")
- self.assertEqual(http_error(404), "Not found")
- self.assertEqual(http_error(418), "I'm a teapot")
- self.assertEqual(http_error(123), "Something else")
- self.assertEqual(http_error("400"), "Something else")
- self.assertEqual(http_error(401 | 403 | 404), "Something else") # 407
- def test_patma_175(self):
- def http_error(status):
- match status:
- case 400:
- return "Bad request"
- case 401 | 403 | 404:
- return "Not allowed"
- case 418:
- return "I'm a teapot"
- self.assertEqual(http_error(400), "Bad request")
- self.assertEqual(http_error(401), "Not allowed")
- self.assertEqual(http_error(403), "Not allowed")
- self.assertEqual(http_error(404), "Not allowed")
- self.assertEqual(http_error(418), "I'm a teapot")
- self.assertIs(http_error(123), None)
- self.assertIs(http_error("400"), None)
- self.assertIs(http_error(401 | 403 | 404), None) # 407
- def test_patma_176(self):
- def whereis(point):
- match point:
- case (0, 0):
- return "Origin"
- case (0, y):
- return f"Y={y}"
- case (x, 0):
- return f"X={x}"
- case (x, y):
- return f"X={x}, Y={y}"
- case _:
- return "Not a point"
- self.assertEqual(whereis((0, 0)), "Origin")
- self.assertEqual(whereis((0, -1.0)), "Y=-1.0")
- self.assertEqual(whereis(("X", 0)), "X=X")
- self.assertEqual(whereis((None, 1j)), "X=None, Y=1j")
- self.assertEqual(whereis(42), "Not a point")
- def test_patma_177(self):
- def whereis(point):
- match point:
- case Point(0, 0):
- return "Origin"
- case Point(0, y):
- return f"Y={y}"
- case Point(x, 0):
- return f"X={x}"
- case Point():
- return "Somewhere else"
- case _:
- return "Not a point"
- self.assertEqual(whereis(Point(1, 0)), "X=1")
- self.assertEqual(whereis(Point(0, 0)), "Origin")
- self.assertEqual(whereis(10), "Not a point")
- self.assertEqual(whereis(Point(False, False)), "Origin")
- self.assertEqual(whereis(Point(0, -1.0)), "Y=-1.0")
- self.assertEqual(whereis(Point("X", 0)), "X=X")
- self.assertEqual(whereis(Point(None, 1j)), "Somewhere else")
- self.assertEqual(whereis(Point), "Not a point")
- self.assertEqual(whereis(42), "Not a point")
- def test_patma_178(self):
- def whereis(point):
- match point:
- case Point(1, var):
- return var
- self.assertEqual(whereis(Point(1, 0)), 0)
- self.assertIs(whereis(Point(0, 0)), None)
- def test_patma_179(self):
- def whereis(point):
- match point:
- case Point(1, y=var):
- return var
- self.assertEqual(whereis(Point(1, 0)), 0)
- self.assertIs(whereis(Point(0, 0)), None)
- def test_patma_180(self):
- def whereis(point):
- match point:
- case Point(x=1, y=var):
- return var
- self.assertEqual(whereis(Point(1, 0)), 0)
- self.assertIs(whereis(Point(0, 0)), None)
- def test_patma_181(self):
- def whereis(point):
- match point:
- case Point(y=var, x=1):
- return var
- self.assertEqual(whereis(Point(1, 0)), 0)
- self.assertIs(whereis(Point(0, 0)), None)
- def test_patma_182(self):
- def whereis(points):
- match points:
- case []:
- return "No points"
- case [Point(0, 0)]:
- return "The origin"
- case [Point(x, y)]:
- return f"Single point {x}, {y}"
- case [Point(0, y1), Point(0, y2)]:
- return f"Two on the Y axis at {y1}, {y2}"
- case _:
- return "Something else"
- self.assertEqual(whereis([]), "No points")
- self.assertEqual(whereis([Point(0, 0)]), "The origin")
- self.assertEqual(whereis([Point(0, 1)]), "Single point 0, 1")
- self.assertEqual(whereis([Point(0, 0), Point(0, 0)]), "Two on the Y axis at 0, 0")
- self.assertEqual(whereis([Point(0, 1), Point(0, 1)]), "Two on the Y axis at 1, 1")
- self.assertEqual(whereis([Point(0, 0), Point(1, 0)]), "Something else")
- self.assertEqual(whereis([Point(0, 0), Point(0, 0), Point(0, 0)]), "Something else")
- self.assertEqual(whereis([Point(0, 1), Point(0, 1), Point(0, 1)]), "Something else")
- def test_patma_183(self):
- def whereis(point):
- match point:
- case Point(x, y) if x == y:
- return f"Y=X at {x}"
- case Point(x, y):
- return "Not on the diagonal"
- self.assertEqual(whereis(Point(0, 0)), "Y=X at 0")
- self.assertEqual(whereis(Point(0, False)), "Y=X at 0")
- self.assertEqual(whereis(Point(False, 0)), "Y=X at False")
- self.assertEqual(whereis(Point(-1 - 1j, -1 - 1j)), "Y=X at (-1-1j)")
- self.assertEqual(whereis(Point("X", "X")), "Y=X at X")
- self.assertEqual(whereis(Point("X", "x")), "Not on the diagonal")
- def test_patma_184(self):
- class Seq(collections.abc.Sequence):
- __getitem__ = None
- def __len__(self):
- return 0
- match Seq():
- case []:
- y = 0
- self.assertEqual(y, 0)
- def test_patma_185(self):
- class Seq(collections.abc.Sequence):
- __getitem__ = None
- def __len__(self):
- return 42
- match Seq():
- case [*_]:
- y = 0
- self.assertEqual(y, 0)
- def test_patma_186(self):
- class Seq(collections.abc.Sequence):
- def __getitem__(self, i):
- return i
- def __len__(self):
- return 42
- match Seq():
- case [x, *_, y]:
- z = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 41)
- self.assertEqual(z, 0)
- def test_patma_187(self):
- w = range(10)
- match w:
- case [x, y, *rest]:
- z = 0
- self.assertEqual(w, range(10))
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- self.assertEqual(rest, list(range(2, 10)))
- def test_patma_188(self):
- w = range(100)
- match w:
- case (x, y, *rest):
- z = 0
- self.assertEqual(w, range(100))
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- self.assertEqual(rest, list(range(2, 100)))
- def test_patma_189(self):
- w = range(1000)
- match w:
- case x, y, *rest:
- z = 0
- self.assertEqual(w, range(1000))
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- self.assertEqual(rest, list(range(2, 1000)))
- def test_patma_190(self):
- w = range(1 << 10)
- match w:
- case [x, y, *_]:
- z = 0
- self.assertEqual(w, range(1 << 10))
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- def test_patma_191(self):
- w = range(1 << 20)
- match w:
- case (x, y, *_):
- z = 0
- self.assertEqual(w, range(1 << 20))
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- def test_patma_192(self):
- w = range(1 << 30)
- match w:
- case x, y, *_:
- z = 0
- self.assertEqual(w, range(1 << 30))
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- def test_patma_193(self):
- x = {"bandwidth": 0, "latency": 1}
- match x:
- case {"bandwidth": b, "latency": l}:
- y = 0
- self.assertEqual(x, {"bandwidth": 0, "latency": 1})
- self.assertIs(b, x["bandwidth"])
- self.assertIs(l, x["latency"])
- self.assertEqual(y, 0)
- def test_patma_194(self):
- x = {"bandwidth": 0, "latency": 1, "key": "value"}
- match x:
- case {"latency": l, "bandwidth": b}:
- y = 0
- self.assertEqual(x, {"bandwidth": 0, "latency": 1, "key": "value"})
- self.assertIs(l, x["latency"])
- self.assertIs(b, x["bandwidth"])
- self.assertEqual(y, 0)
- def test_patma_195(self):
- x = {"bandwidth": 0, "latency": 1, "key": "value"}
- match x:
- case {"bandwidth": b, "latency": l, **rest}:
- y = 0
- self.assertEqual(x, {"bandwidth": 0, "latency": 1, "key": "value"})
- self.assertIs(b, x["bandwidth"])
- self.assertIs(l, x["latency"])
- self.assertEqual(rest, {"key": "value"})
- self.assertEqual(y, 0)
- def test_patma_196(self):
- x = {"bandwidth": 0, "latency": 1}
- match x:
- case {"latency": l, "bandwidth": b, **rest}:
- y = 0
- self.assertEqual(x, {"bandwidth": 0, "latency": 1})
- self.assertIs(l, x["latency"])
- self.assertIs(b, x["bandwidth"])
- self.assertEqual(rest, {})
- self.assertEqual(y, 0)
- def test_patma_197(self):
- w = [Point(-1, 0), Point(1, 2)]
- match w:
- case (Point(x1, y1), Point(x2, y2) as p2):
- z = 0
- self.assertEqual(w, [Point(-1, 0), Point(1, 2)])
- self.assertIs(x1, w[0].x)
- self.assertIs(y1, w[0].y)
- self.assertIs(p2, w[1])
- self.assertIs(x2, w[1].x)
- self.assertIs(y2, w[1].y)
- self.assertIs(z, 0)
- def test_patma_198(self):
- class Color(enum.Enum):
- RED = 0
- GREEN = 1
- BLUE = 2
- def f(color):
- match color:
- case Color.RED:
- return "I see red!"
- case Color.GREEN:
- return "Grass is green"
- case Color.BLUE:
- return "I'm feeling the blues :("
- self.assertEqual(f(Color.RED), "I see red!")
- self.assertEqual(f(Color.GREEN), "Grass is green")
- self.assertEqual(f(Color.BLUE), "I'm feeling the blues :(")
- self.assertIs(f(Color), None)
- self.assertIs(f(0), None)
- self.assertIs(f(1), None)
- self.assertIs(f(2), None)
- self.assertIs(f(3), None)
- self.assertIs(f(False), None)
- self.assertIs(f(True), None)
- self.assertIs(f(2+0j), None)
- self.assertIs(f(3.0), None)
- def test_patma_199(self):
- class Color(int, enum.Enum):
- RED = 0
- GREEN = 1
- BLUE = 2
- def f(color):
- match color:
- case Color.RED:
- return "I see red!"
- case Color.GREEN:
- return "Grass is green"
- case Color.BLUE:
- return "I'm feeling the blues :("
- self.assertEqual(f(Color.RED), "I see red!")
- self.assertEqual(f(Color.GREEN), "Grass is green")
- self.assertEqual(f(Color.BLUE), "I'm feeling the blues :(")
- self.assertIs(f(Color), None)
- self.assertEqual(f(0), "I see red!")
- self.assertEqual(f(1), "Grass is green")
- self.assertEqual(f(2), "I'm feeling the blues :(")
- self.assertIs(f(3), None)
- self.assertEqual(f(False), "I see red!")
- self.assertEqual(f(True), "Grass is green")
- self.assertEqual(f(2+0j), "I'm feeling the blues :(")
- self.assertIs(f(3.0), None)
- def test_patma_200(self):
- class Class:
- __match_args__ = ("a", "b")
- c = Class()
- c.a = 0
- c.b = 1
- match c:
- case Class(x, y):
- z = 0
- self.assertIs(x, c.a)
- self.assertIs(y, c.b)
- self.assertEqual(z, 0)
- def test_patma_201(self):
- class Class:
- __match_args__ = ("a", "b")
- c = Class()
- c.a = 0
- c.b = 1
- match c:
- case Class(x, b=y):
- z = 0
- self.assertIs(x, c.a)
- self.assertIs(y, c.b)
- self.assertEqual(z, 0)
- def test_patma_202(self):
- class Parent:
- __match_args__ = "a", "b"
- class Child(Parent):
- __match_args__ = ("c", "d")
- c = Child()
- c.a = 0
- c.b = 1
- match c:
- case Parent(x, y):
- z = 0
- self.assertIs(x, c.a)
- self.assertIs(y, c.b)
- self.assertEqual(z, 0)
- def test_patma_203(self):
- class Parent:
- __match_args__ = ("a", "b")
- class Child(Parent):
- __match_args__ = "c", "d"
- c = Child()
- c.a = 0
- c.b = 1
- match c:
- case Parent(x, b=y):
- z = 0
- self.assertIs(x, c.a)
- self.assertIs(y, c.b)
- self.assertEqual(z, 0)
- def test_patma_204(self):
- def f(w):
- match w:
- case 42:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f(42), {})
- self.assertIs(f(0), None)
- self.assertEqual(f(42.0), {})
- self.assertIs(f("42"), None)
- def test_patma_205(self):
- def f(w):
- match w:
- case 42.0:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f(42.0), {})
- self.assertEqual(f(42), {})
- self.assertIs(f(0.0), None)
- self.assertIs(f(0), None)
- def test_patma_206(self):
- def f(w):
- match w:
- case 1 | 2 | 3:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f(1), {})
- self.assertEqual(f(2), {})
- self.assertEqual(f(3), {})
- self.assertEqual(f(3.0), {})
- self.assertIs(f(0), None)
- self.assertIs(f(4), None)
- self.assertIs(f("1"), None)
- def test_patma_207(self):
- def f(w):
- match w:
- case [1, 2] | [3, 4]:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f([1, 2]), {})
- self.assertEqual(f([3, 4]), {})
- self.assertIs(f(42), None)
- self.assertIs(f([2, 3]), None)
- self.assertIs(f([1, 2, 3]), None)
- self.assertEqual(f([1, 2.0]), {})
- def test_patma_208(self):
- def f(w):
- match w:
- case x:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f(42), {"x": 42})
- self.assertEqual(f((1, 2)), {"x": (1, 2)})
- self.assertEqual(f(None), {"x": None})
- def test_patma_209(self):
- def f(w):
- match w:
- case _:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f(42), {})
- self.assertEqual(f(None), {})
- self.assertEqual(f((1, 2)), {})
- def test_patma_210(self):
- def f(w):
- match w:
- case (x, y, z):
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f((1, 2, 3)), {"x": 1, "y": 2, "z": 3})
- self.assertIs(f((1, 2)), None)
- self.assertIs(f((1, 2, 3, 4)), None)
- self.assertIs(f(123), None)
- self.assertIs(f("abc"), None)
- self.assertIs(f(b"abc"), None)
- self.assertEqual(f(array.array("b", b"abc")), {'x': 97, 'y': 98, 'z': 99})
- self.assertEqual(f(memoryview(b"abc")), {"x": 97, "y": 98, "z": 99})
- self.assertIs(f(bytearray(b"abc")), None)
- def test_patma_211(self):
- def f(w):
- match w:
- case {"x": x, "y": "y", "z": z}:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f({"x": "x", "y": "y", "z": "z"}), {"x": "x", "z": "z"})
- self.assertEqual(f({"x": "x", "y": "y", "z": "z", "a": "a"}), {"x": "x", "z": "z"})
- self.assertIs(f(({"x": "x", "y": "yy", "z": "z", "a": "a"})), None)
- self.assertIs(f(({"x": "x", "y": "y"})), None)
- def test_patma_212(self):
- def f(w):
- match w:
- case Point(int(xx), y="hello"):
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f(Point(42, "hello")), {"xx": 42})
- def test_patma_213(self):
- def f(w):
- match w:
- case (p, q) as x:
- out = locals()
- del out["w"]
- return out
- self.assertEqual(f((1, 2)), {"p": 1, "q": 2, "x": (1, 2)})
- self.assertEqual(f([1, 2]), {"p": 1, "q": 2, "x": [1, 2]})
- self.assertIs(f(12), None)
- self.assertIs(f((1, 2, 3)), None)
- def test_patma_214(self):
- def f():
- match 42:
- case 42:
- return locals()
- self.assertEqual(set(f()), set())
- def test_patma_215(self):
- def f():
- match 1:
- case 1 | 2 | 3:
- return locals()
- self.assertEqual(set(f()), set())
- def test_patma_216(self):
- def f():
- match ...:
- case _:
- return locals()
- self.assertEqual(set(f()), set())
- def test_patma_217(self):
- def f():
- match ...:
- case abc:
- return locals()
- self.assertEqual(set(f()), {"abc"})
- def test_patma_218(self):
- def f():
- match ..., ...:
- case a, b:
- return locals()
- self.assertEqual(set(f()), {"a", "b"})
- def test_patma_219(self):
- def f():
- match {"k": ..., "l": ...}:
- case {"k": a, "l": b}:
- return locals()
- self.assertEqual(set(f()), {"a", "b"})
- def test_patma_220(self):
- def f():
- match Point(..., ...):
- case Point(x, y=y):
- return locals()
- self.assertEqual(set(f()), {"x", "y"})
- def test_patma_221(self):
- def f():
- match ...:
- case b as a:
- return locals()
- self.assertEqual(set(f()), {"a", "b"})
- def test_patma_222(self):
- def f(x):
- match x:
- case _:
- return 0
- self.assertEqual(f(0), 0)
- self.assertEqual(f(1), 0)
- self.assertEqual(f(2), 0)
- self.assertEqual(f(3), 0)
- def test_patma_223(self):
- def f(x):
- match x:
- case 0:
- return 0
- self.assertEqual(f(0), 0)
- self.assertIs(f(1), None)
- self.assertIs(f(2), None)
- self.assertIs(f(3), None)
- def test_patma_224(self):
- def f(x):
- match x:
- case 0:
- return 0
- case _:
- return 1
- self.assertEqual(f(0), 0)
- self.assertEqual(f(1), 1)
- self.assertEqual(f(2), 1)
- self.assertEqual(f(3), 1)
- def test_patma_225(self):
- def f(x):
- match x:
- case 0:
- return 0
- case 1:
- return 1
- self.assertEqual(f(0), 0)
- self.assertEqual(f(1), 1)
- self.assertIs(f(2), None)
- self.assertIs(f(3), None)
- def test_patma_226(self):
- def f(x):
- match x:
- case 0:
- return 0
- case 1:
- return 1
- case _:
- return 2
- self.assertEqual(f(0), 0)
- self.assertEqual(f(1), 1)
- self.assertEqual(f(2), 2)
- self.assertEqual(f(3), 2)
- def test_patma_227(self):
- def f(x):
- match x:
- case 0:
- return 0
- case 1:
- return 1
- case 2:
- return 2
- self.assertEqual(f(0), 0)
- self.assertEqual(f(1), 1)
- self.assertEqual(f(2), 2)
- self.assertIs(f(3), None)
- def test_patma_228(self):
- match():
- case():
- x = 0
- self.assertEqual(x, 0)
- def test_patma_229(self):
- x = 0
- match(x):
- case(x):
- y = 0
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- def test_patma_230(self):
- x = 0
- match x:
- case False:
- y = 0
- case 0:
- y = 1
- self.assertEqual(x, 0)
- self.assertEqual(y, 1)
- def test_patma_231(self):
- x = 1
- match x:
- case True:
- y = 0
- case 1:
- y = 1
- self.assertEqual(x, 1)
- self.assertEqual(y, 1)
- def test_patma_232(self):
- class Eq:
- def __eq__(self, other):
- return True
- x = eq = Eq()
- y = None
- match x:
- case None:
- y = 0
- self.assertIs(x, eq)
- self.assertEqual(y, None)
- def test_patma_233(self):
- x = False
- match x:
- case False:
- y = 0
- self.assertIs(x, False)
- self.assertEqual(y, 0)
- def test_patma_234(self):
- x = True
- match x:
- case True:
- y = 0
- self.assertIs(x, True)
- self.assertEqual(y, 0)
- def test_patma_235(self):
- x = None
- match x:
- case None:
- y = 0
- self.assertIs(x, None)
- self.assertEqual(y, 0)
- def test_patma_236(self):
- x = 0
- match x:
- case (0 as w) as z:
- y = 0
- self.assertEqual(w, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_237(self):
- x = 0
- match x:
- case (0 as w) as z:
- y = 0
- self.assertEqual(w, 0)
- self.assertEqual(x, 0)
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_238(self):
- x = ((0, 1), (2, 3))
- match x:
- case ((a as b, c as d) as e) as w, ((f as g, h) as i) as z:
- y = 0
- self.assertEqual(a, 0)
- self.assertEqual(b, 0)
- self.assertEqual(c, 1)
- self.assertEqual(d, 1)
- self.assertEqual(e, (0, 1))
- self.assertEqual(f, 2)
- self.assertEqual(g, 2)
- self.assertEqual(h, 3)
- self.assertEqual(i, (2, 3))
- self.assertEqual(w, (0, 1))
- self.assertEqual(x, ((0, 1), (2, 3)))
- self.assertEqual(y, 0)
- self.assertEqual(z, (2, 3))
- def test_patma_239(self):
- x = collections.UserDict({0: 1, 2: 3})
- match x:
- case {2: 3}:
- y = 0
- self.assertEqual(x, {0: 1, 2: 3})
- self.assertEqual(y, 0)
- def test_patma_240(self):
- x = collections.UserDict({0: 1, 2: 3})
- match x:
- case {2: 3, **z}:
- y = 0
- self.assertEqual(x, {0: 1, 2: 3})
- self.assertEqual(y, 0)
- self.assertEqual(z, {0: 1})
- def test_patma_241(self):
- x = [[{0: 0}]]
- match x:
- case list([({-0-0j: int(real=0+0j, imag=0-0j) | (1) as z},)]):
- y = 0
- self.assertEqual(x, [[{0: 0}]])
- self.assertEqual(y, 0)
- self.assertEqual(z, 0)
- def test_patma_242(self):
- x = range(3)
- match x:
- case [y, *_, z]:
- w = 0
- self.assertEqual(w, 0)
- self.assertEqual(x, range(3))
- self.assertEqual(y, 0)
- self.assertEqual(z, 2)
- def test_patma_243(self):
- x = range(3)
- match x:
- case [_, *_, y]:
- z = 0
- self.assertEqual(x, range(3))
- self.assertEqual(y, 2)
- self.assertEqual(z, 0)
- def test_patma_244(self):
- x = range(3)
- match x:
- case [*_, y]:
- z = 0
- self.assertEqual(x, range(3))
- self.assertEqual(y, 2)
- self.assertEqual(z, 0)
- def test_patma_245(self):
- x = {"y": 1}
- match x:
- case {"y": (0 as y) | (1 as y)}:
- z = 0
- self.assertEqual(x, {"y": 1})
- self.assertEqual(y, 1)
- self.assertEqual(z, 0)
- def test_patma_246(self):
- def f(x):
- match x:
- case ((a, b, c, d, e, f, g, h, i, 9) |
- (h, g, i, a, b, d, e, c, f, 10) |
- (g, b, a, c, d, -5, e, h, i, f) |
- (-1, d, f, b, g, e, i, a, h, c)):
- w = 0
- out = locals()
- del out["x"]
- return out
- alts = [
- dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0),
- dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0),
- dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0),
- dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0),
- dict(),
- ]
- self.assertEqual(f(range(10)), alts[0])
- self.assertEqual(f(range(1, 11)), alts[1])
- self.assertEqual(f(range(0, -10, -1)), alts[2])
- self.assertEqual(f(range(-1, -11, -1)), alts[3])
- self.assertEqual(f(range(10, 20)), alts[4])
- def test_patma_247(self):
- def f(x):
- match x:
- case [y, (a, b, c, d, e, f, g, h, i, 9) |
- (h, g, i, a, b, d, e, c, f, 10) |
- (g, b, a, c, d, -5, e, h, i, f) |
- (-1, d, f, b, g, e, i, a, h, c), z]:
- w = 0
- out = locals()
- del out["x"]
- return out
- alts = [
- 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),
- 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),
- 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),
- 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),
- dict(),
- ]
- self.assertEqual(f((False, range(10), True)), alts[0])
- self.assertEqual(f((False, range(1, 11), True)), alts[1])
- self.assertEqual(f((False, range(0, -10, -1), True)), alts[2])
- self.assertEqual(f((False, range(-1, -11, -1), True)), alts[3])
- self.assertEqual(f((False, range(10, 20), True)), alts[4])
- def test_patma_248(self):
- class C(dict):
- @staticmethod
- def get(key, default=None):
- return 'bar'
- x = C({'foo': 'bar'})
- match x:
- case {'foo': bar}:
- y = bar
- self.assertEqual(y, 'bar')
- class TestSyntaxErrors(unittest.TestCase):
- def assert_syntax_error(self, code: str):
- with self.assertRaises(SyntaxError):
- compile(inspect.cleandoc(code), "<test>", "exec")
- def test_alternative_patterns_bind_different_names_0(self):
- self.assert_syntax_error("""
- match ...:
- case "a" | a:
- pass
- """)
- def test_alternative_patterns_bind_different_names_1(self):
- self.assert_syntax_error("""
- match ...:
- case [a, [b] | [c] | [d]]:
- pass
- """)
- def test_attribute_name_repeated_in_class_pattern(self):
- self.assert_syntax_error("""
- match ...:
- case Class(a=_, a=_):
- pass
- """)
- def test_imaginary_number_required_in_complex_literal_0(self):
- self.assert_syntax_error("""
- match ...:
- case 0+0:
- pass
- """)
- def test_imaginary_number_required_in_complex_literal_1(self):
- self.assert_syntax_error("""
- match ...:
- case {0+0: _}:
- pass
- """)
- def test_invalid_syntax_0(self):
- self.assert_syntax_error("""
- match ...:
- case {**rest, "key": value}:
- pass
- """)
- def test_invalid_syntax_1(self):
- self.assert_syntax_error("""
- match ...:
- case {"first": first, **rest, "last": last}:
- pass
- """)
- def test_invalid_syntax_2(self):
- self.assert_syntax_error("""
- match ...:
- case {**_}:
- pass
- """)
- def test_invalid_syntax_3(self):
- self.assert_syntax_error("""
- match ...:
- case 42 as _:
- pass
- """)
- def test_mapping_pattern_keys_may_only_match_literals_and_attribute_lookups(self):
- self.assert_syntax_error("""
- match ...:
- case {f"": _}:
- pass
- """)
- def test_multiple_assignments_to_name_in_pattern_0(self):
- self.assert_syntax_error("""
- match ...:
- case a, a:
- pass
- """)
- def test_multiple_assignments_to_name_in_pattern_1(self):
- self.assert_syntax_error("""
- match ...:
- case {"k": a, "l": a}:
- pass
- """)
- def test_multiple_assignments_to_name_in_pattern_2(self):
- self.assert_syntax_error("""
- match ...:
- case MyClass(x, x):
- pass
- """)
- def test_multiple_assignments_to_name_in_pattern_3(self):
- self.assert_syntax_error("""
- match ...:
- case MyClass(x=x, y=x):
- pass
- """)
- def test_multiple_assignments_to_name_in_pattern_4(self):
- self.assert_syntax_error("""
- match ...:
- case MyClass(x, y=x):
- pass
- """)
- def test_multiple_assignments_to_name_in_pattern_5(self):
- self.assert_syntax_error("""
- match ...:
- case a as a:
- pass
- """)
- def test_multiple_starred_names_in_sequence_pattern_0(self):
- self.assert_syntax_error("""
- match ...:
- case *a, b, *c, d, *e:
- pass
- """)
- def test_multiple_starred_names_in_sequence_pattern_1(self):
- self.assert_syntax_error("""
- match ...:
- case a, *b, c, *d, e:
- pass
- """)
- def test_name_capture_makes_remaining_patterns_unreachable_0(self):
- self.assert_syntax_error("""
- match ...:
- case a | "a":
- pass
- """)
- def test_name_capture_makes_remaining_patterns_unreachable_1(self):
- self.assert_syntax_error("""
- match 42:
- case x:
- pass
- case y:
- pass
- """)
- def test_name_capture_makes_remaining_patterns_unreachable_2(self):
- self.assert_syntax_error("""
- match ...:
- case x | [_ as x] if x:
- pass
- """)
- def test_name_capture_makes_remaining_patterns_unreachable_3(self):
- self.assert_syntax_error("""
- match ...:
- case x:
- pass
- case [x] if x:
- pass
- """)
- def test_name_capture_makes_remaining_patterns_unreachable_4(self):
- self.assert_syntax_error("""
- match ...:
- case x:
- pass
- case _:
- pass
- """)
- def test_patterns_may_only_match_literals_and_attribute_lookups_0(self):
- self.assert_syntax_error("""
- match ...:
- case f"":
- pass
- """)
- def test_patterns_may_only_match_literals_and_attribute_lookups_1(self):
- self.assert_syntax_error("""
- match ...:
- case f"{x}":
- pass
- """)
- def test_real_number_required_in_complex_literal_0(self):
- self.assert_syntax_error("""
- match ...:
- case 0j+0:
- pass
- """)
- def test_real_number_required_in_complex_literal_1(self):
- self.assert_syntax_error("""
- match ...:
- case 0j+0j:
- pass
- """)
- def test_real_number_required_in_complex_literal_2(self):
- self.assert_syntax_error("""
- match ...:
- case {0j+0: _}:
- pass
- """)
- def test_real_number_required_in_complex_literal_3(self):
- self.assert_syntax_error("""
- match ...:
- case {0j+0j: _}:
- pass
- """)
- def test_wildcard_makes_remaining_patterns_unreachable_0(self):
- self.assert_syntax_error("""
- match ...:
- case _ | _:
- pass
- """)
- def test_wildcard_makes_remaining_patterns_unreachable_1(self):
- self.assert_syntax_error("""
- match ...:
- case (_ as x) | [x]:
- pass
- """)
- def test_wildcard_makes_remaining_patterns_unreachable_2(self):
- self.assert_syntax_error("""
- match ...:
- case _ | _ if condition():
- pass
- """)
- def test_wildcard_makes_remaining_patterns_unreachable_3(self):
- self.assert_syntax_error("""
- match ...:
- case _:
- pass
- case None:
- pass
- """)
- def test_wildcard_makes_remaining_patterns_unreachable_4(self):
- self.assert_syntax_error("""
- match ...:
- case (None | _) | _:
- pass
- """)
- def test_wildcard_makes_remaining_patterns_unreachable_5(self):
- self.assert_syntax_error("""
- match ...:
- case _ | (True | False):
- pass
- """)
- def test_mapping_pattern_duplicate_key(self):
- self.assert_syntax_error("""
- match ...:
- case {"a": _, "a": _}:
- pass
- """)
- def test_mapping_pattern_duplicate_key_edge_case0(self):
- self.assert_syntax_error("""
- match ...:
- case {0: _, False: _}:
- pass
- """)
- def test_mapping_pattern_duplicate_key_edge_case1(self):
- self.assert_syntax_error("""
- match ...:
- case {0: _, 0.0: _}:
- pass
- """)
- def test_mapping_pattern_duplicate_key_edge_case2(self):
- self.assert_syntax_error("""
- match ...:
- case {0: _, -0: _}:
- pass
- """)
- def test_mapping_pattern_duplicate_key_edge_case3(self):
- self.assert_syntax_error("""
- match ...:
- case {0: _, 0j: _}:
- pass
- """)
- class TestTypeErrors(unittest.TestCase):
- def test_accepts_positional_subpatterns_0(self):
- class Class:
- __match_args__ = ()
- x = Class()
- y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y):
- z = 0
- self.assertIs(y, None)
- self.assertIs(z, None)
- def test_accepts_positional_subpatterns_1(self):
- x = range(10)
- y = None
- with self.assertRaises(TypeError):
- match x:
- case range(10):
- y = 0
- self.assertEqual(x, range(10))
- self.assertIs(y, None)
- def test_got_multiple_subpatterns_for_attribute_0(self):
- class Class:
- __match_args__ = ("a", "a")
- a = None
- x = Class()
- w = y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y, z):
- w = 0
- self.assertIs(w, None)
- self.assertIs(y, None)
- self.assertIs(z, None)
- def test_got_multiple_subpatterns_for_attribute_1(self):
- class Class:
- __match_args__ = ("a",)
- a = None
- x = Class()
- w = y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y, a=z):
- w = 0
- self.assertIs(w, None)
- self.assertIs(y, None)
- self.assertIs(z, None)
- def test_match_args_elements_must_be_strings(self):
- class Class:
- __match_args__ = (None,)
- x = Class()
- y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y):
- z = 0
- self.assertIs(y, None)
- self.assertIs(z, None)
- def test_match_args_must_be_a_tuple_0(self):
- class Class:
- __match_args__ = None
- x = Class()
- y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y):
- z = 0
- self.assertIs(y, None)
- self.assertIs(z, None)
- def test_match_args_must_be_a_tuple_1(self):
- class Class:
- __match_args__ = "XYZ"
- x = Class()
- y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y):
- z = 0
- self.assertIs(y, None)
- self.assertIs(z, None)
- def test_match_args_must_be_a_tuple_2(self):
- class Class:
- __match_args__ = ["spam", "eggs"]
- spam = 0
- eggs = 1
- x = Class()
- w = y = z = None
- with self.assertRaises(TypeError):
- match x:
- case Class(y, z):
- w = 0
- self.assertIs(w, None)
- self.assertIs(y, None)
- self.assertIs(z, None)
- class TestValueErrors(unittest.TestCase):
- def test_mapping_pattern_checks_duplicate_key_1(self):
- class Keys:
- KEY = "a"
- x = {"a": 0, "b": 1}
- w = y = z = None
- with self.assertRaises(ValueError):
- match x:
- case {Keys.KEY: y, "a": z}:
- w = 0
- self.assertIs(w, None)
- self.assertIs(y, None)
- self.assertIs(z, None)
- class TestTracing(unittest.TestCase):
- @staticmethod
- def _trace(func, *args, **kwargs):
- actual_linenos = []
- def trace(frame, event, arg):
- if event == "line" and frame.f_code.co_name == func.__name__:
- assert arg is None
- relative_lineno = frame.f_lineno - func.__code__.co_firstlineno
- actual_linenos.append(relative_lineno)
- return trace
- old_trace = sys.gettrace()
- sys.settrace(trace)
- try:
- func(*args, **kwargs)
- finally:
- sys.settrace(old_trace)
- return actual_linenos
- def test_default_wildcard(self):
- def f(command): # 0
- match command.split(): # 1
- case ["go", direction] if direction in "nesw": # 2
- return f"go {direction}" # 3
- case ["go", _]: # 4
- return "no go" # 5
- case _: # 6
- return "default" # 7
- self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "go x"), [1, 2, 4, 5])
- self.assertListEqual(self._trace(f, "spam"), [1, 2, 4, 6, 7])
- def test_default_capture(self):
- def f(command): # 0
- match command.split(): # 1
- case ["go", direction] if direction in "nesw": # 2
- return f"go {direction}" # 3
- case ["go", _]: # 4
- return "no go" # 5
- case x: # 6
- return x # 7
- self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "go x"), [1, 2, 4, 5])
- self.assertListEqual(self._trace(f, "spam"), [1, 2, 4, 6, 7])
- def test_no_default(self):
- def f(command): # 0
- match command.split(): # 1
- case ["go", direction] if direction in "nesw": # 2
- return f"go {direction}" # 3
- case ["go", _]: # 4
- return "no go" # 5
- self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "go x"), [1, 2, 4, 5])
- self.assertListEqual(self._trace(f, "spam"), [1, 2, 4])
- def test_only_default_wildcard(self):
- def f(command): # 0
- match command.split(): # 1
- case _: # 2
- return "default" # 3
- self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "go x"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "spam"), [1, 2, 3])
- def test_only_default_capture(self):
- def f(command): # 0
- match command.split(): # 1
- case x: # 2
- return x # 3
- self.assertListEqual(self._trace(f, "go n"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "go x"), [1, 2, 3])
- self.assertListEqual(self._trace(f, "spam"), [1, 2, 3])
- def test_parser_deeply_nested_patterns(self):
- # Deeply nested patterns can cause exponential backtracking when parsing.
- # See gh-93671 for more information.
- levels = 100
- patterns = [
- "A" + "(" * levels + ")" * levels,
- "{1:" * levels + "1" + "}" * levels,
- "[" * levels + "1" + "]" * levels,
- ]
- for pattern in patterns:
- with self.subTest(pattern):
- code = inspect.cleandoc("""
- match None:
- case {}:
- pass
- """.format(pattern))
- compile(code, "<string>", "exec")
- if __name__ == "__main__":
- """
- # From inside environment using this Python, with pyperf installed:
- sudo $(which pyperf) system tune && \
- $(which python) -m test.test_patma --rigorous; \
- sudo $(which pyperf) system reset
- """
- import pyperf
- class PerfPatma(TestPatma):
- def assertEqual(*_, **__):
- pass
- def assertIs(*_, **__):
- pass
- def assertRaises(*_, **__):
- assert False, "this test should be a method of a different class!"
- def run_perf(self, count):
- tests = []
- for attr in vars(TestPatma):
- if attr.startswith("test_"):
- tests.append(getattr(self, attr))
- tests *= count
- start = pyperf.perf_counter()
- for test in tests:
- test()
- return pyperf.perf_counter() - start
- runner = pyperf.Runner()
- runner.bench_time_func("patma", PerfPatma().run_perf)
|