| [case testNativeIntBasics] |
| from mypy_extensions import i32, i64 |
| |
| def f(x: int) -> i32: |
| return i32(x) |
| |
| def g(x: i32) -> None: |
| pass |
| |
| reveal_type(i32(1) + i32(2)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(i64(1) + i64(2)) # N: Revealed type is "mypy_extensions.i64" |
| i32(1) + i64(2) # E: Unsupported operand types for + ("i32" and "i64") |
| i64(1) + i32(2) # E: Unsupported operand types for + ("i64" and "i32") |
| g(i32(2)) |
| g(i64(2)) # E: Argument 1 to "g" has incompatible type "i64"; expected "i32" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntCoercions] |
| from mypy_extensions import i32, i64 |
| |
| def f1(x: int) -> None: pass |
| def f2(x: i32) -> None: pass |
| |
| a: i32 = 1 |
| b: i64 = 2 |
| c: i64 = a # E: Incompatible types in assignment (expression has type "i32", variable has type "i64") |
| d: i64 = i64(a) |
| e: i32 = b # E: Incompatible types in assignment (expression has type "i64", variable has type "i32") |
| f: i32 = i32(b) |
| g: int = a |
| h: int = b |
| |
| f1(1) |
| f1(a) |
| f1(b) |
| f2(1) |
| f2(g) |
| f2(h) |
| f2(a) |
| f2(b) # E: Argument 1 to "f2" has incompatible type "i64"; expected "i32" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntJoins] |
| from typing import TypeVar, Any |
| from mypy_extensions import i32, i64 |
| |
| T = TypeVar('T') |
| |
| def join(x: T, y: T) -> T: return x |
| |
| n32: i32 = 0 |
| n64: i64 = 1 |
| n = 2 |
| |
| reveal_type(join(n32, n)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(join(n, n32)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(join(n64, n)) # N: Revealed type is "mypy_extensions.i64" |
| reveal_type(join(n, n64)) # N: Revealed type is "mypy_extensions.i64" |
| # i32 and i64 aren't treated as compatible |
| reveal_type(join(n32, n64)) # N: Revealed type is "builtins.object" |
| reveal_type(join(n64, n32)) # N: Revealed type is "builtins.object" |
| |
| a: Any |
| reveal_type(join(n, a)) # N: Revealed type is "Any" |
| reveal_type(join(n32, a)) # N: Revealed type is "Any" |
| reveal_type(join(a, n64)) # N: Revealed type is "Any" |
| reveal_type(join(n64, a)) # N: Revealed type is "Any" |
| reveal_type(join(a, n64)) # N: Revealed type is "Any" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntMeets] |
| from typing import TypeVar, Callable, Any |
| from mypy_extensions import i32, i64 |
| |
| T = TypeVar('T') |
| |
| def f32(x: i32) -> None: pass |
| def f64(x: i64) -> None: pass |
| def f(x: int) -> None: pass |
| def fa(x: Any) -> None: pass |
| |
| def meet(c1: Callable[[T], None], c2: Callable[[T], None]) -> T: |
| pass |
| |
| reveal_type(meet(f32, f)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(meet(f, f32)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(meet(f64, f)) # N: Revealed type is "mypy_extensions.i64" |
| reveal_type(meet(f, f64)) # N: Revealed type is "mypy_extensions.i64" |
| if object(): |
| reveal_type(meet(f32, f64)) # N: Revealed type is "<nothing>" |
| if object(): |
| reveal_type(meet(f64, f32)) # N: Revealed type is "<nothing>" |
| |
| reveal_type(meet(f, fa)) # N: Revealed type is "builtins.int" |
| reveal_type(meet(f32, fa)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(meet(fa, f32)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(meet(f64, fa)) # N: Revealed type is "mypy_extensions.i64" |
| reveal_type(meet(fa, f64)) # N: Revealed type is "mypy_extensions.i64" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntCoerceInArithmetic] |
| from mypy_extensions import i32, i64 |
| |
| reveal_type(i32(1) + 1) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(1 + i32(1)) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(i64(1) + 1) # N: Revealed type is "mypy_extensions.i64" |
| reveal_type(1 + i64(1)) # N: Revealed type is "mypy_extensions.i64" |
| n = int() |
| reveal_type(i32(1) + n) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(n + i32(1)) # N: Revealed type is "mypy_extensions.i32" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntNoNarrowing] |
| from mypy_extensions import i32 |
| |
| x: i32 = 1 |
| if int(): |
| x = 2 |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i32" |
| |
| y = 1 |
| if int(): |
| # We don't narrow an int down to i32, since they have different |
| # representations. |
| y = i32(1) |
| reveal_type(y) # N: Revealed type is "builtins.int" |
| reveal_type(y) # N: Revealed type is "builtins.int" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntFloatConversion] |
| from typing import TypeVar, Callable |
| from mypy_extensions import i32 |
| |
| x: i32 = 1.1 # E: Incompatible types in assignment (expression has type "float", variable has type "i32") |
| y: float = i32(1) # E: Incompatible types in assignment (expression has type "i32", variable has type "float") |
| |
| T = TypeVar('T') |
| |
| def join(x: T, y: T) -> T: return x |
| |
| reveal_type(join(x, y)) # N: Revealed type is "builtins.object" |
| reveal_type(join(y, x)) # N: Revealed type is "builtins.object" |
| |
| def meet(c1: Callable[[T], None], c2: Callable[[T], None]) -> T: |
| pass |
| |
| def ff(x: float) -> None: pass |
| def fi32(x: i32) -> None: pass |
| |
| if object(): |
| reveal_type(meet(ff, fi32)) # N: Revealed type is "<nothing>" |
| if object(): |
| reveal_type(meet(fi32, ff)) # N: Revealed type is "<nothing>" |
| [builtins fixtures/dict.pyi] |
| |
| [case testNativeIntForLoopRange] |
| from mypy_extensions import i64, i32 |
| |
| for a in range(i64(5)): |
| reveal_type(a) # N: Revealed type is "mypy_extensions.i64" |
| |
| for b in range(0, i32(5)): |
| reveal_type(b) # N: Revealed type is "mypy_extensions.i32" |
| |
| for c in range(i64(0), 5): |
| reveal_type(c) # N: Revealed type is "mypy_extensions.i64" |
| |
| for d in range(i64(0), i64(5)): |
| reveal_type(d) # N: Revealed type is "mypy_extensions.i64" |
| |
| for e in range(i64(0), i32(5)): |
| reveal_type(e) # N: Revealed type is "builtins.int" |
| |
| for f in range(0, i64(3), 2): |
| reveal_type(f) # N: Revealed type is "mypy_extensions.i64" |
| |
| n = 5 |
| for g in range(0, n, i64(2)): |
| reveal_type(g) # N: Revealed type is "mypy_extensions.i64" |
| [builtins fixtures/primitives.pyi] |
| |
| [case testNativeIntComprehensionRange] |
| from mypy_extensions import i64, i32 |
| |
| reveal_type([a for a in range(i64(5))]) # N: Revealed type is "builtins.list[mypy_extensions.i64]" |
| [reveal_type(a) for a in range(0, i32(5))] # N: Revealed type is "mypy_extensions.i32" |
| [builtins fixtures/primitives.pyi] |
| |
| [case testNativeIntNarrowing] |
| from typing import Union |
| from mypy_extensions import i64, i32 |
| |
| def narrow_i64(x: Union[str, i64]) -> None: |
| if isinstance(x, i64): |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i64" |
| else: |
| reveal_type(x) # N: Revealed type is "builtins.str" |
| reveal_type(x) # N: Revealed type is "Union[builtins.str, mypy_extensions.i64]" |
| |
| if isinstance(x, str): |
| reveal_type(x) # N: Revealed type is "builtins.str" |
| else: |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i64" |
| reveal_type(x) # N: Revealed type is "Union[builtins.str, mypy_extensions.i64]" |
| |
| if isinstance(x, int): |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i64" |
| else: |
| reveal_type(x) # N: Revealed type is "builtins.str" |
| reveal_type(x) # N: Revealed type is "Union[builtins.str, mypy_extensions.i64]" |
| |
| def narrow_i32(x: Union[str, i32]) -> None: |
| if isinstance(x, i32): |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i32" |
| else: |
| reveal_type(x) # N: Revealed type is "builtins.str" |
| reveal_type(x) # N: Revealed type is "Union[builtins.str, mypy_extensions.i32]" |
| |
| if isinstance(x, str): |
| reveal_type(x) # N: Revealed type is "builtins.str" |
| else: |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i32" |
| reveal_type(x) # N: Revealed type is "Union[builtins.str, mypy_extensions.i32]" |
| |
| if isinstance(x, int): |
| reveal_type(x) # N: Revealed type is "mypy_extensions.i32" |
| else: |
| reveal_type(x) # N: Revealed type is "builtins.str" |
| reveal_type(x) # N: Revealed type is "Union[builtins.str, mypy_extensions.i32]" |
| |
| [builtins fixtures/primitives.pyi] |