~jfpacker/pyeigen/bugfixes-0.1

« back to all changes in this revision

Viewing changes to test/vector4f.py

  • Committer: Jussi Lepistö
  • Date: 2010-03-21 22:43:37 UTC
  • Revision ID: jussi.lepisto@iki.fi-20100321224337-oahotm631wkye0f6
- ==, != operators
- You can now give either none or all arguments to constructors, and set() only accepts all arguments
- Vector2f fixes (code review for other classes to be done)
- Vector transpose
- Basic unit tests for all classes

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import math
 
2
import unittest
 
3
 
1
4
from pyeigen import Vector4f
2
5
 
3
 
v1 = Vector4f(1, 2, 3, 4)
4
 
v2 = Vector4f(5, 6, 7, 8)
5
 
print v1, v2
6
 
print
 
6
TEST_PRECISION = 6
 
7
 
 
8
class TestVector4fCreate(unittest.TestCase):
 
9
    def test_constructor_default(self):
 
10
        v = Vector4f()
 
11
        self.assertEqual(v.x, 0)
 
12
        self.assertEqual(v.y, 0)
 
13
        self.assertEqual(v.z, 0)
 
14
        self.assertEqual(v.w, 0)
 
15
 
 
16
    def test_constructor_arguments(self):
 
17
        v = Vector4f(1, 2, 3, 4)
 
18
        self.assertEqual(v.x, 1)
 
19
        self.assertEqual(v.y, 2)
 
20
        self.assertEqual(v.z, 3)
 
21
        self.assertEqual(v.w, 4)
 
22
 
 
23
    def test_zero(self):
 
24
        v = Vector4f.zero()
 
25
        self.assertEqual(v.x, 0)
 
26
        self.assertEqual(v.y, 0)
 
27
        self.assertEqual(v.z, 0)
 
28
        self.assertEqual(v.w, 0)
 
29
 
 
30
    def test_ones(self):
 
31
        v = Vector4f.ones()
 
32
        self.assertEqual(v.x, 1)
 
33
        self.assertEqual(v.y, 1)
 
34
        self.assertEqual(v.z, 1)
 
35
        self.assertEqual(v.w, 1)
 
36
 
 
37
    def test_constant(self):
 
38
        v = Vector4f.constant(2)
 
39
        self.assertEqual(v.x, 2)
 
40
        self.assertEqual(v.y, 2)
 
41
        self.assertEqual(v.z, 2)
 
42
        self.assertEqual(v.w, 2)
 
43
 
 
44
    def test_random(self):
 
45
        v = Vector4f.random()
 
46
        self.assert_(v.x > -1)
 
47
        self.assert_(v.x < 1)
 
48
        self.assert_(v.y > -1)
 
49
        self.assert_(v.y < 1)
 
50
        self.assert_(v.z > -1)
 
51
        self.assert_(v.z < 1)
 
52
        self.assert_(v.w > -1)
 
53
        self.assert_(v.w < 1)
 
54
 
 
55
    def test_unit_x(self):
 
56
        v = Vector4f.unit_x()
 
57
        self.assertEqual(v.x, 1)
 
58
        self.assertEqual(v.y, 0)
 
59
        self.assertEqual(v.z, 0)
 
60
        self.assertEqual(v.w, 0)
 
61
 
 
62
    def test_unit_y(self):
 
63
        v = Vector4f.unit_y()
 
64
        self.assertEqual(v.x, 0)
 
65
        self.assertEqual(v.y, 1)
 
66
        self.assertEqual(v.z, 0)
 
67
        self.assertEqual(v.w, 0)
 
68
 
 
69
    def test_unit_z(self):
 
70
        v = Vector4f.unit_z()
 
71
        self.assertEqual(v.x, 0)
 
72
        self.assertEqual(v.y, 0)
 
73
        self.assertEqual(v.z, 1)
 
74
        self.assertEqual(v.w, 0)
 
75
 
 
76
    def test_unit_w(self):
 
77
        v = Vector4f.unit_w()
 
78
        self.assertEqual(v.x, 0)
 
79
        self.assertEqual(v.y, 0)
 
80
        self.assertEqual(v.z, 0)
 
81
        self.assertEqual(v.w, 1)
 
82
 
 
83
class TestVector4f(unittest.TestCase):
 
84
    def setUp(self):
 
85
        self.v1 = Vector4f(-1, -2, -3, -4)
 
86
        self.v2 = Vector4f(-5, -6, -7, -8)
 
87
 
 
88
    def test_set(self):
 
89
        self.v1.set(1, 2, 3, 4)
 
90
        self.assertEqual(self.v1.x, 1)
 
91
        self.assertEqual(self.v1.y, 2)
 
92
        self.assertEqual(self.v1.z, 3)
 
93
        self.assertEqual(self.v1.w, 4)
 
94
    
 
95
    def test_set_zero(self):
 
96
        self.v1.set_zero()
 
