Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
284 lines
5 KiB
Plaintext
284 lines
5 KiB
Plaintext
[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'>
|