diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml index b80caac71..b436bc765 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/builds.yml @@ -107,7 +107,7 @@ jobs: cd build source ${GITHUB_WORKSPACE}/.github/ci_setup.sh ${{ matrix.PLATFORM.NAME }} ctest --output-on-failure - - name: Unit Test + - name: Unit Tests if: "matrix.BUILD_TYPE == 'Debug'" run: | cd build diff --git a/CMakeLists.txt b/CMakeLists.txt index 3971bc32d..0dd399681 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ option( DETRAY_BUILD_CUDA "Build the CUDA sources included in detray" ${DETRAY_BUILD_CUDA_DEFAULT} ) cmake_dependent_option(DETRAY_BUILD_HOST "Build the host sources included in detray" ON "DETRAY_BUILD_CUDA OR DETRAY_BUILD_SYCL" ON) option( DETRAY_BUILD_TEST_UTILS "Build the test utility library of Detray" OFF ) +option( DETRAY_BUILD_VALIDATION_TOOLS "Build the validation tools of Detray" OFF ) option( DETRAY_BUILD_UNITTESTS "Build the unit tests of Detray" OFF ) option( DETRAY_BUILD_INTEGRATIONTESTS "Build the integration tests of Detray" OFF ) @@ -90,13 +91,19 @@ if ( BUILD_TESTING AND (DETRAY_BUILD_UNITTESTS OR DETRAY_BUILD_INTEGRATIONTESTS) set( DETRAY_BUILD_TESTING ON ) endif() -# Test utilities are needed for tests, tutorials and benchmarks -if ( DETRAY_BUILD_TESTING OR DETRAY_BUILD_BENCHMARKS OR DETRAY_BUILD_TUTORIALS ) +# Validation utilities are needed for integration tests and tutorials +if ( DETRAY_BUILD_TESTING OR DETRAY_BUILD_TUTORIALS ) + set( DETRAY_BUILD_VALIDATION_TOOLS ON ) +endif() + +# Test utilities are needed for validation utilities and benchmarks +if ( DETRAY_BUILD_TESTING OR DETRAY_BUILD_VALIDATION_TOOLS + OR DETRAY_BUILD_BENCHMARKS ) set( DETRAY_BUILD_TEST_UTILS ON ) endif() -# Svg display is needed for the test utilities -if ( DETRAY_BUILD_TEST_UTILS ) +# Svg display is needed for the validation utilities +if ( DETRAY_BUILD_VALIDATION_TOOLS ) set( DETRAY_SVG_DISPLAY ON ) endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dba117177..fea721221 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,18 +14,32 @@ include_directories( SYSTEM $ diff --git a/tests/include/detray/test/cpu/material_scan.hpp b/tests/include/detray/test/cpu/material_scan.hpp index 3f0406e62..59a34e65e 100644 --- a/tests/include/detray/test/cpu/material_scan.hpp +++ b/tests/include/detray/test/cpu/material_scan.hpp @@ -16,10 +16,10 @@ // Detray test include(s) #include "detray/test/common/detail/whiteboard.hpp" #include "detray/test/common/fixture_base.hpp" -#include "detray/test/utils/detector_scanner.hpp" -#include "detray/test/utils/material_validation_utils.hpp" #include "detray/test/utils/simulation/event_generator/track_generators.hpp" #include "detray/test/utils/types.hpp" +#include "detray/test/validation/detector_scanner.hpp" +#include "detray/test/validation/material_validation_utils.hpp" // System include(s) #include diff --git a/tests/include/detray/test/cpu/material_validation.hpp b/tests/include/detray/test/cpu/material_validation.hpp index 2d26965d0..240666455 100644 --- a/tests/include/detray/test/cpu/material_validation.hpp +++ b/tests/include/detray/test/cpu/material_validation.hpp @@ -15,7 +15,7 @@ // Detray test include(s) #include "detray/test/common/fixture_base.hpp" #include "detray/test/common/material_validation_config.hpp" -#include "detray/test/utils/material_validation_utils.hpp" +#include "detray/test/validation/material_validation_utils.hpp" // Vecmem include(s) #include diff --git a/tests/include/detray/test/cpu/navigation_validation.hpp b/tests/include/detray/test/cpu/navigation_validation.hpp index 264b9f396..9c0016ce5 100644 --- a/tests/include/detray/test/cpu/navigation_validation.hpp +++ b/tests/include/detray/test/cpu/navigation_validation.hpp @@ -17,9 +17,9 @@ // Detray test include(s) #include "detray/test/common/fixture_base.hpp" #include "detray/test/common/navigation_validation_config.hpp" -#include "detray/test/utils/detector_scan_utils.hpp" -#include "detray/test/utils/material_validation_utils.hpp" -#include "detray/test/utils/navigation_validation_utils.hpp" +#include "detray/test/validation/detector_scan_utils.hpp" +#include "detray/test/validation/material_validation_utils.hpp" +#include "detray/test/validation/navigation_validation_utils.hpp" // System include(s) #include diff --git a/tests/include/detray/test/device/cuda/CMakeLists.txt b/tests/include/detray/test/device/cuda/CMakeLists.txt index d3134029a..8f2c63277 100644 --- a/tests/include/detray/test/device/cuda/CMakeLists.txt +++ b/tests/include/detray/test/device/cuda/CMakeLists.txt @@ -21,4 +21,4 @@ add_library( detray_test_cuda STATIC "material_validation.hpp" add_library( detray::test_cuda ALIAS detray_test_cuda ) -target_link_libraries( detray_test_cuda PUBLIC vecmem::cuda covfie::cuda detray::core_array detray::test_device detray::test_cpu detray::test_utils ) +target_link_libraries( detray_test_cuda PUBLIC vecmem::cuda covfie::cuda detray::core_array detray::test_device detray::test_cpu detray::validation_utils ) diff --git a/tests/include/detray/test/device/cuda/material_validation.hpp b/tests/include/detray/test/device/cuda/material_validation.hpp index 19492e00b..03ba9a81e 100644 --- a/tests/include/detray/test/device/cuda/material_validation.hpp +++ b/tests/include/detray/test/device/cuda/material_validation.hpp @@ -15,7 +15,7 @@ #include "detray/test/common/fixture_base.hpp" #include "detray/test/common/material_validation_config.hpp" #include "detray/test/cpu/material_validation.hpp" -#include "detray/test/utils/material_validation_utils.hpp" +#include "detray/test/validation/material_validation_utils.hpp" // Vecmem include(s) #include diff --git a/tests/include/detray/test/device/cuda/navigation_validation.hpp b/tests/include/detray/test/device/cuda/navigation_validation.hpp index 43382ffbe..729277fb9 100644 --- a/tests/include/detray/test/device/cuda/navigation_validation.hpp +++ b/tests/include/detray/test/device/cuda/navigation_validation.hpp @@ -18,11 +18,11 @@ // Detray test include(s) #include "detray/test/common/fixture_base.hpp" #include "detray/test/common/navigation_validation_config.hpp" -#include "detray/test/utils/detector_scan_utils.hpp" -#include "detray/test/utils/detector_scanner.hpp" #include "detray/test/utils/inspectors.hpp" -#include "detray/test/utils/material_validation_utils.hpp" -#include "detray/test/utils/navigation_validation_utils.hpp" +#include "detray/test/validation/detector_scan_utils.hpp" +#include "detray/test/validation/detector_scanner.hpp" +#include "detray/test/validation/material_validation_utils.hpp" +#include "detray/test/validation/navigation_validation_utils.hpp" // Vecmem include(s) #include diff --git a/tests/include/detray/test/device/propagator_test.hpp b/tests/include/detray/test/device/propagator_test.hpp index 7f4a46ea7..58b3cb2db 100644 --- a/tests/include/detray/test/device/propagator_test.hpp +++ b/tests/include/detray/test/device/propagator_test.hpp @@ -24,7 +24,7 @@ // Detray test include(s) #include "detray/test/utils/inspectors.hpp" #include "detray/test/utils/simulation/event_generator/track_generators.hpp" -#include "detray/test/utils/step_tracer.hpp" +#include "detray/test/validation/step_tracer.hpp" // Vecmem include(s) #include diff --git a/tests/include/detray/test/utils/detector_scan_utils.hpp b/tests/include/detray/test/validation/detector_scan_utils.hpp similarity index 99% rename from tests/include/detray/test/utils/detector_scan_utils.hpp rename to tests/include/detray/test/validation/detector_scan_utils.hpp index e646de5de..a80067a7e 100644 --- a/tests/include/detray/test/utils/detector_scan_utils.hpp +++ b/tests/include/detray/test/validation/detector_scan_utils.hpp @@ -14,7 +14,7 @@ #include "detray/plugins/svgtools/illustrator.hpp" // Detray test include(s) -#include "detray/test/utils/svg_display.hpp" +#include "detray/test/validation/svg_display.hpp" // System include(s) #include diff --git a/tests/include/detray/test/utils/detector_scanner.hpp b/tests/include/detray/test/validation/detector_scanner.hpp similarity index 100% rename from tests/include/detray/test/utils/detector_scanner.hpp rename to tests/include/detray/test/validation/detector_scanner.hpp diff --git a/tests/include/detray/test/utils/material_validation_utils.hpp b/tests/include/detray/test/validation/material_validation_utils.hpp similarity index 100% rename from tests/include/detray/test/utils/material_validation_utils.hpp rename to tests/include/detray/test/validation/material_validation_utils.hpp diff --git a/tests/include/detray/test/utils/navigation_validation_utils.hpp b/tests/include/detray/test/validation/navigation_validation_utils.hpp similarity index 99% rename from tests/include/detray/test/utils/navigation_validation_utils.hpp rename to tests/include/detray/test/validation/navigation_validation_utils.hpp index e60c8225e..2c0171720 100644 --- a/tests/include/detray/test/utils/navigation_validation_utils.hpp +++ b/tests/include/detray/test/validation/navigation_validation_utils.hpp @@ -19,8 +19,8 @@ // Detray test include(s) #include "detray/test/utils/inspectors.hpp" -#include "detray/test/utils/material_validation_utils.hpp" -#include "detray/test/utils/step_tracer.hpp" +#include "detray/test/validation/material_validation_utils.hpp" +#include "detray/test/validation/step_tracer.hpp" // System include(s) #include diff --git a/tests/include/detray/test/utils/step_tracer.hpp b/tests/include/detray/test/validation/step_tracer.hpp similarity index 100% rename from tests/include/detray/test/utils/step_tracer.hpp rename to tests/include/detray/test/validation/step_tracer.hpp diff --git a/tests/include/detray/test/utils/svg_display.hpp b/tests/include/detray/test/validation/svg_display.hpp similarity index 100% rename from tests/include/detray/test/utils/svg_display.hpp rename to tests/include/detray/test/validation/svg_display.hpp diff --git a/tests/validation/python/file_checker.py b/tests/tools/python/file_checker.py similarity index 100% rename from tests/validation/python/file_checker.py rename to tests/tools/python/file_checker.py diff --git a/tests/validation/python/impl/__init__.py b/tests/tools/python/impl/__init__.py similarity index 100% rename from tests/validation/python/impl/__init__.py rename to tests/tools/python/impl/__init__.py diff --git a/tests/validation/python/impl/plot_material_scan.py b/tests/tools/python/impl/plot_material_scan.py similarity index 100% rename from tests/validation/python/impl/plot_material_scan.py rename to tests/tools/python/impl/plot_material_scan.py diff --git a/tests/validation/python/impl/plot_navigation_validation.py b/tests/tools/python/impl/plot_navigation_validation.py similarity index 100% rename from tests/validation/python/impl/plot_navigation_validation.py rename to tests/tools/python/impl/plot_navigation_validation.py diff --git a/tests/validation/python/impl/plot_ray_scan.py b/tests/tools/python/impl/plot_ray_scan.py similarity index 100% rename from tests/validation/python/impl/plot_ray_scan.py rename to tests/tools/python/impl/plot_ray_scan.py diff --git a/tests/validation/python/impl/plot_track_params.py b/tests/tools/python/impl/plot_track_params.py similarity index 100% rename from tests/validation/python/impl/plot_track_params.py rename to tests/tools/python/impl/plot_track_params.py diff --git a/tests/validation/python/json_schema/__init__.py b/tests/tools/python/json_schema/__init__.py similarity index 100% rename from tests/validation/python/json_schema/__init__.py rename to tests/tools/python/json_schema/__init__.py diff --git a/tests/validation/python/json_schema/geometry.py b/tests/tools/python/json_schema/geometry.py similarity index 100% rename from tests/validation/python/json_schema/geometry.py rename to tests/tools/python/json_schema/geometry.py diff --git a/tests/validation/python/json_schema/homogeneous_material.py b/tests/tools/python/json_schema/homogeneous_material.py similarity index 100% rename from tests/validation/python/json_schema/homogeneous_material.py rename to tests/tools/python/json_schema/homogeneous_material.py diff --git a/tests/validation/python/json_schema/material_maps.py b/tests/tools/python/json_schema/material_maps.py similarity index 100% rename from tests/validation/python/json_schema/material_maps.py rename to tests/tools/python/json_schema/material_maps.py diff --git a/tests/validation/python/json_schema/surface_grids.py b/tests/tools/python/json_schema/surface_grids.py similarity index 100% rename from tests/validation/python/json_schema/surface_grids.py rename to tests/tools/python/json_schema/surface_grids.py diff --git a/tests/validation/python/material_validation.py b/tests/tools/python/material_validation.py similarity index 100% rename from tests/validation/python/material_validation.py rename to tests/tools/python/material_validation.py diff --git a/tests/validation/python/navigation_validation.py b/tests/tools/python/navigation_validation.py similarity index 100% rename from tests/validation/python/navigation_validation.py rename to tests/tools/python/navigation_validation.py diff --git a/tests/validation/python/options/__init__.py b/tests/tools/python/options/__init__.py similarity index 100% rename from tests/validation/python/options/__init__.py rename to tests/tools/python/options/__init__.py diff --git a/tests/validation/python/options/common_options.py b/tests/tools/python/options/common_options.py similarity index 100% rename from tests/validation/python/options/common_options.py rename to tests/tools/python/options/common_options.py diff --git a/tests/validation/python/options/detector_io_options.py b/tests/tools/python/options/detector_io_options.py similarity index 100% rename from tests/validation/python/options/detector_io_options.py rename to tests/tools/python/options/detector_io_options.py diff --git a/tests/validation/python/options/plotting_options.py b/tests/tools/python/options/plotting_options.py similarity index 100% rename from tests/validation/python/options/plotting_options.py rename to tests/tools/python/options/plotting_options.py diff --git a/tests/validation/python/options/propagation_options.py b/tests/tools/python/options/propagation_options.py similarity index 100% rename from tests/validation/python/options/propagation_options.py rename to tests/tools/python/options/propagation_options.py diff --git a/tests/validation/python/options/track_generator_options.py b/tests/tools/python/options/track_generator_options.py similarity index 100% rename from tests/validation/python/options/track_generator_options.py rename to tests/tools/python/options/track_generator_options.py diff --git a/tests/validation/python/plotting/__init__.py b/tests/tools/python/plotting/__init__.py similarity index 100% rename from tests/validation/python/plotting/__init__.py rename to tests/tools/python/plotting/__init__.py diff --git a/tests/validation/python/plotting/plot_helpers.py b/tests/tools/python/plotting/plot_helpers.py similarity index 100% rename from tests/validation/python/plotting/plot_helpers.py rename to tests/tools/python/plotting/plot_helpers.py diff --git a/tests/validation/python/plotting/pyplot_factory.py b/tests/tools/python/plotting/pyplot_factory.py similarity index 100% rename from tests/validation/python/plotting/pyplot_factory.py rename to tests/tools/python/plotting/pyplot_factory.py diff --git a/tests/validation/root/covariance_validation.C b/tests/tools/root/covariance_validation.C similarity index 100% rename from tests/validation/root/covariance_validation.C rename to tests/tools/root/covariance_validation.C diff --git a/tests/validation/root/jacobian_comparison.C b/tests/tools/root/jacobian_comparison.C similarity index 100% rename from tests/validation/root/jacobian_comparison.C rename to tests/tools/root/jacobian_comparison.C diff --git a/tests/validation/root/jacobian_histogram.C b/tests/tools/root/jacobian_histogram.C similarity index 100% rename from tests/validation/root/jacobian_histogram.C rename to tests/tools/root/jacobian_histogram.C diff --git a/tests/validation/root/rk_tolerance_comparison.C b/tests/tools/root/rk_tolerance_comparison.C similarity index 100% rename from tests/validation/root/rk_tolerance_comparison.C rename to tests/tools/root/rk_tolerance_comparison.C diff --git a/tests/scripts/run_jacobian_validation.sh b/tests/tools/scripts/run_jacobian_validation.sh old mode 100644 new mode 100755 similarity index 90% rename from tests/scripts/run_jacobian_validation.sh rename to tests/tools/scripts/run_jacobian_validation.sh index 49f35ecee..ded79789e --- a/tests/scripts/run_jacobian_validation.sh +++ b/tests/tools/scripts/run_jacobian_validation.sh @@ -6,6 +6,9 @@ # # Mozilla Public License Version 2.0 +# Absolute path of detray git root directory +root_dir="$(git rev-parse --show-toplevel)" + # Number of threads n_threads=1 @@ -240,28 +243,28 @@ cd ${output_dir} if [ "$skip_first_phase" = false ] && [ "$skip_second_phase" = false ]; then # Run rk_tolerance_comparision.C - root -q '../../../tests/validation/root/rk_tolerance_comparison.C+O('${log10_min_rk_tol}','${log10_max_rk_tol}')' + root -q "$root_dir"'/tests/tools/root/rk_tolerance_comparison.C+O('${log10_min_rk_tol}','${log10_max_rk_tol}')' # Run jacobian_histogram.C - root -q -l '../../../tests/validation/root/jacobian_histogram.C+O('${log10_min_rk_tol}')' + root -q -l "$root_dir"'/tests/tools/root/jacobian_histogram.C+O('${log10_min_rk_tol}')' # Run jacobian_comparison.C - root -q -l ../../../tests/validation/root/jacobian_comparison.C+O + root -q -l "$root_dir"/tests/tools/root/jacobian_comparison.C+O # Run covariance_validation.C - root -q -l ../../../tests/validation/root/covariance_validation.C+O + root -q -l "$root_dir"/tests/tools/root/covariance_validation.C+O elif [ "$skip_first_phase" = true ] && [ "$skip_second_phase" = false ]; then # Run covariance_validation.C - root ../../../tests/validation/root/covariance_validation.C+O + root "$root_dir"/tests/tools/root/covariance_validation.C+O elif [ "$skip_first_phase" = false ] && [ "$skip_second_phase" = true ]; then # Run rk_tolerance_comparision.C - root '../../../tests/validation/root/rk_tolerance_comparison.C+O('${log10_min_rk_tol}','${log10_max_rk_tol}')' + root "$root_dir"'/tests/tools/root/rk_tolerance_comparison.C+O('${log10_min_rk_tol}','${log10_max_rk_tol}')' # Run jacobian_histogram.C - root '../../../tests/validation/root/jacobian_histogram.C+O('${log10_min_rk_tol}')' + root "$root_dir"'/tests/tools/root/jacobian_histogram.C+O('${log10_min_rk_tol}')' fi diff --git a/tests/unit_tests/cpu/simulation/detector_scanner.cpp b/tests/unit_tests/cpu/simulation/detector_scanner.cpp index a55569f49..137b7463e 100644 --- a/tests/unit_tests/cpu/simulation/detector_scanner.cpp +++ b/tests/unit_tests/cpu/simulation/detector_scanner.cpp @@ -6,7 +6,7 @@ */ // Project include(s). -#include "detray/test/utils/detector_scanner.hpp" +#include "detray/test/validation/detector_scanner.hpp" #include "detray/definitions/units.hpp" #include "detray/navigation/detail/trajectories.hpp" diff --git a/tests/unit_tests/svgtools/intersections.cpp b/tests/unit_tests/svgtools/intersections.cpp index a2bf4c003..ff11a76bc 100644 --- a/tests/unit_tests/svgtools/intersections.cpp +++ b/tests/unit_tests/svgtools/intersections.cpp @@ -14,10 +14,10 @@ #include "detray/plugins/svgtools/writer.hpp" // Detray test include(s) -#include "detray/test/utils/detector_scanner.hpp" #include "detray/test/utils/detectors/build_toy_detector.hpp" #include "detray/test/utils/simulation/event_generator/track_generators.hpp" -#include "detray/test/utils/svg_display.hpp" +#include "detray/test/validation/detector_scanner.hpp" +#include "detray/test/validation/svg_display.hpp" #include "detray/tracks/tracks.hpp" // Vecmem include(s) diff --git a/tests/unit_tests/svgtools/trajectories.cpp b/tests/unit_tests/svgtools/trajectories.cpp index 36d5a970f..65a682a17 100644 --- a/tests/unit_tests/svgtools/trajectories.cpp +++ b/tests/unit_tests/svgtools/trajectories.cpp @@ -16,9 +16,9 @@ #include "detray/plugins/svgtools/writer.hpp" // Detray test include(s) -#include "detray/test/utils/detector_scanner.hpp" #include "detray/test/utils/detectors/build_toy_detector.hpp" -#include "detray/test/utils/svg_display.hpp" +#include "detray/test/validation/detector_scanner.hpp" +#include "detray/test/validation/svg_display.hpp" // Vecmem include(s) #include diff --git a/tests/unit_tests/svgtools/web.cpp b/tests/unit_tests/svgtools/web.cpp index 993584a84..4c9c9b0f8 100644 --- a/tests/unit_tests/svgtools/web.cpp +++ b/tests/unit_tests/svgtools/web.cpp @@ -15,9 +15,9 @@ #include "detray/plugins/svgtools/writer.hpp" // Detray test include(s) -#include "detray/test/utils/detector_scanner.hpp" #include "detray/test/utils/detectors/build_toy_detector.hpp" -#include "detray/test/utils/svg_display.hpp" +#include "detray/test/validation/detector_scanner.hpp" +#include "detray/test/validation/svg_display.hpp" // Vecmem include(s) #include diff --git a/tutorials/src/cpu/CMakeLists.txt b/tutorials/src/cpu/CMakeLists.txt index 2eb0acaa3..8cbe1d8c8 100644 --- a/tutorials/src/cpu/CMakeLists.txt +++ b/tutorials/src/cpu/CMakeLists.txt @@ -29,5 +29,5 @@ foreach(file ${source_files}) detray_add_tutorial( ${file_name} ${file} LINK_LIBRARIES detray::core_array covfie::core vecmem::core detray::io - detray::tutorial detray::test_utils ) + detray::tutorial detray::validation_utils ) endforeach() diff --git a/tutorials/src/cpu/detector/detector_ray_scan.cpp b/tutorials/src/cpu/detector/detector_ray_scan.cpp index 2149acbc9..b3a80598c 100644 --- a/tutorials/src/cpu/detector/detector_ray_scan.cpp +++ b/tutorials/src/cpu/detector/detector_ray_scan.cpp @@ -8,11 +8,11 @@ // Project include(s) #include "detray/navigation/detail/ray.hpp" #include "detray/navigation/volume_graph.hpp" -#include "detray/test/utils/detector_scan_utils.hpp" -#include "detray/test/utils/detector_scanner.hpp" #include "detray/test/utils/detectors/build_toy_detector.hpp" #include "detray/test/utils/hash_tree.hpp" #include "detray/test/utils/simulation/event_generator/track_generators.hpp" +#include "detray/test/validation/detector_scan_utils.hpp" +#include "detray/test/validation/detector_scanner.hpp" // Example linear algebra plugin: std::array #include "detray/tutorial/types.hpp" diff --git a/tutorials/src/cpu/propagation/navigation_inspection.cpp b/tutorials/src/cpu/propagation/navigation_inspection.cpp index 853f0bb24..35e82c194 100644 --- a/tutorials/src/cpu/propagation/navigation_inspection.cpp +++ b/tutorials/src/cpu/propagation/navigation_inspection.cpp @@ -12,10 +12,10 @@ #include "detray/propagator/actor_chain.hpp" #include "detray/propagator/line_stepper.hpp" #include "detray/propagator/propagator.hpp" -#include "detray/test/utils/detector_scanner.hpp" #include "detray/test/utils/detectors/build_toy_detector.hpp" #include "detray/test/utils/inspectors.hpp" #include "detray/test/utils/simulation/event_generator/track_generators.hpp" +#include "detray/test/validation/detector_scanner.hpp" #include "detray/tracks/tracks.hpp" // Example linear algebra plugin: std::array