97
        self.assertEqual(self.v1.x, 0)
 
98
        self.assertEqual(self.v1.y, 0)
 
99
        self.assertEqual(self.v1.z, 0)
 
100
        self.assertEqual(self.v1.w, 0)
 
101
    
 
102
    def test_set_ones(self):
 
103
        self.v1.set_ones()
 
104
        self.assertEqual(self.v1.x, 1)
 
105
        self.assertEqual(self.v1.y, 1)
 
106
        self.assertEqual(self.v1.z, 1)
 
107
        self.assertEqual(self.v1.w, 1)
 
108
    
 
109
    def test_set_constant(self):
 
110
        self.v1.set_constant(2)
 
111
        self.assertEqual(self.v1.x, 2)
 
112
        self.assertEqual(self.v1.y, 2)
 
113
        self.assertEqual(self.v1.z, 2)
 
114
        self.assertEqual(self.v1.w, 2)
 
115
    
 
116
    def test_set_random(self):
 
117
        self.v1.set_random()
 
118
        self.assert_(self.v1.x > -1)
 
119
        self.assert_(self.v1.x < 1)
 
120
        self.assert_(self.v1.y > -1)
 
121
        self.assert_(self.v1.y < 1)
 
122
        self.assert_(self.v1.z > -1)
 
123
        self.assert_(self.v1.z < 1)
 
124
        self.assert_(self.v1.w > -1)
 
125
        self.assert_(self.v1.w < 1)
 
126
 
 
127
    def test_norm(self):
 
128
        v = Vector4f(1, 0, 0, 0)
 
129
        self.assertAlmostEqual(v.norm, 1.0, TEST_PRECISION)
 
130
        v = Vector4f(0, 1, 0, 0)
 
131
        self.assertAlmostEqual(v.norm, 1.0, TEST_PRECISION)
 
132
        v = Vector4f(0, 0, 1, 0)
 
133
        self.assertAlmostEqual(v.norm, 1.0, TEST_PRECISION)
 
134
        v = Vector4f(0, 0, 0, 1)
 
135
        self.assertAlmostEqual(v.norm, 1.0, TEST_PRECISION)
 
136
        v = Vector4f(1, 1, 1, 1)
 
137
        self.assertAlmostEqual(v.norm, math.sqrt(4), TEST_PRECISION)
 
138
 
 
139
    def test_norm_sq(self):
 
140
        v = Vector4f(1, 0, 0, 0)
 
141
        self.assertAlmostEqual(v.norm_sq, 1.0, TEST_PRECISION)
 
142
        v = Vector4f(0, 1, 0, 0)
 
143
        self.assertAlmostEqual(v.norm_sq, 1.0, TEST_PRECISION)
 
144
        v = Vector4f(0, 0, 1, 0)
 
145
        self.assertAlmostEqual(v.norm_sq, 1.0, TEST_PRECISION)
 
146
        v = Vector4f(0, 0, 0, 1)
 
147
        self.assertAlmostEqual(v.norm_sq, 1.0, TEST_PRECISION)
 
148
        v = Vector4f(1, 1, 1, 1)
 
149
        self.assertAlmostEqual(v.norm_sq, 4, TEST_PRECISION)
 
150
 
 
151
    def test_dot(self):
 
152
        v1 = Vector4f(0, 0, 0, 0)
 
153
        v2 = Vector4f(1, 1, 1, 1)
 
154
        self.assertEqual(v1.dot(v1), 0)
 
155
        self.assertEqual(v1.dot(v2), 0)
 
156
        self.assertEqual(v2.dot(v2), 4)
 
157
 
 
158
    def test_normalized(self):
 
159
        self.assertAlmostEqual(self.v1.normalized.norm, 1.0, TEST_PRECISION)
 
160
        self.assertAlmostEqual(self.v2.normalized.norm, 1.0, TEST_PRECISION)
 
161
 
 
162
    def test_transpose(self):
 
163
        rv1 = self.v1.transpose
 
164
        self.assertEqual(self.v1.x, rv1.x)
 
165
        self.assertEqual(self.v1.y, rv1.y)
 
166
        self.assertEqual(self.v1.z, rv1.z)
 
167
        self.assertEqual(self.v1.w, rv1.w)
 
168
 
 
169
    def test_normalize(self):
 
170
        self.v1.normalize()
 
171
        self.v2.normalize()
 
172
        self.assertAlmostEqual(self.v1.norm, 1.0, TEST_PRECISION)
 
173
        self.assertAlmostEqual(self.v2.norm, 1.0, TEST_PRECISION)
 
174
 
 
175
    def test_add(self):
 
176
        v3 = self.v1 + self.v2
 
177
        self.assertEqual(v3.x, -6)
 
178
        self.assertEqual(v3.y, -8)
 
179
        self.assertEqual(v3.z, -10)
 
180
        self.assertEqual(v3.w, -12)
 
