combine the two rules
This commit is contained in:
@@ -37,8 +37,8 @@ reveal_type(b**b) # revealed: Literal[1]
|
||||
# Division
|
||||
reveal_type(a / a) # revealed: float
|
||||
reveal_type(b / a) # revealed: float
|
||||
b / b # error: [division-by-zero] "Cannot divide object of type `Literal[False]` by zero"
|
||||
a / b # error: [division-by-zero] "Cannot divide object of type `Literal[True]` by zero"
|
||||
b / b # error: [literal-math-error] "Cannot divide object of type `Literal[False]` by zero"
|
||||
a / b # error: [literal-math-error] "Cannot divide object of type `Literal[True]` by zero"
|
||||
|
||||
# bitwise OR
|
||||
reveal_type(a | a) # revealed: Literal[True]
|
||||
|
||||
@@ -135,9 +135,9 @@ reveal_type(int() / 0) # revealed: int | float
|
||||
|
||||
# error: "Cannot divide object of type `Literal[1]` by zero"
|
||||
reveal_type(1 / False) # revealed: float
|
||||
# error: [division-by-zero] "Cannot divide object of type `Literal[True]` by zero"
|
||||
# error: [literal-math-error] "Cannot divide object of type `Literal[True]` by zero"
|
||||
True / False
|
||||
# error: [division-by-zero] "Cannot divide object of type `Literal[True]` by zero"
|
||||
# error: [literal-math-error] "Cannot divide object of type `Literal[True]` by zero"
|
||||
bool(1) / False
|
||||
|
||||
# error: "Cannot divide object of type `float` by zero"
|
||||
@@ -176,20 +176,21 @@ reveal_type(0 >> 100) # revealed: Literal[0]
|
||||
reveal_type(-42 >> 100) # revealed: Literal[-1]
|
||||
```
|
||||
|
||||
It is an error to shift by a negative value. This is handled similarly to `division-by-zero`, above:
|
||||
It is an error to shift by a negative value. This is handled similarly to `ZeroDivisionError`
|
||||
detection, above:
|
||||
|
||||
```py
|
||||
# error: [negative-shift] "Cannot left shift object of type `Literal[42]` by a negative value"
|
||||
# error: [literal-math-error] "Cannot left shift object of type `Literal[42]` by a negative value"
|
||||
reveal_type(42 << -3) # revealed: int
|
||||
# error: [negative-shift] "Cannot left shift object of type `Literal[0]` by a negative value"
|
||||
# error: [literal-math-error]
|
||||
reveal_type(0 << -3) # revealed: int
|
||||
# error: [negative-shift] "Cannot left shift object of type `Literal[-42]` by a negative value"
|
||||
# error: [literal-math-error]
|
||||
reveal_type(-42 << -3) # revealed: int
|
||||
|
||||
# error: [negative-shift] "Cannot right shift object of type `Literal[42]` by a negative value"
|
||||
# error: [literal-math-error] "Cannot right shift object of type `Literal[42]` by a negative value"
|
||||
reveal_type(42 >> -3) # revealed: int
|
||||
# error: [negative-shift] "Cannot right shift object of type `Literal[0]` by a negative value"
|
||||
# error: [literal-math-error]
|
||||
reveal_type(0 >> -3) # revealed: int
|
||||
# error: [negative-shift] "Cannot right shift object of type `Literal[-42]` by a negative value"
|
||||
# error: [literal-math-error]
|
||||
reveal_type(-42 >> -3) # revealed: int
|
||||
```
|
||||
|
||||
@@ -54,6 +54,6 @@ If any of the union elements leads to a division by zero, we will report an erro
|
||||
|
||||
```py
|
||||
def f5(m: int, n: Literal[-1, 0, 1]):
|
||||
# error: [division-by-zero] "Cannot divide object of type `int` by zero"
|
||||
# error: [literal-math-error] "Cannot divide object of type `int` by zero"
|
||||
return m / n
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user