Files
ruff/crates/red_knot_python_semantic/resources/mdtest/expression/boolean.md
David Peter c2f7c39987 [red-knot] mdtest suite: formatting and cleanup (#13806)
Minor cleanup and consistent formatting of the Markdown-based tests.

- Removed lots of unnecessary `a`, `b`, `c`, … variables.
- Moved test assertions (`# revealed:` comments) closer to the tested
object.
- Always separate `# revealed` and `# error` comments from the code by
two spaces, according to the discussion
[here](https://github.com/astral-sh/ruff/pull/13746/files#r1799385758).
This trades readability for consistency in some cases.
- Fixed some headings
2024-10-18 11:07:53 +02:00

2.6 KiB

Expressions

OR

def foo() -> str:
    pass

reveal_type(True or False)  # revealed: Literal[True]
reveal_type('x' or 'y' or 'z')  # revealed: Literal["x"]
reveal_type('' or 'y' or 'z')  # revealed: Literal["y"]
reveal_type(False or 'z')  # revealed: Literal["z"]
reveal_type(False or True)  # revealed: Literal[True]
reveal_type(False or False)  # revealed: Literal[False]
reveal_type(foo() or False)  # revealed: str | Literal[False]
reveal_type(foo() or True)  # revealed: str | Literal[True]

AND

def foo() -> str:
    pass

reveal_type(True and False)  # revealed: Literal[False]
reveal_type(False and True)  # revealed: Literal[False]
reveal_type(foo() and False)  # revealed: str | Literal[False]
reveal_type(foo() and True)  # revealed: str | Literal[True]
reveal_type('x' and 'y' and 'z')  # revealed: Literal["z"]
reveal_type('x' and 'y' and '')  # revealed: Literal[""]
reveal_type('' and 'y')  # revealed: Literal[""]

Simple function calls to bool

def returns_bool() -> bool:
    return True

if returns_bool():
    x = True
else:
    x = False

reveal_type(x)  # revealed: bool

Complex

def foo() -> str:
    pass

reveal_type("x" and "y" or "z")  # revealed: Literal["y"]
reveal_type("x" or "y" and "z")  # revealed: Literal["x"]
reveal_type("" and "y" or "z")  # revealed: Literal["z"]
reveal_type("" or "y" and "z")  # revealed: Literal["z"]
reveal_type("x" and "y" or "")  # revealed: Literal["y"]
reveal_type("x" or "y" and "")  # revealed: Literal["x"]

bool() function

Evaluates to builtin

redefined_builtin_bool = bool

def my_bool(x)-> bool: pass
from a import redefined_builtin_bool, my_bool

reveal_type(redefined_builtin_bool(0))  # revealed: Literal[False]
reveal_type(my_bool(0))  # revealed: bool

Truthy values

reveal_type(bool(1))  # revealed: Literal[True]
reveal_type(bool((0,)))  # revealed: Literal[True]
reveal_type(bool("NON EMPTY"))  # revealed: Literal[True]
reveal_type(bool(True))  # revealed: Literal[True]

def foo(): pass
reveal_type(bool(foo))  # revealed: Literal[True]

Falsy values

reveal_type(bool(0))  # revealed: Literal[False]
reveal_type(bool(()))  # revealed: Literal[False]
reveal_type(bool(None))  # revealed: Literal[False]
reveal_type(bool(""))  # revealed: Literal[False]
reveal_type(bool(False))  # revealed: Literal[False]
reveal_type(bool())  # revealed: Literal[False]

Ambiguous values

reveal_type(bool([]))  # revealed: bool
reveal_type(bool({}))  # revealed: bool
reveal_type(bool(set()))  # revealed: bool