| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- [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'} <class 'dict'>
- [3] <class 'list'>
|