[case testStarUnpackInComprehensionBasicsNative]
# flags: --native-parser

def test(x: list[list[int]], y: list[dict[str, int]]) -> None:
    reveal_type([*i for i in x])  # N: Revealed type is "builtins.list[builtins.int]"
    reveal_type({*i for i in x})  # N: Revealed type is "builtins.set[builtins.int]"
    reveal_type({**d for d in y})  # N: Revealed type is "builtins.dict[builtins.str, builtins.int]"
[builtins fixtures/primitives.pyi]

[case testStarUnpackInComprehensionBasicsOld]
# flags: --no-native-parser

def test(x: list[list[int]], y: list[dict[str, int]]) -> None:
    reveal_type([*i for i in x])  # N: Revealed type is "builtins.list[builtins.int]"
    reveal_type({*i for i in x})  # N: Revealed type is "builtins.set[builtins.int]"
    reveal_type({**d for d in y})   # N: Revealed type is "builtins.dict[builtins.str, builtins.int]"
[builtins fixtures/primitives.pyi]

[case testStarUnpackInComprehensionUnion]
def test(x: list[list[int]] | list[list[str]], y: list[dict[str, int]] | list[dict[str, str]]) -> None:
    reveal_type([*i for i in x])  # N: Revealed type is "builtins.list[builtins.int | builtins.str]"
    reveal_type({*i for i in x})  # N: Revealed type is "builtins.set[builtins.int | builtins.str]"
    reveal_type({**d for d in y})  # N: Revealed type is "builtins.dict[builtins.str | builtins.str, builtins.int | builtins.str]"
[builtins fixtures/primitives.pyi]

[case testDoubleStarUnpackInComprehensionStructuralMapping]
class MappingLike:
    def keys(self) -> list[str]:
        return ["key"]
    def __getitem__(self, key: str) -> int:
        return 1

def test(xs: list[MappingLike]) -> dict[str, int]:
    reveal_type({**x for x in xs})  # N: Revealed type is "builtins.dict[builtins.str, builtins.int]"
    return {**x for x in xs}
[builtins fixtures/primitives.pyi]
