Add export tests.

This commit is contained in:
Allison Vacanti
2021-10-19 21:30:04 -04:00
parent 27b23eeb46
commit b2d37c21fd
6 changed files with 123 additions and 3 deletions

View File

@@ -34,3 +34,5 @@ foreach(test_src IN LISTS test_srcs)
add_dependencies(nvbench.test.all ${test_name})
endforeach()
add_subdirectory(cmake)

View File

@@ -0,0 +1,79 @@
if ("MSVC" STREQUAL "${CMAKE_CXX_COMPILER_ID}")
# There's a bug that prevents build-and-test from working on MSVC.
# See NVIDIA/nvbench#43.
return()
endif()
# Need to escape the semicolons in CUDA_ARCHITECTURES or the tests break:
nvbench_escaped_cuda_arches(arches)
set(cmake_opts
-D "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
-D "CMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
-D "CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
-D "CMAKE_CUDA_COMPILER=${CMAKE_CUDA_COMPILER}"
-D "CMAKE_CUDA_ARCHITECTURES=${arches}"
)
# Temporary installation prefix for tests against installed nvbench:
set(tmp_install_prefix "${CMAKE_CURRENT_BINARY_DIR}/test_nvbench_install")
# Add a build-and-test CTest.
# - full_test_name_var will be set to the full name of the test.
# - subdir is the relative path to the test project directory.
# - test_id is used to generate a unique name for this test, allowing the
# subdir to be reused.
# - Any additional args will be passed to the project configure step.
function(nvbench_add_compile_test full_test_name_var subdir test_id)
set(test_name nvbench.test.cmake.${subdir}.${test_id})
set(src_dir "${CMAKE_CURRENT_SOURCE_DIR}/${subdir}")
set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/${subdir}/${test_id}")
add_test(NAME ${test_name}
COMMAND "${CMAKE_CTEST_COMMAND}"
--build-and-test "${src_dir}" "${build_dir}"
--build-generator "${CMAKE_GENERATOR}"
--build-options
${cmake_opts}
${ARGN}
--test-command "${CMAKE_CTEST_COMMAND}" --output-on-failure
)
set(${full_test_name_var} ${test_name} PARENT_SCOPE)
endfunction()
################################################################################
# Test against build tree export
nvbench_add_compile_test(test_name
test_export
build_tree
-D "NVBench_DIR=${NVBench_BINARY_DIR}"
)
################################################################################
# Test against install tree export
nvbench_add_compile_test(test_name
test_export
install_tree
# "rapids_export() always installs to lib" per rapids_export docs
-D "NVBench_DIR=${tmp_install_prefix}/lib/cmake/nvbench/"
)
set_tests_properties(${test_name} PROPERTIES FIXTURES_REQUIRED install_tree)
################################################################################
# Install tree fixtures
add_test(NAME nvbench.test.cmake.install_tree.install
COMMAND "${CMAKE_COMMAND}"
--install "${NVBench_BINARY_DIR}"
--prefix "${tmp_install_prefix}"
)
set_tests_properties(nvbench.test.cmake.install_tree.install PROPERTIES
FIXTURES_SETUP install_tree
)
add_test(NAME nvbench.test.cmake.install_tree.cleanup
COMMAND "${CMAKE_COMMAND}" -E rm -rf "${tmp_install_prefix}"
)
set_tests_properties(nvbench.test.cmake.install_tree.cleanup PROPERTIES
FIXTURES_CLEANUP install_tree
)

View File

@@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.20.1)
project(NVBenchTestExport CUDA CXX)
message(STATUS "NVBench_DIR=${NVBench_DIR}")
find_package(NVBench)
add_executable(test_bench test_bench.cu)
target_link_libraries(test_bench PRIVATE nvbench::main)
enable_testing()
add_test(NAME test COMMAND "$<TARGET_FILE:test_bench>" --timeout 1)

View File

@@ -0,0 +1,13 @@
#include <nvbench/nvbench.cuh>
// Grab some testing kernels from NVBench:
#include <nvbench/test_kernels.cuh>
void simple(nvbench::state &state)
{
state.exec([](nvbench::launch &launch) {
// Sleep for 1 millisecond:
nvbench::sleep_kernel<<<1, 1, 0, launch.get_stream()>>>(1e-3);
});
}
NVBENCH_BENCH(simple);