Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-12-20 05:49:24 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-20 05:49:24 +0400
commit4d08df734cf9d8eab92844b28fdafdf3587e2fd1 (patch)
tree66a43ccc2c1befcf6e16198cb4c7fda0ff046e0a /source
parent84a58fd7e9af987d3fa6fccb7acb2e019ca680e1 (diff)
unit test for mathutils python module from Andrew Hale, runs in CTest too
Diffstat (limited to 'source')
-rw-r--r--source/tests/CMakeLists.txt5
-rw-r--r--source/tests/bl_pyapi_mathutils.py109
2 files changed, 114 insertions, 0 deletions
diff --git a/source/tests/CMakeLists.txt b/source/tests/CMakeLists.txt
index 40d304ef4b9..74a0ad1c628 100644
--- a/source/tests/CMakeLists.txt
+++ b/source/tests/CMakeLists.txt
@@ -60,6 +60,11 @@ add_test(script_run_operators ${TEST_BLENDER_EXE}
--python ${CMAKE_CURRENT_LIST_DIR}/bl_run_operators.py
)
+# test running mathutils testing script
+add_test(script_pyapi_mathutils ${TEST_BLENDER_EXE}
+ --python ${CMAKE_CURRENT_LIST_DIR}/bl_pyapi_mathutils.py
+)
+
# ------------------------------------------------------------------------------
# IO TESTS
diff --git a/source/tests/bl_pyapi_mathutils.py b/source/tests/bl_pyapi_mathutils.py
new file mode 100644
index 00000000000..f1d6d96c68b
--- /dev/null
+++ b/source/tests/bl_pyapi_mathutils.py
@@ -0,0 +1,109 @@
+import unittest
+from test import support
+from mathutils import Matrix, Vector
+
+
+class MatrixTesting(unittest.TestCase):
+ def test_matrix_column_access(self):
+ #mat =
+ #[ 1 2 3 4 ]
+ #[ 1 2 3 4 ]
+ #[ 1 2 3 4 ]
+ mat = Matrix(((1, 11, 111),
+ (2, 22, 222),
+ (3, 33, 333),
+ (4, 44, 444)))
+
+ self.assertEqual(mat[0], Vector((1, 11, 111)))
+ self.assertEqual(mat[1], Vector((2, 22, 222)))
+ self.assertEqual(mat[2], Vector((3, 33, 333)))
+ self.assertEqual(mat[3], Vector((4, 44, 444)))
+
+ def test_item_access(self):
+ args = ((1, 4, 0, -1),
+ (2, -1, 2, -2),
+ (0, 3, 8, 3),
+ (-2, 9, 1, 0))
+
+ mat = Matrix(args)
+
+ for i in range(4):
+ for j in range(4):
+ self.assertEqual(mat[i][j], args[i][j])
+
+ self.assertEqual(mat[0][2], 0)
+ self.assertEqual(mat[3][1], 9)
+ self.assertEqual(mat[2][3], 3)
+ self.assertEqual(mat[0][0], 1)
+ self.assertEqual(mat[3][3], 0)
+
+ def test_item_assignment(self):
+ mat = Matrix() - Matrix()
+ indices = (0, 0), (1, 3), (2, 0), (3, 2), (3, 1)
+ checked_indices = []
+ for col, row in indices:
+ mat[col][row] = 1
+
+ for col in range(4):
+ for row in range(4):
+ if mat[col][row]:
+ checked_indices.append((col, row))
+
+ for item in checked_indices:
+ self.assertIn(item, indices)
+
+ def test_matrix_to_3x3(self):
+ #mat =
+ #[ 1 2 3 4 ]
+ #[ 2 4 6 8 ]
+ #[ 3 6 9 12 ]
+ #[ 4 8 12 16 ]
+ mat = Matrix(tuple((i, 2 * i, 3 * i, 4 * i) for i in range(1, 5)))
+ mat_correct = Matrix(((1, 2, 3), (2, 4, 6), (3, 6, 9)))
+ self.assertEqual(mat.to_3x3(), mat_correct)
+
+ def test_matrix_to_translation(self):
+ mat = Matrix()
+ mat[3] = (1, 2, 3, 4)
+ self.assertEqual(mat.to_translation(), Vector((1, 2, 3)))
+
+ def test_matrix_inverse(self):
+ mat = Matrix(((1, 4, 0, -1),
+ (2, -1, 2, -2),
+ (0, 3, 8, 3),
+ (-2, 9, 1, 0)))
+
+ inv_mat = (1 / 285) * Matrix(((195, -57, 27, -102),
+ (50, -19, 4, 6),
+ (-60, 57, 18, 27),
+ (110, -133, 43, -78)))
+
+ self.assertEqual(mat.inverted(), inv_mat)
+
+ def test_matrix_mult(self):
+ mat = Matrix(((1, 4, 0, -1),
+ (2, -1, 2, -2),
+ (0, 3, 8, 3),
+ (-2, 9, 1, 0)))
+
+ prod_mat = Matrix(((11, -9, 7, -9),
+ (4, -3, 12, 6),
+ (0, 48, 73, 18),
+ (16, -14, 26, -13)))
+
+ self.assertEqual(mat * mat, prod_mat)
+
+
+def test_main():
+ try:
+ support.run_unittest(MatrixTesting)
+ except:
+ import traceback
+ traceback.print_exc()
+
+ # alert CTest we failed
+ import sys
+ sys.exit(1)
+
+if __name__ == '__main__':
+ test_main()