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