mlx/tests/CMakeLists.txt
Arkar Min Aung 5875252f87 feat: Add comprehensive testing and documentation for Metal SVD
- Add comprehensive test suite (test_metal_svd.cpp):
  * Basic functionality tests
  * Input validation tests
  * Various matrix sizes and batch processing
  * Reconstruction accuracy verification
  * Orthogonality property checks
  * Special matrices (identity, zero, diagonal)
  * Performance characteristic tests

- Add detailed implementation documentation:
  * Algorithm description and complexity analysis
  * Usage examples and API documentation
  * Performance benchmarks and characteristics
  * Implementation details and file structure
  * Error handling and limitations
  * Contributing guidelines

- Enhance error handling and robustness:
  * Improved input validation with detailed error messages
  * Memory allocation error handling
  * NaN/Inf input detection
  * Performance logging for large matrices

- Integrate tests into CMake build system

This completes the Metal SVD implementation with production-ready
testing and documentation.
2025-06-14 17:05:10 +10:00

45 lines
1.2 KiB
CMake

# Doctest works fine with cmake 3.5
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
FetchContent_Declare(
doctest
GIT_REPOSITORY "https://github.com/onqtam/doctest"
GIT_TAG "ae7a13539fb71f270b87eb2e874fbac80bc8dda2")
FetchContent_MakeAvailable(doctest)
add_executable(tests ${PROJECT_SOURCE_DIR}/tests/tests.cpp)
if(MLX_BUILD_METAL OR MLX_BUILD_CUDA)
set(METAL_TEST_SOURCES gpu_tests.cpp test_metal_svd.cpp)
endif()
include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake)
target_sources(
tests
PRIVATE allocator_tests.cpp
array_tests.cpp
arg_reduce_tests.cpp
autograd_tests.cpp
blas_tests.cpp
compile_tests.cpp
custom_vjp_tests.cpp
creations_tests.cpp
device_tests.cpp
einsum_tests.cpp
export_import_tests.cpp
eval_tests.cpp
fft_tests.cpp
load_tests.cpp
ops_tests.cpp
random_tests.cpp
scheduler_tests.cpp
utils_tests.cpp
vmap_tests.cpp
linalg_tests.cpp
${METAL_TEST_SOURCES})
target_link_libraries(tests PRIVATE mlx doctest)
doctest_discover_tests(tests)
add_test(NAME tests COMMAND tests)