[case testTheBigMatch_python3_10] class Person: __match_args__ = ("name", "age") name: str age: int def __init__(self, name: str, age: int) -> None: self.name = name self.age = age def __str__(self) -> str: return f"Person(name={self.name!r}, age={self.age})" def f(x: object) -> None: match x: case 123: print("test 1") case 456 | 789: print("test 2") case True | False | None: print("test 3") case Person("bob" as name, age): print(f"test 4 ({name=}, {age=})") case num if num == 5: print("test 5") case 6 as num: print(f"test 6 ({num=})") case (7 | "7") as value: print(f"test 7 ({value=})") case Person("alice", age=123): print("test 8") case Person("charlie", age=123 | 456): print("test 9") case Person("dave", 123) as dave: print(f"test 10 {dave}") case {"test": 11}: print("test 11") case {"test": 12, **rest}: print(f"test 12 (rest={rest})") case {}: print("test map final") case ["test", 13]: print("test 13") case ["test", 13, _]: print("test 13b") case ["test", 14, *_]: print("test 14") # TODO: Fix "rest" being used here coliding with above "rest" case ["test", 15, *rest2]: print(f"test 15 ({rest2})") case ["test", *rest3, 16]: print(f"test 16 ({rest3})") case [*rest4, "test", 17]: print(f"test 17 ({rest4})") case [*rest4, "test", 18, "some", "fluff"]: print(f"test 18 ({rest4})") case str("test 19"): print("test 19") case str(test_20) if test_20.startswith("test 20"): print(f"test 20 ({test_20[7:]!r})") case ("test 21" as value) | ("test 21 as well" as value): print(f"test 21 ({value[7:]!r})") case []: print("test sequence final") case _: print("test final") [file driver.py] from native import f, Person # test 1 f(123) # test 2 f(456) f(789) # test 3 f(True) f(False) f(None) # test 4 f(Person("bob", 123)) # test 5 f(5) # test 6 f(6) # test 7 f(7) f("7") # test 8 f(Person("alice", 123)) # test 9 f(Person("charlie", 123)) f(Person("charlie", 456)) # test 10 f(Person("dave", 123)) # test 11 f({"test": 11}) f({"test": 11, "some": "key"}) # test 12 f({"test": 12}) f({"test": 12, "key": "value"}) f({"test": 12, "key": "value", "abc": "123"}) # test map final f({}) # test 13 f(["test", 13]) # test 13b f(["test", 13, "fail"]) # test 14 f(["test", 14]) f(["test", 14, "something"]) # test 15 f(["test", 15]) f(["test", 15, "something"]) # test 16 f(["test", 16]) f(["test", "filler", 16]) f(["test", "more", "filler", 16]) # test 17 f(["test", 17]) f(["stuff", "test", 17]) f(["more", "stuff", "test", 17]) # test 18 f(["test", 18, "some", "fluff"]) f(["stuff", "test", 18, "some", "fluff"]) f(["more", "stuff", "test", 18, "some", "fluff"]) # test 19 f("test 19") # test 20 f("test 20") f("test 20 something else") # test 21 f("test 21") f("test 21 as well") # test sequence final f([]) # test final f("") [out] test 1 test 2 test 2 test 3 test 3 test 3 test 4 (name='bob', age=123) test 5 test 6 (num=6) test 7 (value=7) test 7 (value='7') test 8 test 9 test 9 test 10 Person(name='dave', age=123) test 11 test 11 test 12 (rest={}) test 12 (rest={'key': 'value'}) test 12 (rest={'key': 'value', 'abc': '123'}) test map final test 13 test 13b test 14 test 14 test 15 ([]) test 15 (['something']) test 16 ([]) test 16 (['filler']) test 16 (['more', 'filler']) test 17 ([]) test 17 (['stuff']) test 17 (['more', 'stuff']) test 18 ([]) test 18 (['stuff']) test 18 (['more', 'stuff']) test 19 test 20 ('') test 20 (' something else') test 21 ('') test 21 (' as well') test sequence final test final [case testCustomMappingAndSequenceObjects_python3_10] def f(x: object) -> None: match x: case {"key": "value", **rest}: print(rest, type(rest)) case [1, 2, *rest2]: print(rest2, type(rest2)) [file driver.py] from collections.abc import Mapping, Sequence from native import f class CustomMapping(Mapping): inner: dict def __init__(self, inner: dict) -> None: self.inner = inner def __getitem__(self, key): return self.inner[key] def __iter__(self): return iter(self.inner) def __len__(self) -> int: return len(self.inner) class CustomSequence(Sequence): inner: list def __init__(self, inner: list) -> None: self.inner = inner def __getitem__(self, index: int) -> None: return self.inner[index] def __len__(self) -> int: return len(self.inner) mapping = CustomMapping({"key": "value", "some": "data"}) sequence = CustomSequence([1, 2, 3]) f(mapping) f(sequence) [out] {'some': 'data'} [3]