xref: /aosp_15_r20/external/fonttools/Tests/misc/vector_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1*e1fe3e4aSElliott Hughesimport math
2*e1fe3e4aSElliott Hughesimport pytest
3*e1fe3e4aSElliott Hughesfrom fontTools.misc.arrayTools import Vector as ArrayVector
4*e1fe3e4aSElliott Hughesfrom fontTools.misc.vector import Vector
5*e1fe3e4aSElliott Hughes
6*e1fe3e4aSElliott Hughes
7*e1fe3e4aSElliott Hughesdef test_Vector():
8*e1fe3e4aSElliott Hughes    v = Vector((100, 200))
9*e1fe3e4aSElliott Hughes    assert repr(v) == "Vector((100, 200))"
10*e1fe3e4aSElliott Hughes    assert v == Vector((100, 200))
11*e1fe3e4aSElliott Hughes    assert v == Vector([100, 200])
12*e1fe3e4aSElliott Hughes    assert v == (100, 200)
13*e1fe3e4aSElliott Hughes    assert (100, 200) == v
14*e1fe3e4aSElliott Hughes    assert v == [100, 200]
15*e1fe3e4aSElliott Hughes    assert [100, 200] == v
16*e1fe3e4aSElliott Hughes    assert v is Vector(v)
17*e1fe3e4aSElliott Hughes    assert v + 10 == (110, 210)
18*e1fe3e4aSElliott Hughes    assert 10 + v == (110, 210)
19*e1fe3e4aSElliott Hughes    assert v + Vector((1, 2)) == (101, 202)
20*e1fe3e4aSElliott Hughes    assert v - Vector((1, 2)) == (99, 198)
21*e1fe3e4aSElliott Hughes    assert v * 2 == (200, 400)
22*e1fe3e4aSElliott Hughes    assert 2 * v == (200, 400)
23*e1fe3e4aSElliott Hughes    assert v * 0.5 == (50, 100)
24*e1fe3e4aSElliott Hughes    assert v / 2 == (50, 100)
25*e1fe3e4aSElliott Hughes    assert 2 / v == (0.02, 0.01)
26*e1fe3e4aSElliott Hughes    v = Vector((3, 4))
27*e1fe3e4aSElliott Hughes    assert abs(v) == 5  # length
28*e1fe3e4aSElliott Hughes    assert v.length() == 5
29*e1fe3e4aSElliott Hughes    assert v.normalized() == Vector((0.6, 0.8))
30*e1fe3e4aSElliott Hughes    assert abs(Vector((1, 1, 1))) == math.sqrt(3)
31*e1fe3e4aSElliott Hughes    assert bool(Vector((0, 0, 1)))
32*e1fe3e4aSElliott Hughes    assert not bool(Vector((0, 0, 0)))
33*e1fe3e4aSElliott Hughes    v1 = Vector((2, 3))
34*e1fe3e4aSElliott Hughes    v2 = Vector((3, 4))
35*e1fe3e4aSElliott Hughes    assert v1.dot(v2) == 18
36*e1fe3e4aSElliott Hughes    v = Vector((2, 4))
37*e1fe3e4aSElliott Hughes    assert round(v / 3) == (1, 1)
38*e1fe3e4aSElliott Hughes    with pytest.raises(
39*e1fe3e4aSElliott Hughes        AttributeError,
40*e1fe3e4aSElliott Hughes        match="'Vector' object has no attribute 'newAttr'",
41*e1fe3e4aSElliott Hughes    ):
42*e1fe3e4aSElliott Hughes        v.newAttr = 12
43*e1fe3e4aSElliott Hughes
44*e1fe3e4aSElliott Hughes
45*e1fe3e4aSElliott Hughesdef test_deprecated():
46*e1fe3e4aSElliott Hughes    with pytest.warns(
47*e1fe3e4aSElliott Hughes        DeprecationWarning,
48*e1fe3e4aSElliott Hughes        match="fontTools.misc.arrayTools.Vector has been deprecated",
49*e1fe3e4aSElliott Hughes    ):
50*e1fe3e4aSElliott Hughes        ArrayVector((1, 2))
51*e1fe3e4aSElliott Hughes    with pytest.warns(
52*e1fe3e4aSElliott Hughes        DeprecationWarning,
53*e1fe3e4aSElliott Hughes        match="the 'keep' argument has been deprecated",
54*e1fe3e4aSElliott Hughes    ):
55*e1fe3e4aSElliott Hughes        Vector((1, 2), keep=True)
56*e1fe3e4aSElliott Hughes    v = Vector((1, 2))
57*e1fe3e4aSElliott Hughes    with pytest.warns(
58*e1fe3e4aSElliott Hughes        DeprecationWarning,
59*e1fe3e4aSElliott Hughes        match="the 'toInt' method has been deprecated",
60*e1fe3e4aSElliott Hughes    ):
61*e1fe3e4aSElliott Hughes        v.toInt()
62*e1fe3e4aSElliott Hughes    with pytest.warns(
63*e1fe3e4aSElliott Hughes        DeprecationWarning,
64*e1fe3e4aSElliott Hughes        match="the 'values' attribute has been deprecated",
65*e1fe3e4aSElliott Hughes    ):
66*e1fe3e4aSElliott Hughes        v.values
67*e1fe3e4aSElliott Hughes    with pytest.raises(
68*e1fe3e4aSElliott Hughes        AttributeError,
69*e1fe3e4aSElliott Hughes        match="the 'values' attribute has been deprecated",
70*e1fe3e4aSElliott Hughes    ):
71*e1fe3e4aSElliott Hughes        v.values = [12, 23]
72