Add Unit Test
Workflow
- Inspect the production code and the nearest existing tests before writing a new test.
- Match the production path under xllm/ to tests/ where possible. - Prefer extending an existing nearby *test.cpp and cctest target when the behavior belongs to the same domain. - Create a new test source only when it improves isolation, keeps platform setup separate, or follows an existing directory pattern.
- Read the project style guide before editing production files under
xllm/, and apply the same C++ style discipline to new test code:
.agents/skills/code-review/references/custom-code-style.md.
- Follow the current test layout and CMake conventions.
- Read [xllm-test-patterns.md](references/xllm-test-patterns.md) when adding a new test file, new cctest, platform-specific test, or test directory. - Use test.cpp for C++ test files and _test.cu for CUDA source tests. - Do not create nested test/ or tests/ directories for new unit tests unless the surrounding tree already requires that structure.
- Wire tests through CMake with
include(cctest) and cctest(...).
- Keep source names relative to the current test directory unless an existing target already uses an absolute source path for a production .cpp. - Use target names ending in test. - Put platform-directory gates in the parent CMakeLists.txt when the whole child directory is platform-specific. - Use target-level if(USENPU), if(USEMLU), if(USECUDA), or generator expressions only when a mixed directory contains both generic and platform-specific tests.
- Write tests for observable behavior, not implementation trivia.
- Cover success, edge, and error paths touched by the change. - Prefer deterministic inputs, fixed seeds, and small tensors/data structures. - Keep helpers file-local in an anonymous namespace unless shared by multiple test files. - Use TEST/TEST_F names that describe behavior clearly.
- Validate narrowly before finishing.
- Always run git diff --check for the changed test paths. - Search for stale filenames after moving or renaming tests. - Run the narrowest build/test command available locally; if not feasible, state the exact reason and what was checked instead.
Common Commands
rg --files tests/<area>
rg "old_test_name|old_file_name" tests xllm CMakeLists.txt
git diff --check -- tests/<area>
For full remote validation on the development machine, use the repository AGENTS instructions for SSH, container, build, and test commands.