36 lines
952 B
Python
36 lines
952 B
Python
from vector2d_v5 import Vector2d
|
|
from typing import SupportsComplex, SupportsAbs, TYPE_CHECKING
|
|
|
|
import pytest
|
|
|
|
|
|
def test_SupportsComplex_subclass() -> None:
|
|
assert issubclass(Vector2d, SupportsComplex)
|
|
|
|
def test_SupportsComplex_isinstance() -> None:
|
|
v = Vector2d(3, 4)
|
|
assert isinstance(v, SupportsComplex)
|
|
c = complex(v)
|
|
assert c == 3 + 4j
|
|
|
|
def test_SupportsAbs_subclass() -> None:
|
|
assert issubclass(Vector2d, SupportsAbs)
|
|
|
|
def test_SupportsAbs_isinstance() -> None:
|
|
v = Vector2d(3, 4)
|
|
assert isinstance(v, SupportsAbs)
|
|
r = abs(v)
|
|
assert r == 5.0
|
|
if TYPE_CHECKING:
|
|
reveal_type(r) # Revealed type is 'builtins.float*'
|
|
|
|
def magnitude(v: SupportsAbs) -> float:
|
|
return abs(v)
|
|
|
|
def test_SupportsAbs_Vector2d_argument() -> None:
|
|
assert 5.0 == magnitude(Vector2d(3, 4))
|
|
|
|
def test_SupportsAbs_object_argument() -> None:
|
|
with pytest.raises(TypeError):
|
|
assert 5.0 == magnitude(object())
|