-- Test cases for parser -- Python 3.10 syntax (match statement)
--
-- See parse.test for a description of this file format.

[case testSimpleMatch]
match a:
    case 1:
      pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      ValuePattern:2(
        IntExpr(1)))
    Body(
      PassStmt:3())))


[case testTupleMatch]
match a, b:
    case 1:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    TupleExpr:1(
      NameExpr(a)
      NameExpr(b))
    Pattern(
      ValuePattern:2(
        IntExpr(1)))
    Body(
      PassStmt:3())))

[case testMatchWithGuard]
match a:
    case 1 if f():
        pass
    case d if d > 5:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      ValuePattern:2(
        IntExpr(1)))
    Guard(
      CallExpr:2(
        NameExpr(f)
        Args()))
    Body(
      PassStmt:3())
    Pattern(
      AsPattern:4(
        NameExpr(d)))
    Guard(
      ComparisonExpr:4(
        >
        NameExpr(d)
        IntExpr(5)))
    Body(
      PassStmt:5())))

[case testAsPattern]
match a:
    case 1 as b:
      pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      AsPattern:2(
        ValuePattern:2(
          IntExpr(1))
        NameExpr(b)))
    Body(
      PassStmt:3())))


[case testLiteralPattern]
match a:
  case 1:
    pass
  case -1:
    pass
  case 1+2j:
    pass
  case -1+2j:
    pass
  case 1-2j:
    pass
  case -1-2j:
    pass
  case "str":
    pass
  case b"bytes":
    pass
  case r"raw_string":
    pass
  case None:
    pass
  case True:
    pass
  case False:
    pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      ValuePattern:2(
        IntExpr(1)))
    Body(
      PassStmt:3())
    Pattern(
      ValuePattern:4(
        UnaryExpr:4(
          -
          IntExpr(1))))
    Body(
      PassStmt:5())
    Pattern(
      ValuePattern:6(
        OpExpr:6(
          +
          IntExpr(1)
          ComplexExpr(2j))))
    Body(
      PassStmt:7())
    Pattern(
      ValuePattern:8(
        OpExpr:8(
          +
          UnaryExpr:8(
            -
            IntExpr(1))
          ComplexExpr(2j))))
    Body(
      PassStmt:9())
    Pattern(
      ValuePattern:10(
        OpExpr:10(
          -
          IntExpr(1)
          ComplexExpr(2j))))
    Body(
      PassStmt:11())
    Pattern(
      ValuePattern:12(
        OpExpr:12(
          -
          UnaryExpr:12(
            -
            IntExpr(1))
          ComplexExpr(2j))))
    Body(
      PassStmt:13())
    Pattern(
      ValuePattern:14(
        StrExpr(str)))
    Body(
      PassStmt:15())
    Pattern(
      ValuePattern:16(
        BytesExpr(bytes)))
    Body(
      PassStmt:17())
    Pattern(
      ValuePattern:18(
        StrExpr(raw_string)))
    Body(
      PassStmt:19())
    Pattern(
      SingletonPattern:20())
    Body(
      PassStmt:21())
    Pattern(
      SingletonPattern:22(
        True))
    Body(
      PassStmt:23())
    Pattern(
      SingletonPattern:24(
        False))
    Body(
      PassStmt:25())))

[case testCapturePattern]
match a:
    case x:
        pass
    case longName:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      AsPattern:2(
        NameExpr(x)))
    Body(
      PassStmt:3())
    Pattern(
      AsPattern:4(
        NameExpr(longName)))
    Body(
      PassStmt:5())))

[case testWildcardPattern]
match a:
    case _:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      AsPattern:2())
    Body(
      PassStmt:3())))

[case testValuePattern]
match a:
    case b.c:
        pass
    case b.c.d.e.f:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      ValuePattern:2(
        MemberExpr:2(
          NameExpr(b)
          c)))
    Body(
      PassStmt:3())
    Pattern(
      ValuePattern:4(
        MemberExpr:4(
          MemberExpr:4(
            MemberExpr:4(
              MemberExpr:4(
                NameExpr(b)
                c)
              d)
            e)
          f)))
    Body(
      PassStmt:5())))

[case testGroupPattern]
# This is optimized out by the compiler. It doesn't appear in the ast
match a:
    case (1):
        pass
[out]
MypyFile:1(
  MatchStmt:2(
    NameExpr(a)
    Pattern(
      ValuePattern:3(
        IntExpr(1)))
    Body(
      PassStmt:4())))

