Exemplo n.º 1
0
def test_unbound() -> None:
    class G(Generic[_T]):
        pass

    with pytest.raises(TypeError):
        is_subtype(G, str)

    with pytest.raises(TypeError):
        is_subtype(str, G)
Exemplo n.º 2
0
def test_disjoint() -> None:
    class G(Generic[_T]):
        pass

    class H(Generic[_T]):
        pass

    class P(G[int], H[str]):
        pass

    assert is_subtype(P, G[int])
    assert is_subtype(P, H[str])
Exemplo n.º 3
0
def test_generic_with_normal_base() -> None:
    class A:
        pass

    class B(Generic[_T], A):
        pass

    assert is_subtype(B[int], A)
Exemplo n.º 4
0
def test_covariance() -> None:
    class A:
        pass

    class B(A):
        pass

    class C(B):
        pass

    class G(Generic[_Tco]):
        pass

    class P(G[B]):
        pass

    assert is_subtype(P, P)
    assert is_subtype(P, G[A])
    assert is_subtype(P, G[B])

    assert not is_subtype(P, G[C])
Exemplo n.º 5
0
def test_partial_generic() -> None:
    class G(Generic[_T, _U]):
        pass

    class H(Generic[_T]):
        pass

    class A(Generic[_T], G[int, _T]):
        pass

    class B(Generic[_T], A[_T], H[int]):
        pass

    class C(B[str]):
        pass

    assert is_subtype(C, B[str])
    assert is_subtype(C, A[str])
    assert is_subtype(C, G[int, str])
    assert is_subtype(C, H[int])

    assert is_subtype(B[bool], A[bool])
    assert is_subtype(B[bool], H[int])
    assert is_subtype(B[bool], G[int, bool])
Exemplo n.º 6
0
def test_complex_variance() -> None:
    class A:
        pass

    class B(A):
        pass

    class C(B):
        pass

    class R:
        pass

    class S(R):
        pass

    class T(S):
        pass

    class G(Generic[_Tco, _Tcontra]):
        pass

    class H(Generic[_Tco]):
        pass

    class P(G[H[B], H[S]]):
        pass

    assert is_subtype(P, G[H[B], H[S]])
    assert is_subtype(P, G[H[A], H[S]])
    assert is_subtype(P, G[H[B], H[T]])
    assert is_subtype(P, G[H[A], H[T]])

    assert not is_subtype(P, G[H[C], H[S]])
    assert not is_subtype(P, G[H[B], H[R]])
    assert not is_subtype(P, G[H[C], H[R]])
Exemplo n.º 7
0
def test_identity() -> None:
    assert is_subtype(str, str)