mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-02 19:39:49 +09:00
152 lines
2.8 KiB
Python
152 lines
2.8 KiB
Python
i = 0
|
|
z = 1
|
|
match i:
|
|
case 0:
|
|
z = 0
|
|
case 1:
|
|
z = 2
|
|
case _:
|
|
z = 3
|
|
|
|
assert z == 0
|
|
# Test enum
|
|
from enum import Enum
|
|
|
|
|
|
class Color(Enum):
|
|
RED = 1
|
|
GREEN = 2
|
|
BLUE = 3
|
|
|
|
|
|
def test_color(color):
|
|
z = -1
|
|
match color:
|
|
case Color.RED:
|
|
z = 1
|
|
case Color.GREEN:
|
|
z = 2
|
|
case Color.BLUE:
|
|
z = 3
|
|
assert z == color.value
|
|
|
|
|
|
for color in Color:
|
|
test_color(color)
|
|
|
|
|
|
# test or
|
|
def test_or(i):
|
|
z = -1
|
|
match i:
|
|
case 0 | 1:
|
|
z = 0
|
|
case 2 | 3:
|
|
z = 1
|
|
case _:
|
|
z = 2
|
|
return z
|
|
|
|
|
|
assert test_or(0) == 0
|
|
assert test_or(1) == 0
|
|
assert test_or(2) == 1
|
|
assert test_or(3) == 1
|
|
assert test_or(4) == 2
|
|
|
|
# test mapping
|
|
data = {"a": 1, "b": 2}
|
|
match data:
|
|
case {"a": x}:
|
|
assert x == 1
|
|
case _:
|
|
assert False
|
|
|
|
match data:
|
|
case {"a": x, "b": y}:
|
|
assert x == 1, x
|
|
assert y == 2, y
|
|
case _:
|
|
assert False
|
|
|
|
# test mapping with rest
|
|
match data:
|
|
case {"a": x, **rest}:
|
|
assert x == 1
|
|
assert rest == {"b": 2}
|
|
case _:
|
|
assert False
|
|
|
|
# test empty rest
|
|
data2 = {"a": 1}
|
|
match data2:
|
|
case {"a": x, **rest}:
|
|
assert x == 1
|
|
assert rest == {}
|
|
case _:
|
|
assert False
|
|
|
|
# test rest with multiple keys
|
|
data3 = {"a": 1, "b": 2, "c": 3, "d": 4}
|
|
match data3:
|
|
case {"a": x, "b": y, **rest}:
|
|
assert x == 1
|
|
assert y == 2
|
|
assert rest == {"c": 3, "d": 4}
|
|
case _:
|
|
assert False
|
|
|
|
match data3:
|
|
case {"a": x, "b": y, "c": z, **rest}:
|
|
assert x == 1
|
|
assert y == 2
|
|
assert z == 3
|
|
assert rest == {"d": 4}
|
|
case _:
|
|
assert False
|
|
|
|
# test mapping pattern with wildcard fallback (reproduces wheelinfo.py issue)
|
|
test_dict = {"sha256": "abc123"}
|
|
result = None
|
|
match test_dict:
|
|
case {"sha256": checksum}:
|
|
result = checksum
|
|
case _:
|
|
result = "no checksum"
|
|
assert result == "abc123"
|
|
|
|
# test with no match
|
|
test_dict2 = {"md5": "xyz789"}
|
|
match test_dict2:
|
|
case {"sha256": checksum}:
|
|
result = checksum
|
|
case _:
|
|
result = "no checksum"
|
|
assert result == "no checksum"
|
|
|
|
|
|
# test mapping patterns - comprehensive tests
|
|
def test_mapping_comprehensive():
|
|
# Single key capture
|
|
data = {"a": 1}
|
|
match data:
|
|
case {"a": x}:
|
|
captured = x
|
|
case _:
|
|
captured = None
|
|
assert captured == 1, f"Expected 1, got {captured}"
|
|
|
|
# Multiple keys
|
|
data = {"a": 1, "b": 2}
|
|
match data:
|
|
case {"a": x, "b": y}:
|
|
cap_x = x
|
|
cap_y = y
|
|
case _:
|
|
cap_x = cap_y = None
|
|
assert cap_x == 1, f"Expected x=1, got {cap_x}"
|
|
assert cap_y == 2, f"Expected y=2, got {cap_y}"
|
|
|
|
|
|
test_mapping_comprehensive()
|