[Bf-blender-cvs] [93e193399d9] master: Tests: added unit test for `mat3_vec_to_roll()` function

Sybren A. Stüvel noreply at git.blender.org
Tue Apr 21 18:00:45 CEST 2020


Commit: 93e193399d9432f2334deb77a93c41b82b1ef4e7
Author: Sybren A. Stüvel
Date:   Tue Apr 21 17:28:22 2020 +0200
Branches: master
https://developer.blender.org/rB93e193399d9432f2334deb77a93c41b82b1ef4e7

Tests: added unit test for `mat3_vec_to_roll()` function

This was used to investigate T73840. Since the armature math is far from
simple, I thought it would be a good idea to start writing some unit
tests for it.

No functional changes in Blender itself.

===================================================================

M	tests/gtests/CMakeLists.txt
A	tests/gtests/blenkernel/BKE_armature_test.cc
A	tests/gtests/blenkernel/CMakeLists.txt

===================================================================

diff --git a/tests/gtests/CMakeLists.txt b/tests/gtests/CMakeLists.txt
index bcf77fb6de7..c02bad471ff 100644
--- a/tests/gtests/CMakeLists.txt
+++ b/tests/gtests/CMakeLists.txt
@@ -12,6 +12,7 @@ if(WITH_GTESTS)
   remove_strict_flags()
 
   add_subdirectory(testing)
+  add_subdirectory(blenkernel)
   add_subdirectory(blenlib)
   add_subdirectory(blenloader)
   add_subdirectory(guardedalloc)
diff --git a/tests/gtests/blenkernel/BKE_armature_test.cc b/tests/gtests/blenkernel/BKE_armature_test.cc
new file mode 100644
index 00000000000..0f390a471d7
--- /dev/null
+++ b/tests/gtests/blenkernel/BKE_armature_test.cc
@@ -0,0 +1,89 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2020 Blender Foundation
+ * All rights reserved.
+ */
+
+#include "BKE_armature.h"
+
+#include "BLI_math.h"
+
+#include "testing/testing.h"
+
+static const float FLOAT_EPSILON = 1e-7;
+
+TEST(mat3_vec_to_roll, UnitMatrix)
+{
+  float unit_matrix[3][3];
+  float roll;
+
+  unit_m3(unit_matrix);
+
+  // Any vector with a unit matrix should return zero roll.
+  mat3_vec_to_roll(unit_matrix, unit_matrix[0], &roll);
+  EXPECT_FLOAT_EQ(0.0f, roll);
+
+  mat3_vec_to_roll(unit_matrix, unit_matrix[1], &roll);
+  EXPECT_FLOAT_EQ(0.0f, roll);
+
+  mat3_vec_to_roll(unit_matrix, unit_matrix[2], &roll);
+  EXPECT_FLOAT_EQ(0.0f, roll);
+
+  {
+    // Non-unit vector.
+    float vector[3] = {1.0f, 1.0f, 1.0f};
+    mat3_vec_to_roll(unit_matrix, vector, &roll);
+    EXPECT_NEAR(0.0f, roll, FLOAT_EPSILON);
+
+    // Normalized version of the above vector.
+    normalize_v3(vector);
+    mat3_vec_to_roll(unit_matrix, vector, &roll);
+    EXPECT_NEAR(0.0f, roll, FLOAT_EPSILON);
+  }
+}
+
+TEST(mat3_vec_to_roll, Rotationmatrix)
+{
+  float rotation_matrix[3][3];
+  float roll;
+
+  const float rot_around_x[3] = {1.234f, 0.0f, 0.0f};
+  eul_to_mat3(rotation_matrix, rot_around_x);
+
+  {
+    const float unit_axis_x[3] = {1.0f, 0.0f, 0.0f};
+    mat3_vec_to_roll(rotation_matrix, unit_axis_x, &roll);
+    EXPECT_NEAR(1.234f, roll, FLOAT_EPSILON);
+  }
+
+  {
+    const float unit_axis_y[3] = {0.0f, 1.0f, 0.0f};
+    mat3_vec_to_roll(rotation_matrix, unit_axis_y, &roll);
+    EXPECT_NEAR(0, roll, FLOAT_EPSILON);
+  }
+
+  {
+    const float unit_axis_z[3] = {0.0f, 0.0f, 1.0f};
+    mat3_vec_to_roll(rotation_matrix, unit_axis_z, &roll);
+    EXPECT_NEAR(0, roll, FLOAT_EPSILON);
+  }
+
+  {
+    const float between_x_and_y[3] = {1.0f, 1.0f, 0.0f};
+    mat3_vec_to_roll(rotation_matrix, between_x_and_y, &roll);
+    EXPECT_NEAR(0.57158958f, roll, FLOAT_EPSILON);
+  }
+}
diff --git a/tests/gtests/blenkernel/CMakeLists.txt b/tests/gtests/blenkernel/CMakeLists.txt
new file mode 100644
index 00000000000..69b58eddf71
--- /dev/null
+++ b/tests/gtests/blenkernel/CMakeLists.txt
@@ -0,0 +1,37 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# The Original Code is Copyright (C) 2020, Blender Foundation
+# All rights reserved.
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+  .
+  ..
+  ../../../source/blender/blenkernel
+  ../../../source/blender/blenlib
+  ../../../source/blender/makesdna
+  ../../../intern/guardedalloc
+  ../../../intern/atomic
+)
+
+setup_libdirs()
+include_directories(${INC})
+
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}")
+set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}")
+
+BLENDER_TEST(BKE_armature "bf_blenloader;bf_blenkernel;bf_blenlib")



More information about the Bf-blender-cvs mailing list