@@ -306,44 +306,25 @@ static_assert(is_assignable_to(Intersection[Unrelated, Not[int]], Not[int]))
306306static_assert(is_assignable_to(Intersection[Intersection[str , Not[Literal[" " ]]], int ], Intersection[str , Not[Literal[" " ]]]))
307307static_assert(is_assignable_to(Intersection[Intersection[Any, Not[int ]], Not[str ]], Intersection[Any, Not[int ]]))
308308
309+ # The condition `is_assignable_to(T & U, U)` should still be satisfied after the following transformations:
309310# `LiteralString & AlwaysTruthy` -> `LiteralString & ~Literal[""]`
310- static_assert(is_assignable_to(Intersection[LiteralString, AlwaysTruthy], AlwaysTruthy))
311311static_assert(is_assignable_to(Intersection[LiteralString, Not[Literal[" " ]]], AlwaysTruthy))
312312static_assert(is_assignable_to(Intersection[LiteralString, Not[Literal[" " , " a" ]]], AlwaysTruthy))
313- static_assert(not is_assignable_to(Intersection[object , Not[Literal[" " ]]], AlwaysTruthy))
314- static_assert(is_assignable_to(Intersection[LiteralString, Not[Literal[" " ]]], Intersection[AlwaysTruthy, Not[Literal[1 ]]]))
315- # `LiteralString & ~AlwaysTruthy` -> `LiteralString & Literal[""]`
316- static_assert(is_assignable_to(Intersection[LiteralString, Not[AlwaysTruthy]], Not[AlwaysTruthy]))
317- static_assert(is_assignable_to(Intersection[LiteralString, Literal[" " ]], Not[AlwaysTruthy]))
318- static_assert(not is_assignable_to(Intersection[LiteralString, Literal[" " , " a" ]], Not[AlwaysTruthy]))
319- static_assert(is_assignable_to(Intersection[LiteralString, Not[AlwaysTruthy]], Literal[" " ]))
320- static_assert(is_assignable_to(Intersection[LiteralString, Literal[" " ]], Literal[" " ]))
321- # `bool & ~AlwaysTruthy`, `bool & ~Literal[True]` -> `bool & Literal[False]`
322- static_assert(is_assignable_to(Intersection[bool , Not[AlwaysTruthy]], Literal[False ]))
323- static_assert(is_assignable_to(Intersection[bool , Not[Literal[True ]]], Literal[False ]))
324-
325- # `LiteralString & AlwaysFalsy` -> `LiteralString & Literal[""]`
326- static_assert(is_assignable_to(Intersection[LiteralString, AlwaysFalsy], AlwaysFalsy))
327- static_assert(is_assignable_to(Intersection[LiteralString, Literal[" " ]], AlwaysFalsy))
328- static_assert(not is_assignable_to(Intersection[LiteralString, Literal[" " , " a" ]], AlwaysFalsy))
329- static_assert(is_assignable_to(Intersection[LiteralString, AlwaysFalsy], Literal[" " ]))
313+ # `LiteralString & ~AlwaysTruthy` -> `Literal[""]`
314+ static_assert(is_assignable_to(Literal[" " ], Not[AlwaysTruthy]))
315+ static_assert(not is_assignable_to(Literal[" " , " a" ], Not[AlwaysTruthy]))
316+ # `LiteralString & AlwaysFalsy` -> `Literal[""]`
317+ static_assert(is_assignable_to(Literal[" " ], AlwaysFalsy))
318+ static_assert(not is_assignable_to(Literal[" " , " a" ], AlwaysFalsy))
330319# `LiteralString & ~AlwaysFalsy` -> `LiteralString & ~Literal[""]`
331- static_assert(is_assignable_to(Intersection[LiteralString, Not[AlwaysFalsy]], Not[AlwaysFalsy]))
332320static_assert(is_assignable_to(Intersection[LiteralString, Not[Literal[" " ]]], Not[AlwaysFalsy]))
333321static_assert(is_assignable_to(Intersection[LiteralString, Not[Literal[" " , " a" ]]], Not[AlwaysFalsy]))
334- # `bool & ~AlwaysFalsy`, `bool & ~Literal[False]` -> `bool & Literal[True]`
335- static_assert(is_assignable_to(Intersection[bool , Not[AlwaysFalsy]], Literal[True ]))
336- static_assert(is_assignable_to(Intersection[bool , Not[Literal[False ]]], Literal[True ]))
337- # `bool & ~AlwaysFalsy`, `bool & ~Literal[False]` -> `bool & Literal[True]`
338- static_assert(is_assignable_to(Intersection[bool , Not[AlwaysFalsy]], Literal[True ]))
339- static_assert(is_assignable_to(Intersection[bool , Not[Literal[False ]]], Literal[True ]))
340-
341- static_assert(is_assignable_to(Intersection[bool , Literal[False ] | AlwaysTruthy], Literal[False ] | AlwaysTruthy))
342- static_assert(
343- is_assignable_to(
344- Intersection[Intersection[AlwaysFalsy, Not[Literal[False ]]], bool ], Intersection[AlwaysFalsy, Not[Literal[False ]]]
345- )
346- )
322+ # `bool & ~AlwaysTruthy`, `bool & ~Literal[True]` -> `Literal[False]`
323+ static_assert(is_assignable_to(Literal[False ], Not[AlwaysTruthy]))
324+ static_assert(is_assignable_to(Literal[False ], Not[Literal[True ]]))
325+ # `bool & ~AlwaysFalsy`, `bool & ~Literal[False]` -> `Literal[True]`
326+ static_assert(is_assignable_to(Literal[True ], Not[AlwaysFalsy]))
327+ static_assert(is_assignable_to(Literal[True ], Not[Literal[False ]]))
347328```
348329
349330## General properties
0 commit comments