aboutsummaryrefslogtreecommitdiff
path: root/tests/test-data/check-immu.test
blob: 2ee32f17aada9dd2fa6f654be4f5625befad4886 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[case testMypyImmu]
# cmd: mypy test.py
[file test.py]
from immutables import Map
from typing import Dict, Union, Any, cast

def init() -> None:
    def thing(m: Map[str, Union[str, int]]) -> None:
        ...

    thing(Map(foo=1))
    thing(Map(foo='bar', baz=1))
    thing(Map([('foo', 'bar'), ('bar', 1)]))
    thing(Map(Map(foo=1), bar='foo'))
    m = Map({1: 2})
    thing(m)  # E: Argument 1 to "thing" has incompatible type "Map[int, int]"; expected "Map[str, Union[str, int]]"

def assignments() -> None:
    m_int__str = Map[int, str]()
    m_str__str = Map[str, str]()
    m_int_str__str = Map[Union[int, str], str]()
    m_str__int_str = Map[str, Union[int, str]]()

    m_int__str = m_str__str  # E: Incompatible types in assignment (expression has type "Map[str, str]", variable has type "Map[int, str]")
    m_int__str = m_int_str__str  # E: Incompatible types in assignment (expression has type "Map[Union[int, str], str]", variable has type "Map[int, str]")
    m_int__str = m_str__int_str  # E: Incompatible types in assignment (expression has type "Map[str, Union[int, str]]", variable has type "Map[int, str]")

    m_str__str = m_int__str  # E: Incompatible types in assignment (expression has type "Map[int, str]", variable has type "Map[str, str]")
    m_str__str = m_int_str__str  # E: Incompatible types in assignment (expression has type "Map[Union[int, str], str]", variable has type "Map[str, str]")
    m_str__str = m_str__int_str  # E: Incompatible types in assignment (expression has type "Map[str, Union[int, str]]", variable has type "Map[str, str]")

    m_int_str__str = m_int__str  # E: Incompatible types in assignment (expression has type "Map[int, str]", variable has type "Map[Union[int, str], str]")
    m_int_str__str = m_str__str  # E: Incompatible types in assignment (expression has type "Map[str, str]", variable has type "Map[Union[int, str], str]")
    m_int_str__str = m_str__int_str  # E: Incompatible types in assignment (expression has type "Map[str, Union[int, str]]", variable has type "Map[Union[int, str], str]")

    m_str__int_str = m_int__str  # E: Incompatible types in assignment (expression has type "Map[int, str]", variable has type "Map[str, Union[int, str]]")
    m_str__int_str = m_int_str__str  # E: Incompatible types in assignment (expression has type "Map[Union[int, str], str]", variable has type "Map[str, Union[int, str]]")
    m_str__int_str = m_str__str

def update() -> None:
    m_int__str: Map[int, str] = Map()
    m_str__str: Map[str, str] = Map()
    m_int_str__str: Map[Union[int, str], str] = Map()
    m_str__int_str: Map[str, Union[int, str]] = Map()

    m_int__str.update({1: '2'})
    m_int__str.update({1: '2'}, three='4')  # E: Unexpected keyword argument "three" for "update" of "Map"
    m_int__str.update({1: 2})  # E: Argument 1 to "update" of "Map" has incompatible type "Dict[int, int]"; expected "Union[IterableItems[int, str], Iterable[Tuple[int, str]]]"

    m_str__str.update({'1': '2'})
    m_str__str.update({'1': '2'}, three='4')
    m_str__str.update({'1': 2})  # E: Argument 1 to "update" of "Map" has incompatible type "Dict[str, int]"; expected "Union[IterableItems[str, str], Iterable[Tuple[str, str]]]"

    m_int_str__str.update(cast(Dict[Union[int, str], str], {1: '2', '3': '4'}))
    m_int_str__str.update({1: '2'}, three='4')
    m_int_str__str.update({'1': 2})  # E: Argument 1 to "update" of "Map" has incompatible type "Dict[str, int]"; expected "Union[IterableItems[Union[int, str], str], Iterable[Tuple[Union[int, str], str]]]"

    m_str__int_str.update({'1': 2, '2': 3})
    m_str__int_str.update({'1': 2, '2': 3}, four='5')
    m_str__int_str.update({1: 2})  # E: Argument 1 to "update" of "Map" has incompatible type "Dict[int, int]"; expected "Union[IterableItems[str, Union[int, str]], Iterable[Tuple[str, Union[int, str]]]]"

def mutate() -> None:
    m = Map[str, str]()

    with m.mutate() as mm:
        mm[0] = '1' # E: Invalid index type "int" for "MapMutation[str, str]"; expected type "str"
        mm['1'] = 0  # E: Incompatible types in assignment (expression has type "int", target has type "str")
        mm['1'] = '2'
        del mm['1']
        mm.set('3', '4')
        m2 = mm.finish()

    reveal_type(m2)  # N: Revealed type is "immutables._map.Map[builtins.str, builtins.str]"