Skip to main content

cpp-unit-testing

Instructions for creating unit tests for Axom

الانتقال إلى التثبيت

معلومات المصدر

المستودع
llnl/axom
آخر نشاط في المصدر
٢٠ يوليو ٢٠٢٦ في ٢١:٣٧
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٩٦
التفرعات
٣٤

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
cpp-unit-testing
description
Instructions for creating unit tests for Axom
This repo’s unit tests: - Use GoogleTest (`TEST`, `TEST_F`, etc.). - Live close to the code they cover in a `tests/` subdirectory. - Are registered with CTest via the CMake macro `axom_add_test(...)`. ## Where tests go Place unit tests next to the component they cover: - `src/axom/<component>/tests/` (recommended for library code) - `src/thirdparty/tests/` (third-party smoke tests) Each `tests/` directory should contain: - One or more `*.cpp` test files - A `CMakeLists.txt` that builds test executables with `axom_add_executable` and registers them with `axom_add_test` Also ensure the parent component adds the tests subdirectory when tests are enabled: ```cmake if(AXOM_ENABLE_TESTS) add_subdirectory(tests) endif() ``` ## Writing GoogleTest unit tests - Include GoogleTest: `#include <gtest/gtest.h>` - Prefer fast, deterministic, CPU-only tests by default. - Use fixtures (`TEST_F`) when setup/teardown is shared. - Avoid depending on external files unless the test is explicitly a data-driven/integration test. ## Registering tests with `axom_add_test` Axom tests typically create one test executable per source file with `axom_add_executable`, then register it with CTest using `axom_add_test`. The executable name usually appends `_test`; the CTest name usually omits that suffix. Minimal `tests/CMakeLists.txt` template: ```cmake set(my_component_test_depends my_component gtest) set(my_component_test_sources feature_a.cpp feature_b.cpp) foreach(test ${my_component_test_sources}) get_filename_component(test_name ${test} NAME_WE) axom_add_executable(NAME ${test_name}_test SOURCES ${test} OUTPUT_DIR ${TEST_OUTPUT_DIRECTORY} DEPENDS_ON ${my_component_test_depends} FOLDER axom/my_component/tests) axom_add_test(NAME ${test_name} COMMAND ${test_name}_test) endforeach() ``` Notes: - Keep test source basenames unique across the project (CMake targets are global). - Add only the libraries you need to `DEPENDS_ON` (the library under test + `gtest` + any required Axom/TPL targets). ### MPI / OpenMP tests If a test requires MPI, add the MPI dependency and set `NUM_MPI_TASKS`: ```cmake axom_add_executable(NAME my_parallel_test SOURCES my_parallel_test.cpp OUTPUT_DIR ${TEST_OUTPUT_DIRECTORY} DEPENDS_ON gtest blt::mpi my_component FOLDER axom/my_component/tests) axom_add_test(NAME my_parallel COMMAND my_parallel_test NUM_MPI_TASKS 4) ``` If a test requires OpenMP, set `NUM_OMP_THREADS` accordingly. ### GPU-enabled unit tests If you need a CUDA- or HIP-enabled unit test, gate it behind the matching Axom option and add the matching BLT GPU dependency: - CUDA: `AXOM_ENABLE_CUDA` with `blt::cuda` for CUDA-compiled sources, or the CUDA runtime target when only runtime API linkage is needed. - HIP: `AXOM_ENABLE_HIP` with `blt::hip`. ```cmake if(AXOM_ENABLE_HIP) axom_add_executable(NAME my_hip_test SOURCES my_hip_test.cpp OUTPUT_DIR ${TEST_OUTPUT_DIRECTORY} DEPENDS_ON gtest blt::hip my_component FOLDER axom/my_component/tests) axom_add_test(NAME my_hip COMMAND my_hip_test) endif() ``` Use the same shape for CUDA tests: ```cmake if(AXOM_ENABLE_CUDA) axom_add_executable(NAME my_cuda_test SOURCES my_cuda_test.cpp OUTPUT_DIR ${TEST_OUTPUT_DIRECTORY} DEPENDS_ON gtest blt::cuda my_component FOLDER axom/my_component/tests) axom_add_test(NAME my_cuda COMMAND my_cuda_test) endif() ``` For tests that are always built but need GPU linkage in GPU builds, append the dependency conditionally before creating the target: ```cmake set(my_component_test_depends my_component gtest) blt_list_append(TO my_component_test_depends ELEMENTS blt::cuda IF AXOM_ENABLE_CUDA) blt_list_append(TO my_component_test_depends ELEMENTS blt::hip IF AXOM_ENABLE_HIP) ``` Use the repository's existing local convention when modifying an existing `CMakeLists.txt`: some test directories use `ENABLE_HIP` for build-configuration workarounds such as `axom_force_release_for_target(...)`, while dependency lists commonly use `AXOM_ENABLE_HIP`. ## Running tests - Configure with tests enabled: `-DENABLE_TESTS=ON -DAXOM_ENABLE_TESTS=ON` - Run all tests: `ctest` - Run a single test by name: `ctest -R test_state_manager` ## Examples in this repo - Macro definition: `src/cmake/AxomMacros.cmake` - Typical component tests: `src/axom/inlet/tests/CMakeLists.txt` - Third-party smoke tests: `src/thirdparty/tests/CMakeLists.txt`
عرض على GitHub