OpenMPCD
test_Vector3DReal.py
1 from MPCDAnalysis.Vector3DReal import Vector3DReal
2 
3 def test___init___getX_getY_getZ():
4  import pytest
5 
6  v = Vector3DReal(-1, 2, 3.4)
7  assert v.getX() == -1
8  assert v.getY() == 2
9  assert v.getZ() == 3.4
10 
11  v2 = Vector3DReal(v)
12  assert v2.getX() == -1
13  assert v2.getY() == 2
14  assert v2.getZ() == 3.4
15 
16  with pytest.raises(TypeError):
17  Vector3DReal(v, 0)
18 
19  v = Vector3DReal([-10, 20.5, 30])
20  assert v.getX() == -10
21  assert v.getY() == 20.5
22  assert v.getZ() == 30
23 
24  with pytest.raises(TypeError):
25  Vector3DReal([0, 0, 0], 0)
26 
27  with pytest.raises(TypeError):
28  Vector3DReal([0, 0])
29 
30  with pytest.raises(TypeError):
31  Vector3DReal([0, 0, 0, 0])
32 
33 
34 def test_dot():
35  v = Vector3DReal(1, 2, 3)
36  v2 = Vector3DReal(-1, 1, 2)
37  d = v.dot(v2)
38  assert d == v2.dot(v)
39  assert \
40  d == v.getX() * v2.getX() + v.getY() * v2.getY() + v.getZ() * v2.getZ()
41 
42 
43 def test_cross():
44  v = Vector3DReal(1, 2, 3)
45  v2 = Vector3DReal(-1, 1, 2)
46 
47  c = v.cross(v2)
48  assert c == -v2.cross(v)
49  assert c.getX() == 1
50  assert c.getY() == -5
51  assert c.getZ() == 3
52 
53 
54 def test_getLengthSquared():
55  v = Vector3DReal(1, 2, 3)
56  n = Vector3DReal(0, 0, 0)
57 
58  assert v.getLengthSquared() == v.dot(v)
59  assert n.getLengthSquared() == 0
60 
61 
62 def test_getLength():
63  import math
64 
65  v = Vector3DReal(1, 2, 3)
66  n = Vector3DReal(0, 0, 0)
67 
68  assert v.getLength() == math.sqrt(v.getLengthSquared())
69  assert n.getLength() == 0
70 
71 
72 def test_getNormalized():
73  import pytest
74 
75  v = Vector3DReal(1, 2, 3)
76  n = Vector3DReal(0, 0, 0)
77 
78  assert v.getNormalized() == v / v.getLength()
79  with pytest.raises(ValueError):
80  n.getNormalized()
81 
82 
83 def test_normalize():
84  import pytest
85 
86  v = Vector3DReal(1, 2, 3)
87  n = Vector3DReal(0, 0, 0)
88 
89  v.normalize()
90  assert v.getLengthSquared() == 1
91 
92  with pytest.raises(ValueError):
93  n.normalize()
94 
95 
96 def test_getProjectionOnto():
97  import pytest
98 
99  v = Vector3DReal(1, 2.5, 3)
100  v2 = Vector3DReal(-1, 1, 1.5)
101  n = Vector3DReal(0, 0, 0)
102 
103  p = v.getProjectionOnto(v2)
104  assert p == v2.getNormalized() * (v.dot(v2.getNormalized()))
105  assert n.getProjectionOnto(v2).getLength() == 0
106 
107  with pytest.raises(ValueError):
108  v.getProjectionOnto(n)
109 
110 
111 def test_getPerpendicularTo():
112  import pytest
113 
114  v = Vector3DReal(1, 2.5, 3)
115  v2 = Vector3DReal(-1, 1, 1.5)
116  n = Vector3DReal(0, 0, 0)
117 
118  perp = v.getPerpendicularTo(v2)
119  p = v.getProjectionOnto(v2)
120  assert perp == v - p
121  assert n.getPerpendicularTo(v2).getLength() == 0
122 
123  with pytest.raises(ValueError):
124  v.getPerpendicularTo(n)
125 
126 
127 def test_getRotatedAroundNormalizedAxis():
128  x = Vector3DReal(1, 0, 0)
129  z = Vector3DReal(0, 0, 1)
130 
131  import numpy
132  import math
133 
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)
138 
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)
143 
144 
145 def test_rotateAroundNormalizedAxis():
146  import math
147 
148  x = Vector3DReal(1, 0, 0)
149  z = Vector3DReal(0, 0, 1)
150  r = x.getRotatedAroundNormalizedAxis(z, math.pi / 2)
151 
152  x.rotateAroundNormalizedAxis(z, math.pi / 2)
153  assert x == r
154 
155 
156 def test_isClose():
157  v1 = Vector3DReal(-1, 2.5, 3.0)
158  v2 = Vector3DReal(-1.2, 2.5, 3.0)
159 
160  assert v1.isClose(v1)
161  assert v2.isClose(v2)
162  assert not v1.isClose(v2)
163  assert not v2.isClose(v1)
164 
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)
169 
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)
174 
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)
179 
180  assert v1.isClose(v2, relativeTolerance = 1e-4)
181  assert v2.isClose(v1, relativeTolerance = 1e-4)
182 
183  assert v1.isClose(v2, absoluteTolerance = 1e6)
184  assert v2.isClose(v1, absoluteTolerance = 1e6)
185 
186 
187 def test___eq__():
188  v = Vector3DReal(-1, 2.5, 3.0)
189 
190  assert v == v
191  assert v == Vector3DReal(-1.0, 2.5, 3)
192  assert v != Vector3DReal(0, 0, 0)
193 
194  import pytest
195  with pytest.raises(TypeError):
196  v == (-1, 2.5, 3.0)
197 
198 
199 def test___ne__():
200  v = Vector3DReal(-1, 2.5, 3.0)
201 
202  assert not v != v
203  assert not v != Vector3DReal(-1.0, 2.5, 3)
204  assert v != Vector3DReal(0, 0, 0)
205 
206 
207 def test___add__():
208  v = Vector3DReal(-1, 2.5, 3.0)
209  v2 = Vector3DReal(5, 6.7, 8)
210  assert v + v2 == Vector3DReal(4, 9.2, 11)
211 
212  import pytest
213  with pytest.raises(TypeError):
214  v + (-1, 2.5, 3.0)
215 
216 
217 def test___sub__():
218  v = Vector3DReal(-1, 2.5, 3.0)
219  v2 = Vector3DReal(5, 6.7, 8)
220 
221  assert v - v2 == Vector3DReal(-6, -4.2, -5)
222 
223  import pytest
224  with pytest.raises(TypeError):
225  v - (-1, 2.5, 3.0)
226 
227 
228 def test___mul__():
229  v = Vector3DReal(-1, 2.5, 3.0)
230 
231  assert v * 3 == Vector3DReal(-3, 7.5, 9.0)
232 
233  import pytest
234  with pytest.raises(TypeError):
235  v * v
236 
237 
238 def test___div_____truediv__():
239  v = Vector3DReal(-1, 2.5, 3.0)
240 
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)
249 
250  import pytest
251  with pytest.raises(TypeError):
252  v / v
253 
254  with pytest.raises(ValueError):
255  v / 0
256 
257 
258 def test___neg__():
259  v = Vector3DReal(-1, 2.5, 3.0)
260 
261  assert -v == Vector3DReal(-v.getX(), -v.getY(), -v.getZ())
262 
263 
264 def test___getitem__():
265  v = Vector3DReal(-1, 2.5, 3.0)
266 
267  assert v[0] == v.getX()
268  assert v[1] == v.getY()
269  assert v[2] == v.getZ()
270 
271  import pytest
272  with pytest.raises(KeyError):
273  v[3]
274 
275 
276 def test___repr__():
277  v = Vector3DReal(-1, 2.5, 3.0)
278 
279  assert isinstance(v.__repr__(), str)
280 
281 
282 def test__assertIsSameType():
283  v = Vector3DReal(-1, 2.5, 3.0)
284 
285  v._assertIsSameType(v)
286 
287  import pytest
288  with pytest.raises(TypeError):
289  v._assertIsSameType(2)
MPCDAnalysis.Vector3DReal
Definition: Vector3DReal.py:1