4
from pyeigen import MatrixXf, RowVectorXf, VectorXf
6
from settings import TEST_PRECISION
9
class TestRowVectorXfCreate(unittest.TestCase):
10
def test_constructor_default(self):
12
self.assertEqual(len(v), 0)
14
def test_constructor_arguments(self):
16
self.assertEqual(len(v), 4)
19
v = RowVectorXf.zero(4)
20
self.assertEqual(v.x, 0)
21
self.assertEqual(v.y, 0)
22
self.assertEqual(v.z, 0)
23
self.assertEqual(v.w, 0)
26
v = RowVectorXf.ones(4)
27
self.assertEqual(v.x, 1)
28
self.assertEqual(v.y, 1)
29
self.assertEqual(v.z, 1)
30
self.assertEqual(v.w, 1)
32
def test_constant(self):
33
v = RowVectorXf.constant(4, 2)
34
self.assertEqual(v.x, 2)
35
self.assertEqual(v.y, 2)
36
self.assertEqual(v.z, 2)
37
self.assertEqual(v.w, 2)
39
def test_random(self):
40
v = RowVectorXf.random(4)
41
self.assert_(v.x > -1)
43
self.assert_(v.y > -1)
45
self.assert_(v.z > -1)
47
self.assert_(v.w > -1)
50
class TestRowVectorXf(unittest.TestCase):
52
self.v1 = RowVectorXf(4)
53
self.v1.set(-1, -2, -3, -4)
54
self.v2 = RowVectorXf(4)
55
self.v2.set(-5, -6, -7, -8)
58
self.v1.set(1, 2, 3, 4)
59
self.assertEqual(self.v1.x, 1)
60
self.assertEqual(self.v1.y, 2)
61
self.assertEqual(self.v1.z, 3)
62
self.assertEqual(self.v1.w, 4)
64
def test_set_zero(self):
66
self.assertEqual(self.v1.x, 0)
67
self.assertEqual(self.v1.y, 0)
68
self.assertEqual(self.v1.z, 0)
69
self.assertEqual(self.v1.w, 0)
71
def test_set_ones(self):
73
self.assertEqual(self.v1.x, 1)
74
self.assertEqual(self.v1.y, 1)
75
self.assertEqual(self.v1.z, 1)
76
self.assertEqual(self.v1.w, 1)
78
def test_set_constant(self):
79
self.v1.set_constant(2)
80
self.assertEqual(self.v1.x, 2)
81
self.assertEqual(self.v1.y, 2)
82
self.assertEqual(self.v1.z, 2)
83
self.assertEqual(self.v1.w, 2)
85
def test_set_random(self):
87
self.assert_(self.v1.x > -1)
88
self.assert_(self.v1.x < 1)
89
self.assert_(self.v1.y > -1)
90
self.assert_(self.v1.y < 1)
91
self.assert_(self.v1.z > -1)
92
self.assert_(self.v1.z < 1)
93
self.assert_(self.v1.w > -1)
94
self.assert_(self.v1.w < 1)
99
self.assertAlmostEqual(v.norm, 1.0, places=TEST_PRECISION)
102
self.assertAlmostEqual(v.norm, 1.0, places=TEST_PRECISION)
105
self.assertAlmostEqual(v.norm, 1.0, places=TEST_PRECISION)
108
self.assertAlmostEqual(v.norm, 1.0, places=TEST_PRECISION)
111
self.assertAlmostEqual(v.norm, math.sqrt(4), places=TEST_PRECISION)
113
def test_norm_sq(self):
116
self.assertAlmostEqual(v.norm_sq, 1.0, places=TEST_PRECISION)
119
self.assertAlmostEqual(v.norm_sq, 1.0, places=TEST_PRECISION)
122
self.assertAlmostEqual(v.norm_sq, 1.0, places=TEST_PRECISION)
125
self.assertAlmostEqual(v.norm_sq, 1.0, places=TEST_PRECISION)
128
self.assertAlmostEqual(v.norm_sq, 4, places=TEST_PRECISION)
130
def test_normalized(self):
131
self.assertAlmostEqual(self.v1.normalized.norm, 1.0, places=TEST_PRECISION)
132
self.assertAlmostEqual(self.v2.normalized.norm, 1.0, places=TEST_PRECISION)
134
def test_transpose(self):
135
rv1 = self.v1.transpose
136
self.assertEqual(self.v1.x, rv1.x)
137
self.assertEqual(self.v1.y, rv1.y)
138
self.assertEqual(self.v1.z, rv1.z)
139
self.assertEqual(self.v1.w, rv1.w)
143
self.v1.transpose = v
144
self.assertEqual(self.v1.x, 1)
145
self.assertEqual(self.v1.y, 2)
146
self.assertEqual(self.v1.z, 3)
147
self.assertEqual(self.v1.w, 4)
149
def test_normalize(self):
152
self.assertAlmostEqual(self.v1.norm, 1.0, places=TEST_PRECISION)
153
self.assertAlmostEqual(self.v2.norm, 1.0, places=TEST_PRECISION)
155
def test_is_approx(self):
158
self.assert_(self.v1.is_approx(self.v2, 1))
160
self.v1.set(0, 0, 0, 1)
161
self.v2.set(0, 0, 0, 1.5)
162
self.assert_(self.v1.is_approx(self.v2, 1))
163
self.assertFalse(self.v1.is_approx(self.v2, 0.1))
166
v3 = self.v1 + self.v2
167
self.assertEqual(v3.x, -6)
168
self.assertEqual(v3.y, -8)
169
self.assertEqual(v3.z, -10)
170
self.assertEqual(v3.w, -12)
173
v3 = self.v1 - self.v2
174
self.assertEqual(v3.x, 4)
175
self.assertEqual(v3.y, 4)
176
self.assertEqual(v3.z, 4)
177
self.assertEqual(v3.w, 4)
179
def test_mul_scalar(self):
181
self.assertEqual(v3.x, -2)
182
self.assertEqual(v3.y, -4)
183
self.assertEqual(v3.z, -6)
184
self.assertEqual(v3.w, -8)
186
def test_mul_matrix(self):
193
self.assertAlmostEqual(v3.x, -90, places=TEST_PRECISION)
194
self.assertAlmostEqual(v3.y, -100, places=TEST_PRECISION)
195
self.assertAlmostEqual(v3.z, -110, places=TEST_PRECISION)
196
self.assertAlmostEqual(v3.w, -120, places=TEST_PRECISION)
200
self.assertEqual(v3.x, -0.5)
201
self.assertEqual(v3.y, -1)
202
self.assertEqual(v3.z, -1.5)
203
self.assertEqual(v3.w, -2)
205
def test_negative(self):
207
self.assertEqual(v3.x, 1)
208
self.assertEqual(v3.y, 2)
209
self.assertEqual(v3.z, 3)
210
self.assertEqual(v3.w, 4)
212
self.assertEqual(v4.x, -1)
213
self.assertEqual(v4.y, -2)
214
self.assertEqual(v4.z, -3)
215
self.assertEqual(v4.w, -4)
217
def test_inplace_add(self):
219
self.assertEqual(self.v1.x, -6)
220
self.assertEqual(self.v1.y, -8)
221
self.assertEqual(self.v1.z, -10)
222
self.assertEqual(self.v1.w, -12)
224
def test_inplace_sub(self):
226
self.assertEqual(self.v1.x, 4)
227
self.assertEqual(self.v1.y, 4)
228
self.assertEqual(self.v1.z, 4)
229
self.assertEqual(self.v1.w, 4)
231
def test_inplace_mul_scalar(self):
233
self.assertEqual(self.v1.x, -2)
234
self.assertEqual(self.v1.y, -4)
235
self.assertEqual(self.v1.z, -6)
236
self.assertEqual(self.v1.w, -8)
238
def test_inplace_mul_matrix(self):
245
self.assertAlmostEqual(self.v1.x, -90, places=TEST_PRECISION)
246
self.assertAlmostEqual(self.v1.y, -100, places=TEST_PRECISION)
247
self.assertAlmostEqual(self.v1.z, -110, places=TEST_PRECISION)
248
self.assertAlmostEqual(self.v1.w, -120, places=TEST_PRECISION)
250
def test_inplace_div(self):
252
self.assertEqual(self.v1.x, -0.5)
253
self.assertEqual(self.v1.y, -1)
254
self.assertEqual(self.v1.z, -1.5)
255
self.assertEqual(self.v1.w, -2)
258
self.assertEqual(len(self.v1), 4)
260
def test_get_item(self):
261
self.assertEqual(self.v1[0], self.v1.x)
262
self.assertEqual(self.v1[1], self.v1.y)
263
self.assertEqual(self.v1[2], self.v1.z)
264
self.assertEqual(self.v1[3], self.v1.w)
266
def test_get_slice(self):
267
x, y, z, w = self.v1[:]
268
self.assertEqual(x, self.v1.x)
269
self.assertEqual(y, self.v1.y)
270
self.assertEqual(z, self.v1.z)
271
self.assertEqual(w, self.v1.w)
273
def test_set_item(self):
278
self.assertEqual(self.v1.x, 1)
279
self.assertEqual(self.v1.y, 2)
280
self.assertEqual(self.v1.z, 3)
281
self.assertEqual(self.v1.w, 4)
282
self.assertRaises(IndexError, self.v1.__setitem__, 4, 999.99)
283
self.assertRaises(IndexError, self.v1.__setitem__, 100, 999.99)
284
self.assertRaises(IndexError, self.v1.__setitem__, -5, 999.99)
285
self.assertRaises(IndexError, self.v1.__setitem__, -100, 999.99)
287
def test_set_slice(self):
288
self.v1[:] = 1, 2, 3, 4
289
self.assertEqual(self.v1.x, 1)
290
self.assertEqual(self.v1.y, 2)
291
self.assertEqual(self.v1.z, 3)
292
self.assertEqual(self.v1.w, 4)
295
self.assert_(self.v1 == self.v1)
296
self.assertFalse(self.v1 == self.v2)
299
self.assertFalse(self.v1 != self.v1)
300
self.assert_(self.v1 != self.v2)
303
for i, value in enumerate(self.v1):
304
self.assertEqual(value, self.v1[i])
306
if __name__ == '__main__':