181
 
 
182
    def test_sub(self):
 
183
        v3 = self.v1 - self.v2
 
184
        self.assertEqual(v3.x, 4)
 
185
        self.assertEqual(v3.y, 4)
 
186
        self.assertEqual(v3.z, 4)
 
187
        self.assertEqual(v3.w, 4)
 
188
 
 
189
    def test_mul(self):
 
190
        v3 = self.v1 * 2
 
191
        self.assertEqual(v3.x, -2)
 
192
        self.assertEqual(v3.y, -4)
 
193
        self.assertEqual(v3.z, -6)
 
194
        self.assertEqual(v3.w, -8)
 
195
 
 
196
    def test_div(self):
 
197
        v3 = self.v1 / 2
 
198
        self.assertEqual(v3.x, -0.5)
 
199
        self.assertEqual(v3.y, -1)
 
200
        self.assertEqual(v3.z, -1.5)
 
201
        self.assertEqual(v3.w, -2)
 
202
 
 
203
    def test_negative(self):
 
204
        v3 = -self.v1
 
205
        self.assertEqual(v3.x, 1)
 
206
        self.assertEqual(v3.y, 2)
 
207
        self.assertEqual(v3.z, 3)
 
208
        self.assertEqual(v3.w, 4)
 
209
        v4 = -v3
 
210
        self.assertEqual(v4.x, -1)
 
211
        self.assertEqual(v4.y, -2)
 
212
        self.assertEqual(v4.z, -3)
 
213
        self.assertEqual(v4.w, -4)
 
214
 
 
215
    def test_inplace_add(self):
 
216
        self.v1 += self.v2
 
217
        self.assertEqual(self.v1.x, -6)
 
218
        self.assertEqual(self.v1.y, -8)
 
219
        self.assertEqual(self.v1.z, -10)
 
220
        self.assertEqual(self.v1.w, -12)
 
221
 
 
222
    def test_inplace_sub(self):
 
223
        self.v1 -= self.v2
 
224
        self.assertEqual(self.v1.x, 4)
 
225
        self.assertEqual(self.v1.y, 4)
 
226
        self.assertEqual(self.v1.z, 4)
 
227
        self.assertEqual(self.v1.w, 4)
 
228
 
 
229
    def test_inplace_mul(self):
 
230
        self.v1 *= 2
 
231
        self.assertEqual(self.v1.x, -2)
 
232
        self.assertEqual(self.v1.y, -4)
 
233
        self.assertEqual(self.v1.z, -6)
 
234
        self.assertEqual(self.v1.w, -8)
 
235
 
 
236
    def test_inplace_div(self):
 
237
        self.v1 /= 2
 
238
        self.assertEqual(self.v1.x, -0.5)
 
239
        self.assertEqual(self.v1.y, -1)
 
240
        self.assertEqual(self.v1.z, -1.5)
 
241
        self.assertEqual(self.v1.w, -2)
 
242
 
 
243
    def test_len(self):
 
244
        self.assertEqual(len(self.v1), 4)
 
245
 
 
246
    def test_get_item(self):
 
247
        self.assertEqual(self.v1[0], self.v1.x)
 
248
        self.assertEqual(self.v1[1], self.v1.y)
 
249
        self.assertEqual(self.v1[2], self.v1.z)
 
250
        self.assertEqual(self.v1[3], self.v1.w)
 
251
 
 
252
    def test_get_slice(self):
 
253
        x, y, z, w = self.v1[:]
 
254
        self.assertEqual(x, self.v1.x)
 
255
        self.assertEqual(y, self.v1.y)
 
256
        self.assertEqual(z, self.v1.z)
 
257
        self.assertEqual(w, self.v1.w)
 
258
 
 
259
    def test_set_item(self):
 
260
        self.v1.x = 1
 
261
        self.v1.y = 2
 
262
        self.v1.z = 3
 
263
        self.v1.w = 4
 
264
        self.assertEqual(self.v1.x, 1)
 
265
        self.assertEqual(self.v1.y, 2)
 
266
        self.assertEqual(self.v1.z, 3)
 
267
        self.assertEqual(self.v1.w, 4)
 
268
        
 
269
    def test_set_slice(self):
 
270
        self.v1[:] = 1, 2, 3, 4
 
271
        self.assertEqual(self.v1.x, 1)
 
272
        self.assertEqual(self.v1.y, 2)
 
273
        self.assertEqual(self.v1.z, 3)
 
274
        self.assertEqual(self.v1.w, 4)
 
275
 
 
276
    def test_eq(self):
 
277
        self.assert_(self.v1 == self.v1)
 
278
        self.assertFalse(self.v1 == self.v2)
 
279
        
 
280
    def test_ne(self):
 
281
        self.assertFalse(self.v1 != self.v1)
 
282
        self.assert_(self.v1 != self.v2)
 
283
        
 
284
if __name__ == '__main__':
 
285
    unittest.main()