diff options
Diffstat (limited to 'tests/gtests/blenkernel')
-rw-r--r-- | tests/gtests/blenkernel/BKE_armature_test.cc | 89 | ||||
-rw-r--r-- | tests/gtests/blenkernel/CMakeLists.txt | 37 |
2 files changed, 126 insertions, 0 deletions
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") |