[Bf-blender-cvs] [704fabc73af] temp-cmake-tests-bundle-linking: Tests: bundle tests for some modules in their own executables

Brecht Van Lommel noreply at git.blender.org
Tue Sep 15 17:44:39 CEST 2020


Commit: 704fabc73afff0c5a318857dfaa9db4ad2e58335
Author: Brecht Van Lommel
Date:   Tue Sep 15 11:16:35 2020 +0200
Branches: temp-cmake-tests-bundle-linking
https://developer.blender.org/rB704fabc73afff0c5a318857dfaa9db4ad2e58335

Tests: bundle tests for some modules in their own executables

The ffmpeg, guardedalloc and blenlib are quite isolated and putting them in
their own executable separate from blender_test is faster for development than
linking the entire blender_tests executable.

For Cycles, this also bundles all the unit tests into one executable.

I also considered going back to having every test file in its own executable,
but the size of these executables does add up quickly, and linking and running
all blenlib tests is still < 1s here.

Ref T79958

Reviewed By: LazyDodo

Maniphest Tasks: T79958

Differential Revision: https://developer.blender.org/D8714

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

M	build_files/cmake/macros.cmake
M	intern/cycles/test/CMakeLists.txt
M	intern/cycles/test/util_avxf_avx2_test.cpp
M	intern/cycles/test/util_avxf_avx_test.cpp
M	intern/cycles/test/util_avxf_test.h
M	intern/ffmpeg/CMakeLists.txt
M	intern/guardedalloc/CMakeLists.txt
M	source/blender/blenlib/CMakeLists.txt

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

diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 268daa4aae3..1e3863ac567 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -375,9 +375,8 @@ function(blender_add_lib
   set_property(GLOBAL APPEND PROPERTY BLENDER_LINK_LIBS ${name})
 endfunction()
 
-# blender_add_test_lib() is used to define a test library. It is intended to be
-# called in tandem with blender_add_lib(). The test library will be linked into
-# the bf_gtest_runner_test executable (see tests/gtests/CMakeLists.txt).
+# Add tests for a Blender library, to be called in tandem with blender_add_lib().
+# The tests will be part of the blender_test executable (see tests/gtests/runner).
 function(blender_add_test_lib
   name
   sources
@@ -411,6 +410,48 @@ function(blender_add_test_lib
   set_property(GLOBAL APPEND PROPERTY BLENDER_TEST_LIBS ${name})
 endfunction()
 
+
+# Add tests for a Blender library, to be called in tandem with blender_add_lib().
+# Test will be compiled into a ${name}_test executable.
+#
+# To be used for smaller isolated libraries, that do not have many dependencies.
+# For libraries that do drag in many other Blender libraries and would create a
+# very large executable, blender_add_test_lib() should be used instead.
+function(blender_add_test_executable
+  name
+  sources
+  includes
+  includes_sys
+  library_deps
+  )
+
+  add_cc_flags_custom_test(${name} PARENT_SCOPE)
+
+  ## Otherwise external projects will produce warnings that we cannot fix.
+  remove_strict_flags()
+
+  include_directories(${includes})
+  include_directories(${includes_sys})
+  setup_libdirs()
+
+  BLENDER_SRC_GTEST_EX(
+    NAME ${name}
+    SRC "${sources}"
+    EXTRA_LIBS "${library_deps}"
+    SKIP_ADD_TEST
+  )
+
+  include(GTest)
+  set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT
+    ${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/GTestAddTests.cmake
+  )
+
+  gtest_discover_tests(${name}_test
+    DISCOVERY_MODE PRE_TEST
+    WORKING_DIRECTORY "${TEST_INSTALL_DIR}"
+  )
+endfunction()
+
 # Ninja only: assign 'heavy pool' to some targets that are especially RAM-consuming to build.
 function(setup_heavy_lib_pool)
   if(WITH_NINJA_POOL_JOBS AND NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
diff --git a/intern/cycles/test/CMakeLists.txt b/intern/cycles/test/CMakeLists.txt
index 1dc3d44dead..7d8f5916fef 100644
--- a/intern/cycles/test/CMakeLists.txt
+++ b/intern/cycles/test/CMakeLists.txt
@@ -19,12 +19,6 @@ if(WITH_GTESTS)
   remove_strict_flags()
 endif()
 
-macro(CYCLES_TEST SRC EXTRA_LIBS)
-  if(WITH_GTESTS)
-    BLENDER_SRC_GTEST("cycles_${SRC}" "${SRC}_test.cpp" "${EXTRA_LIBS}")
-  endif()
-endmacro()
-
 set(INC
   .
   ..
@@ -50,15 +44,22 @@ include_directories(${INC})
 
 cycles_link_directories()
 
-CYCLES_TEST(render_graph_finalize "${ALL_CYCLES_LIBRARIES};bf_intern_numaapi")
-cycles_target_link_libraries(cycles_render_graph_finalize_test)
-CYCLES_TEST(util_aligned_malloc "cycles_util")
-CYCLES_TEST(util_path "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}")
-CYCLES_TEST(util_string "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}")
-CYCLES_TEST(util_task "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES};bf_intern_numaapi")
-CYCLES_TEST(util_time "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}")
+set(SRC
+  render_graph_finalize_test.cpp
+  util_aligned_malloc_test.cpp
+  util_path_test.cpp
+  util_string_test.cpp
+  util_task_test.cpp
+  util_time_test.cpp
+  util_avxf_avx_test.cpp
+  util_avxf_avx2_test.cpp
+  util_transform_test.cpp
+)
+
 set_source_files_properties(util_avxf_avx_test.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX_KERNEL_FLAGS}")
-CYCLES_TEST(util_avxf_avx "cycles_util;bf_intern_numaapi;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}")
 set_source_files_properties(util_avxf_avx2_test.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}")
-CYCLES_TEST(util_avxf_avx2 "cycles_util;bf_intern_numaapi;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}")
-CYCLES_TEST(util_transform "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}")
+
+if(WITH_GTESTS)
+  BLENDER_SRC_GTEST(cycles "${SRC}" "${ALL_CYCLES_LIBRARIES}")
+  cycles_target_link_libraries(cycles_test)
+endif()
diff --git a/intern/cycles/test/util_avxf_avx2_test.cpp b/intern/cycles/test/util_avxf_avx2_test.cpp
index 9b466ddd3a0..c5365a81a51 100644
--- a/intern/cycles/test/util_avxf_avx2_test.cpp
+++ b/intern/cycles/test/util_avxf_avx2_test.cpp
@@ -16,6 +16,8 @@
 #define __KERNEL_AVX2__
 #define __KERNEL_CPU__
 
+#define TEST_CATEGORY_NAME util_avx2
+
 #if defined(i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
 #  include "util_avxf_test.h"
 #endif
diff --git a/intern/cycles/test/util_avxf_avx_test.cpp b/intern/cycles/test/util_avxf_avx_test.cpp
index cea67649b80..dbac20c69b3 100644
--- a/intern/cycles/test/util_avxf_avx_test.cpp
+++ b/intern/cycles/test/util_avxf_avx_test.cpp
@@ -16,6 +16,8 @@
 #define __KERNEL_AVX__
 #define __KERNEL_CPU__
 
+#define TEST_CATEGORY_NAME util_avx
+
 #if defined(i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
 #  include "util_avxf_test.h"
 #endif
diff --git a/intern/cycles/test/util_avxf_test.h b/intern/cycles/test/util_avxf_test.h
index d93563fdb3f..64825200c9e 100644
--- a/intern/cycles/test/util_avxf_test.h
+++ b/intern/cycles/test/util_avxf_test.h
@@ -20,7 +20,7 @@
 
 CCL_NAMESPACE_BEGIN
 
-bool validate_cpu_capabilities()
+static bool validate_cpu_capabilities()
 {
 
 #ifdef __KERNEL_AVX2__
@@ -61,21 +61,22 @@ bool validate_cpu_capabilities()
   for (size_t i = 0; i < a.size; i++) \
     EXPECT_FLOAT_EQ(c[i], a[i] op b);
 
-const avxf avxf_a(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f);
-const avxf avxf_b(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
-const avxf avxf_c(1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f);
-const float float_b = 1.5f;
-
-TEST(util_avx, avxf_add_vv){basic_test_vv(avxf_a, avxf_b, +)} TEST(util_avx, avxf_sub_vv){
-    basic_test_vv(avxf_a, avxf_b, -)} TEST(util_avx, avxf_mul_vv){
-    basic_test_vv(avxf_a, avxf_b, *)} TEST(util_avx, avxf_div_vv){
-    basic_test_vv(avxf_a, avxf_b, /)} TEST(util_avx, avxf_add_vf){
-    basic_test_vf(avxf_a, float_b, +)} TEST(util_avx, avxf_sub_vf){
-    basic_test_vf(avxf_a, float_b, -)} TEST(util_avx, avxf_mul_vf){
-    basic_test_vf(avxf_a, float_b, *)} TEST(util_avx,
+static const avxf avxf_a(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f);
+static const avxf avxf_b(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
+static const avxf avxf_c(1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f);
+static const float float_b = 1.5f;
+
+TEST(TEST_CATEGORY_NAME, avxf_add_vv){basic_test_vv(avxf_a, avxf_b, +)} TEST(TEST_CATEGORY_NAME,
+                                                                             avxf_sub_vv){
+    basic_test_vv(avxf_a, avxf_b, -)} TEST(TEST_CATEGORY_NAME, avxf_mul_vv){
+    basic_test_vv(avxf_a, avxf_b, *)} TEST(TEST_CATEGORY_NAME, avxf_div_vv){
+    basic_test_vv(avxf_a, avxf_b, /)} TEST(TEST_CATEGORY_NAME, avxf_add_vf){
+    basic_test_vf(avxf_a, float_b, +)} TEST(TEST_CATEGORY_NAME, avxf_sub_vf){
+    basic_test_vf(avxf_a, float_b, -)} TEST(TEST_CATEGORY_NAME, avxf_mul_vf){
+    basic_test_vf(avxf_a, float_b, *)} TEST(TEST_CATEGORY_NAME,
                                             avxf_div_vf){basic_test_vf(avxf_a, float_b, /)}
 
-TEST(util_avx, avxf_ctor)
+TEST(TEST_CATEGORY_NAME, avxf_ctor)
 {
   VALIDATECPU
   compare_vector_scalar(avxf(7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f, 0.0f),
@@ -88,28 +89,28 @@ TEST(util_avx, avxf_ctor)
                         avxf(0.0f, 3.0f, 2.0f, 1.0f, 0.0f, 3.0f, 2.0f, 1.0f));
 }
 
-TEST(util_avx, avxf_sqrt)
+TEST(TEST_CATEGORY_NAME, avxf_sqrt)
 {
   VALIDATECPU
   compare_vector_vector(mm256_sqrt(avxf(1.0f, 4.0f, 9.0f, 16.0f, 25.0f, 36.0f, 49.0f, 64.0f)),
                         avxf(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f));
 }
 
-TEST(util_avx, avxf_min_max)
+TEST(TEST_CATEGORY_NAME, avxf_min_max)
 {
   VALIDATECPU
   compare_vector_vector(min(avxf_a, avxf_b), avxf_a);
   compare_vector_vector(max(avxf_a, avxf_b), avxf_b);
 }
 
-TEST(util_avx, avxf_set_sign)
+TEST(TEST_CATEGORY_NAME, avxf_set_sign)
 {
   VALIDATECPU
   avxf res = set_sign_bit<1, 0, 0, 0, 0, 0, 0, 0>(avxf_a);
   compare_vector_vector(res, avxf(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, -0.8f));
 }
 
-TEST(util_avx, avxf_msub)
+TEST(TEST_CATEGORY_NAME, avxf_msub)
 {
   VALIDATECPU
   avxf res = msub(avxf_a, avxf_b, avxf_c);
@@ -124,7 +125,7 @@ TEST(util_avx, avxf_msub)
   compare_vector_vector(res, exp);
 }
 
-TEST(util_avx, avxf_madd)
+TEST(TEST_CATEGORY_NAME, avxf_madd)
 {
   VALIDATECPU
   avxf res = madd(avxf_a, avxf_b, avxf_c);
@@ -139,7 +140,7 @@ TEST(util_avx, avxf_madd)
   compare_vector_vector(res, exp);
 }
 
-TEST(util_avx, avxf_nmadd)
+TEST(TEST_CATEGORY_NAME, avxf_nmadd)
 {
   VALIDATECPU
   avxf res = nmadd(avxf_a, avxf_b, avxf_c);
@@ -154,7 +155,7 @@ TEST(util_avx, avxf_nmadd)
   compare_vector_vector(res, exp);
 }
 
-TEST(util_avx, avxf_compare)
+TEST(TEST_CATEGORY_NAME, avxf_compare)
 {
   VALIDATECPU
   avxf a(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f);
@@ -173,28 +174,28 @@ TEST(util_avx, avxf_compare)
   compare_vector_vector(res, exp);
 }
 
-TEST(util_avx, avxf_permute)
+TEST(TEST_CATEGORY_NAME, avxf_permute)
 {
   VALIDATECPU
   avxf res = permute<3, 0, 1, 7, 6, 5, 2, 4>(avxf_b);
   compare_vector_vector(res, avxf(4.0f, 6.0f, 3.0f, 2.0f, 1.0f, 7.0f, 8.0f, 5.0f));
 }
 
-TEST(util_avx, avxf_blend)
+TEST(TEST_CATEGORY_NAME, avxf_blend)
 {
   VALIDATECPU
   avxf res = blend<0, 0, 1, 0, 1, 0, 1, 0>(avxf_a, avxf_b);
   compare_vector_vector(res, avxf(0.1f, 0.2f, 3.0f, 0.4f, 5.0f, 0.6f, 7.0f, 0.8f));
 }
 
-TEST(util_avx, avxf_shuffle)
+TEST(TEST_CATEGORY_NAME, avxf_shuffle)
 {
   VALIDATECPU
   avxf res = shuffle<0, 1, 2, 3, 1, 3, 2, 0>(avxf_a);
   compare_vector_vector(res, avxf(0.4f, 0.2f, 0.1f, 0.3f, 0.5f, 0.6f, 0.7f, 0.8f));
 }
 
-TEST(util_avx, avxf_cross)
+TEST(TEST_CATEGORY_NAME, avxf_cross)
 {
   VALIDATECPU
   avxf res = cross(avxf_b, avxf_c);
@@ -210,7 +211,7 @@ TEST(util_avx, avxf_cross)
                              0.000002000f);
 }
 
-TEST(util_avx, avxf_dot3)
+TEST(TEST_CATEGORY_NAME, avxf_dot3)
 {
   VALIDATECPU
   floa

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list