3 def test___init___getX_getY_getZ():
6 v = Vector3DReal(-1, 2, 3.4)
12 assert v2.getX() == -1
14 assert v2.getZ() == 3.4
16 with pytest.raises(TypeError):
19 v = Vector3DReal([-10, 20.5, 30])
20 assert v.getX() == -10
21 assert v.getY() == 20.5
24 with pytest.raises(TypeError):
25 Vector3DReal([0, 0, 0], 0)
27 with pytest.raises(TypeError):
30 with pytest.raises(TypeError):
31 Vector3DReal([0, 0, 0, 0])
35 v = Vector3DReal(1, 2, 3)
36 v2 = Vector3DReal(-1, 1, 2)
40 d == v.getX() * v2.getX() + v.getY() * v2.getY() + v.getZ() * v2.getZ()
44 v = Vector3DReal(1, 2, 3)
45 v2 = Vector3DReal(-1, 1, 2)
48 assert c == -v2.cross(v)
54 def test_getLengthSquared():
55 v = Vector3DReal(1, 2, 3)
56 n = Vector3DReal(0, 0, 0)
58 assert v.getLengthSquared() == v.dot(v)
59 assert n.getLengthSquared() == 0
65 v = Vector3DReal(1, 2, 3)
66 n = Vector3DReal(0, 0, 0)
68 assert v.getLength() == math.sqrt(v.getLengthSquared())
69 assert n.getLength() == 0
72 def test_getNormalized():
75 v = Vector3DReal(1, 2, 3)
76 n = Vector3DReal(0, 0, 0)
78 assert v.getNormalized() == v / v.getLength()
79 with pytest.raises(ValueError):
86 v = Vector3DReal(1, 2, 3)
87 n = Vector3DReal(0, 0, 0)
90 assert v.getLengthSquared() == 1
92 with pytest.raises(ValueError):
96 def test_getProjectionOnto():
99 v = Vector3DReal(1, 2.5, 3)
100 v2 = Vector3DReal(-1, 1, 1.5)
101 n = Vector3DReal(0, 0, 0)
103 p = v.getProjectionOnto(v2)
104 assert p == v2.getNormalized() * (v.dot(v2.getNormalized()))
105 assert n.getProjectionOnto(v2).getLength() == 0
107 with pytest.raises(ValueError):
108 v.getProjectionOnto(n)
111 def test_getPerpendicularTo():
114 v = Vector3DReal(1, 2.5, 3)
115 v2 = Vector3DReal(-1, 1, 1.5)
116 n = Vector3DReal(0, 0, 0)
118 perp = v.getPerpendicularTo(v2)
119 p = v.getProjectionOnto(v2)
121 assert n.getPerpendicularTo(v2).getLength() == 0
123 with pytest.raises(ValueError):
124 v.getPerpendicularTo(n)
127 def test_getRotatedAroundNormalizedAxis():
128 x = Vector3DReal(1, 0, 0)
129 z = Vector3DReal(0, 0, 1)
134 r = x.getRotatedAroundNormalizedAxis(z, math.pi)
135 assert numpy.isclose(r.getX(), -1)
136 assert numpy.isclose(r.getY(), 0)
137 assert numpy.isclose(r.getZ(), 0)
139 r = x.getRotatedAroundNormalizedAxis(z, math.pi / 2)
140 assert numpy.isclose(r.getX(), 0)
141 assert numpy.isclose(r.getY(), 1)
142 assert numpy.isclose(r.getZ(), 0)
145 def test_rotateAroundNormalizedAxis():
148 x = Vector3DReal(1, 0, 0)
149 z = Vector3DReal(0, 0, 1)
150 r = x.getRotatedAroundNormalizedAxis(z, math.pi / 2)
152 x.rotateAroundNormalizedAxis(z, math.pi / 2)
157 v1 = Vector3DReal(-1, 2.5, 3.0)
158 v2 = Vector3DReal(-1.2, 2.5, 3.0)
160 assert v1.isClose(v1)
161 assert v2.isClose(v2)
162 assert not v1.isClose(v2)
163 assert not v2.isClose(v1)
165 v1 = Vector3DReal(1, 1e10, 1e-7)
166 v2 = Vector3DReal(1, 1.00001e10, 1e-8)
167 assert not v1.isClose(v2)
168 assert not v2.isClose(v1)
170 v1 = Vector3DReal(1, 1e10, 1e-8)
171 v2 = Vector3DReal(1, 1.00001e10, 1e-9)
172 assert v1.isClose(v2)
173 assert v2.isClose(v1)
175 v1 = Vector3DReal(1, 1e10, 1e-8)
176 v2 = Vector3DReal(1, 1.0001e10, 1e-9)
177 assert not v1.isClose(v2)
178 assert not v2.isClose(v1)
180 assert v1.isClose(v2, relativeTolerance = 1e-4)
181 assert v2.isClose(v1, relativeTolerance = 1e-4)
183 assert v1.isClose(v2, absoluteTolerance = 1e6)
184 assert v2.isClose(v1, absoluteTolerance = 1e6)
188 v = Vector3DReal(-1, 2.5, 3.0)
191 assert v == Vector3DReal(-1.0, 2.5, 3)
192 assert v != Vector3DReal(0, 0, 0)
195 with pytest.raises(TypeError):
200 v = Vector3DReal(-1, 2.5, 3.0)
203 assert not v != Vector3DReal(-1.0, 2.5, 3)
204 assert v != Vector3DReal(0, 0, 0)
208 v = Vector3DReal(-1, 2.5, 3.0)
209 v2 = Vector3DReal(5, 6.7, 8)
210 assert v + v2 == Vector3DReal(4, 9.2, 11)
213 with pytest.raises(TypeError):
218 v = Vector3DReal(-1, 2.5, 3.0)
219 v2 = Vector3DReal(5, 6.7, 8)
221 assert v - v2 == Vector3DReal(-6, -4.2, -5)
224 with pytest.raises(TypeError):
229 v = Vector3DReal(-1, 2.5, 3.0)
231 assert v * 3 == Vector3DReal(-3, 7.5, 9.0)
234 with pytest.raises(TypeError):
238 def test___div_____truediv__():
239 v = Vector3DReal(-1, 2.5, 3.0)
241 assert v / 2 == Vector3DReal(-0.5, 1.25, 1.5)
242 assert v / 2.0 == Vector3DReal(-0.5, 1.25, 1.5)
243 assert Vector3DReal(1, 2, 3) / 2 == Vector3DReal(0.5, 1.0, 1.5)
244 assert Vector3DReal(1, 2, 3) / 2.0 == Vector3DReal(0.5, 1.0, 1.5)
245 assert Vector3DReal(1.0, 2, 3) / 2 == Vector3DReal(0.5, 1.0, 1.5)
246 assert Vector3DReal(1.0, 2, 3) / 2.0 == Vector3DReal(0.5, 1.0, 1.5)
247 assert Vector3DReal(1.0, 2.0, 3.0) / 2 == Vector3DReal(0.5, 1.0, 1.5)
248 assert Vector3DReal(1.0, 2.0, 3.0) / 2.0 == Vector3DReal(0.5, 1.0, 1.5)
251 with pytest.raises(TypeError):
254 with pytest.raises(ValueError):
259 v = Vector3DReal(-1, 2.5, 3.0)
261 assert -v == Vector3DReal(-v.getX(), -v.getY(), -v.getZ())
264 def test___getitem__():
265 v = Vector3DReal(-1, 2.5, 3.0)
267 assert v[0] == v.getX()
268 assert v[1] == v.getY()
269 assert v[2] == v.getZ()
272 with pytest.raises(KeyError):
277 v = Vector3DReal(-1, 2.5, 3.0)
279 assert isinstance(v.__repr__(), str)
282 def test__assertIsSameType():
283 v = Vector3DReal(-1, 2.5, 3.0)
285 v._assertIsSameType(v)
288 with pytest.raises(TypeError):
289 v._assertIsSameType(2)