| #include "jtest.h" |
| #include "matrix_test_data.h" |
| #include "arr_desc.h" |
| #include "arm_math.h" /* FUTs */ |
| #include "ref.h" /* Reference Functions */ |
| #include "test_templates.h" |
| #include "matrix_templates.h" |
| #include "type_abbrev.h" |
| |
| JTEST_DEFINE_TEST(arm_mat_inverse_f32_test, arm_mat_inverse_f32) |
| { |
| TEMPLATE_DO_ARR_DESC( |
| mat_idx, arm_matrix_instance_f32 *, mat_ptr, matrix_f32_invertible_inputs |
| , |
| JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n", |
| (int)mat_ptr->numRows, |
| (int)mat_ptr->numCols); |
| |
| if (MATRIX_TEST_VALID_SQUARE_DIMENSIONS(arm_matrix_instance_f32 *, mat_ptr)) |
| { |
| MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT(arm_matrix_instance_f32 *, mat_ptr); |
| |
| /* arm_mat_inverse_f32() modifies its source input. Use the scratch |
| * buffer to store a copy of the intended input. */ |
| { |
| float32_t * original_pdata_ptr = mat_ptr->pData; |
| |
| memcpy(matrix_output_scratch, |
| mat_ptr->pData, |
| mat_ptr->numRows * mat_ptr->numCols * sizeof(float32_t)); |
| mat_ptr->pData = (void*) &matrix_output_scratch; |
| |
| JTEST_COUNT_CYCLES(arm_mat_inverse_f32(mat_ptr, &matrix_output_fut)); |
| mat_ptr->pData = original_pdata_ptr; |
| } |
| |
| ref_mat_inverse_f32(mat_ptr, &matrix_output_ref); |
| |
| MATRIX_SNR_COMPARE_INTERFACE(arm_matrix_instance_f32, |
| float32_t); |
| }); |
| |
| return JTEST_TEST_PASSED; |
| } |
| |
| JTEST_DEFINE_TEST(arm_mat_inverse_f64_test, arm_mat_inverse_f64) |
| { |
| TEMPLATE_DO_ARR_DESC( |
| mat_idx, arm_matrix_instance_f64 *, mat_ptr, matrix_f64_invertible_inputs |
| , |
| JTEST_DUMP_STRF("Matrix Dimensions: %dx%d\n", |
| (int)mat_ptr->numRows, |
| (int)mat_ptr->numCols); |
| |
| if (MATRIX_TEST_VALID_SQUARE_DIMENSIONS(arm_matrix_instance_f64 *, mat_ptr)) |
| { |
| MATRIX_TEST_CONFIG_SAMESIZE_OUTPUT(arm_matrix_instance_f64 *, mat_ptr); |
| |
| /* arm_mat_inverse_f64() modifies its source input. Use the scratch |
| * buffer to store a copy of the intended input. */ |
| { |
| float64_t * original_pdata_ptr = mat_ptr->pData; |
| |
| memcpy(matrix_output_scratch, |
| mat_ptr->pData, |
| mat_ptr->numRows * mat_ptr->numCols * sizeof(float64_t)); |
| mat_ptr->pData = (void*) &matrix_output_scratch; |
| |
| JTEST_COUNT_CYCLES(arm_mat_inverse_f64(mat_ptr, &matrix_output_fut64)); |
| mat_ptr->pData = original_pdata_ptr; |
| } |
| |
| ref_mat_inverse_f64(mat_ptr, &matrix_output_ref64); |
| |
| MATRIX_DBL_SNR_COMPARE_INTERFACE(arm_matrix_instance_f64); |
| }); |
| |
| return JTEST_TEST_PASSED; |
| } |
| |
| /*--------------------------------------------------------------------------------*/ |
| /* Collect all tests in a group. */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| JTEST_DEFINE_GROUP(mat_inverse_tests) |
| { |
| /* |
| To skip a test, comment it out. |
| */ |
| JTEST_TEST_CALL(arm_mat_inverse_f32_test); |
| JTEST_TEST_CALL(arm_mat_inverse_f64_test); |
| } |