[case testSequencePattern]
match a:
    case []:
        pass
    case ():
        pass
    case [1]:
        pass
    case (1,):
        pass
    case 1,:
        pass
    case [1, 2, 3]:
        pass
    case (1, 2, 3):
        pass
    case 1, 2, 3:
        pass
    case [1, *a, 2]:
        pass
    case (1, *a, 2):
        pass
    case 1, *a, 2:
        pass
    case [1, *_, 2]:
        pass
    case (1, *_, 2):
        pass
    case 1, *_, 2:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      SequencePattern:2())
    Body(
      PassStmt:3())
    Pattern(
      SequencePattern:4())
    Body(
      PassStmt:5())
    Pattern(
      SequencePattern:6(
        ValuePattern:6(
          IntExpr(1))))
    Body(
      PassStmt:7())
    Pattern(
      SequencePattern:8(
        ValuePattern:8(
          IntExpr(1))))
    Body(
      PassStmt:9())
    Pattern(
      SequencePattern:10(
        ValuePattern:10(
          IntExpr(1))))
    Body(
      PassStmt:11())
    Pattern(
      SequencePattern:12(
        ValuePattern:12(
          IntExpr(1))
        ValuePattern:12(
          IntExpr(2))
        ValuePattern:12(
          IntExpr(3))))
    Body(
      PassStmt:13())
    Pattern(
      SequencePattern:14(
        ValuePattern:14(
          IntExpr(1))
        ValuePattern:14(
          IntExpr(2))
        ValuePattern:14(
          IntExpr(3))))
    Body(
      PassStmt:15())
    Pattern(
      SequencePattern:16(
        ValuePattern:16(
          IntExpr(1))
        ValuePattern:16(
          IntExpr(2))
        ValuePattern:16(
          IntExpr(3))))
    Body(
      PassStmt:17())
    Pattern(
      SequencePattern:18(
        ValuePattern:18(
          IntExpr(1))
        StarredPattern:18(
          NameExpr(a))
        ValuePattern:18(
          IntExpr(2))))
    Body(
      PassStmt:19())
    Pattern(
      SequencePattern:20(
        ValuePattern:20(
          IntExpr(1))
        StarredPattern:20(
          NameExpr(a))
        ValuePattern:20(
          IntExpr(2))))
    Body(
      PassStmt:21())
    Pattern(
      SequencePattern:22(
        ValuePattern:22(
          IntExpr(1))
        StarredPattern:22(
          NameExpr(a))
        ValuePattern:22(
          IntExpr(2))))
    Body(
      PassStmt:23())
    Pattern(
      SequencePattern:24(
        ValuePattern:24(
          IntExpr(1))
        StarredPattern:24()
        ValuePattern:24(
          IntExpr(2))))
    Body(
      PassStmt:25())
    Pattern(
      SequencePattern:26(
        ValuePattern:26(
          IntExpr(1))
        StarredPattern:26()
        ValuePattern:26(
          IntExpr(2))))
    Body(
      PassStmt:27())
    Pattern(
      SequencePattern:28(
        ValuePattern:28(
          IntExpr(1))
        StarredPattern:28()
        ValuePattern:28(
          IntExpr(2))))
    Body(
      PassStmt:29())))

[case testMappingPattern]
match a:
    case {'k': v}:
        pass
    case {a.b: v}:
        pass
    case {1: v}:
        pass
    case {a.c: v}:
        pass
    case {'k': v1, a.b: v2, 1: v3, a.c: v4}:
        pass
    case {'k1': 1, 'k2': "str", 'k3': b'bytes', 'k4': None}:
        pass
    case {'k': v, **r}:
        pass
    case {**r}:
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      MappingPattern:2(
        Key(
          StrExpr(k))
        Value(
          AsPattern:2(
            NameExpr(v)))))
    Body(
      PassStmt:3())
    Pattern(
      MappingPattern:4(
        Key(
          MemberExpr:4(
            NameExpr(a)
            b))
        Value(
          AsPattern:4(
            NameExpr(v)))))
    Body(
      PassStmt:5())
    Pattern(
      MappingPattern:6(
        Key(
          IntExpr(1))
        Value(
          AsPattern:6(
            NameExpr(v)))))
    Body(
      PassStmt:7())
    Pattern(
      MappingPattern:8(
        Key(
          MemberExpr:8(
            NameExpr(a)
            c))
        Value(
          AsPattern:8(
            NameExpr(v)))))
    Body(
      PassStmt:9())
    Pattern(
      MappingPattern:10(
        Key(
          StrExpr(k))
        Value(
          AsPattern:10(
            NameExpr(v1)))
        Key(
          MemberExpr:10(
            NameExpr(a)
            b))
        Value(
          AsPattern:10(
            NameExpr(v2)))
        Key(
          IntExpr(1))
        Value(
          AsPattern:10(
            NameExpr(v3)))
        Key(
          MemberExpr:10(
            NameExpr(a)
            c))
        Value(
          AsPattern:10(
            NameExpr(v4)))))
    Body(
      PassStmt:11())
    Pattern(
      MappingPattern:12(
        Key(
          StrExpr(k1))
        Value(
          ValuePattern:12(
            IntExpr(1)))
        Key(
          StrExpr(k2))
        Value(
          ValuePattern:12(
            StrExpr(str)))
        Key(
          StrExpr(k3))
        Value(
          ValuePattern:12(
            BytesExpr(bytes)))
        Key(
          StrExpr(k4))
        Value(
          SingletonPattern:12())))
    Body(
      PassStmt:13())
    Pattern(
      MappingPattern:14(
        Key(
          StrExpr(k))
        Value(
          AsPattern:14(
            NameExpr(v)))
        Rest(
          NameExpr(r))))
    Body(
      PassStmt:15())
    Pattern(
      MappingPattern:16(
        Rest(
          NameExpr(r))))
    Body(
      PassStmt:17())))

[case testClassPattern]
match a:
    case A():
        pass
    case B(1, 2):
        pass
    case B(1, b=2):
        pass
    case B(a=1, b=2):
        pass
[out]
MypyFile:1(
  MatchStmt:1(
    NameExpr(a)
    Pattern(
      ClassPattern:2(
        NameExpr(A)))
    Body(
      PassStmt:3())
    Pattern(
      ClassPattern:4(
        NameExpr(B)
        Positionals(
          ValuePattern:4(
            IntExpr(1))
          ValuePattern:4(
            IntExpr(2)))))
    Body(
      PassStmt:5())
    Pattern(
      ClassPattern:6(
        NameExpr(B)
        Positionals(
          ValuePattern:6(
            IntExpr(1)))
        Keyword(
          b
          ValuePattern:6(
            IntExpr(2)))))
    Body(
      PassStmt:7())
    Pattern(
      ClassPattern:8(
        NameExpr(B)
        Keyword(
          a
          ValuePattern:8(
            IntExpr(1)))
        Keyword(
          b
          ValuePattern:8(
            IntExpr(2)))))
    Body(
      PassStmt:9())))
