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. Ref T79958 Differential Revision: https://developer.blender.org/D8714
This commit is contained in:
parent
f9fcb25d52
commit
532ac1163c
Notes:
blender-bot
2023-02-14 01:57:12 +01:00
Referenced by issue #79958, GTest perf regressions
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
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(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,
|
||||
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
|
||||
float den, den2;
|
||||
|
|
|
@ -38,5 +38,5 @@ if(WITH_GTESTS)
|
|||
set(TEST_LIB ${TEST_LIB} ${OPENJPEG_LIBRARIES})
|
||||
endif()
|
||||
include(GTestTesting)
|
||||
blender_add_test_lib(bf_intern_ffmpeg_tests "${TEST_SRC}" "${TEST_INC}" "${TEST_INC_SYS}" "${TEST_LIB}")
|
||||
blender_add_test_executable(ffmpeg "${TEST_SRC}" "${TEST_INC}" "${TEST_INC_SYS}" "${TEST_LIB}")
|
||||
endif()
|
||||
|
|
|
@ -92,5 +92,5 @@ if(WITH_GTESTS)
|
|||
bf_blenlib
|
||||
)
|
||||
include(GTestTesting)
|
||||
blender_add_test_lib(bf_intern_guardedalloc_tests "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}")
|
||||
blender_add_test_executable(guardedalloc "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}")
|
||||
endif()
|
||||
|
|
|
@ -304,6 +304,7 @@ set(LIB
|
|||
extern_wcwidth
|
||||
|
||||
${FREETYPE_LIBRARY}
|
||||
${ZLIB_LIBRARIES}
|
||||
)
|
||||
|
||||
if(WITH_MEM_VALGRIND)
|
||||
|
@ -431,7 +432,7 @@ if(WITH_GTESTS)
|
|||
bf_blenlib
|
||||
)
|
||||
include(GTestTesting)
|
||||
blender_add_test_lib(bf_blenlib_tests "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}")
|
||||
blender_add_test_executable(blenlib "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}")
|
||||
|
||||
add_subdirectory(tests/performance)
|
||||
endif()
|
||||
|
|
Loading…
Reference in New Issue