2 from test import support
3 from mathutils import Matrix, Vector
6 class MatrixTesting(unittest.TestCase):
7 def test_matrix_column_access(self):
12 mat = Matrix(((1, 11, 111),
17 self.assertEqual(mat[0], Vector((1, 11, 111)))
18 self.assertEqual(mat[1], Vector((2, 22, 222)))
19 self.assertEqual(mat[2], Vector((3, 33, 333)))
20 self.assertEqual(mat[3], Vector((4, 44, 444)))
22 def test_item_access(self):
23 args = ((1, 4, 0, -1),
32 self.assertEqual(mat[row][col], args[row][col])
34 self.assertEqual(mat[0][2], 0)
35 self.assertEqual(mat[3][1], 9)
36 self.assertEqual(mat[2][3], 3)
37 self.assertEqual(mat[0][0], 1)
38 self.assertEqual(mat[3][3], 0)
40 def test_item_assignment(self):
41 mat = Matrix() - Matrix()
42 indices = (0, 0), (1, 3), (2, 0), (3, 2), (3, 1)
44 for row, col in indices:
50 checked_indices.append((row, col))
52 for item in checked_indices:
53 self.assertIn(item, indices)
55 def test_matrix_to_3x3(self):
61 mat = Matrix(tuple((i, 2 * i, 3 * i, 4 * i) for i in range(1, 5)))
62 mat_correct = Matrix(((1, 2, 3), (2, 4, 6), (3, 6, 9)))
63 self.assertEqual(mat.to_3x3(), mat_correct)
65 def test_matrix_to_translation(self):
70 self.assertEqual(mat.to_translation(), Vector((1, 2, 3)))
72 def test_matrix_translation(self):
74 mat.translation = Vector((1, 2, 3))
75 self.assertEqual(mat[0][3], 1)
76 self.assertEqual(mat[1][3], 2)
77 self.assertEqual(mat[2][3], 3)
79 def test_non_square_mult(self):
80 mat1 = Matrix(((1, 2, 3),
82 mat2 = Matrix(((1, 2),
86 prod_mat1 = Matrix(((22, 28),
88 prod_mat2 = Matrix(((9, 12, 15),
92 self.assertEqual(mat1*mat2, prod_mat1)
93 self.assertEqual(mat2 * mat1, prod_mat2)
95 def test_mat4x4_vec3D_mult(self):
96 mat = Matrix(((1, 0, 2, 0),
101 vec = Vector((1, 2, 3))
103 prod_mat_vec = Vector((7, 12, 4))
104 prod_vec_mat = Vector((1, 12, 5))
106 self.assertEqual(mat * vec, prod_mat_vec)
107 self.assertEqual(vec * mat, prod_vec_mat)
109 def test_mat_vec_mult(self):
114 self.assertRaises(ValueError, mat1.__mul__, vec)
115 self.assertRaises(ValueError, vec.__mul__, mat1)
117 mat2 = Matrix(((1, 2),
120 prod = Vector((5, 4))
122 self.assertEqual(mat2 * vec, prod)
124 def test_matrix_inverse(self):
125 mat = Matrix(((1, 4, 0, -1),
130 inv_mat = (1 / 285) * Matrix(((195, -57, 27, -102),
133 (110, -133, 43, -78)))
135 self.assertEqual(mat.inverted(), inv_mat)
137 def test_matrix_mult(self):
138 mat = Matrix(((1, 4, 0, -1),
143 prod_mat = Matrix(((11, -9, 7, -9),
148 self.assertEqual(mat * mat, prod_mat)
153 support.run_unittest(MatrixTesting)
156 traceback.print_exc()
158 # alert CTest we failed
162 if __name__ == '__main__':