/**
* @file tiny_mat_test.c
* @brief This file implements test functions for the submodule mat of the tiny_math middleware.
*/
#include "tiny_mat_test.h"
#define ROWS 2
#define COLS 3
#define PAD 1
#define FULL_WIDTH (COLS + PAD)
void tiny_mat_test(void)
{
float A[ROWS * FULL_WIDTH] = {
1, 2, 3, 0,
4, 5, 6, 0};
float B[COLS * FULL_WIDTH] = {
7, 8, 9, 0,
10, 11, 12, 0,
13, 14, 15, 0};
float A_compact[ROWS * COLS] = {0};
float B_compact[COLS * COLS] = {0};
float C_compact[ROWS * COLS] = {0};
float output_general[ROWS * FULL_WIDTH] = {0};
float constant = 2.0f;
for (int i = 0; i < ROWS; i++)
for (int j = 0; j < COLS; j++)
A_compact[i * COLS + j] = A[i * FULL_WIDTH + j];
for (int i = 0; i < COLS; i++)
for (int j = 0; j < COLS; j++)
B_compact[i * COLS + j] = B[i * FULL_WIDTH + j];
printf("============ [tiny_mat_test - Full Coverage] ============\n\r");
printf("[TEST SETTINGS] ROWS=%d, COLS=%d, PAD=%d, FULL_WIDTH=%d\n\r", ROWS, COLS, PAD, FULL_WIDTH);
print_matrix_padded("A (padded) | memory layout", A, ROWS, FULL_WIDTH, FULL_WIDTH);
print_matrix_padded("B (padded) | memory layout", B, COLS, FULL_WIDTH, FULL_WIDTH);
print_matrix("A_compact", A_compact, ROWS, COLS);
print_matrix("B_compact", B_compact, COLS, COLS);
printf("constant = %f\n\r\n\r", constant);
TinyTimeMark_t t0, t1;
tiny_error_t err;
t0 = tiny_get_running_time();
err = tiny_mat_add_f32(A, B, output_general, ROWS, COLS, PAD, PAD, PAD, 1, 1, 1);
t1 = tiny_get_running_time();
printf("--- tiny_mat_add_f32(rows=%d, cols=%d, paddings=1) | Time: %6.2f us | Error: %d ---\n\r", ROWS, COLS, (double)(t1 - t0), err);
print_matrix_padded("Output (padded)", output_general, ROWS, COLS, FULL_WIDTH);
t0 = tiny_get_running_time();
err = tiny_mat_addc_f32(A, output_general, constant, ROWS, COLS, PAD, PAD, 1, 1);
t1 = tiny_get_running_time();
printf("--- tiny_mat_addc_f32(C=%f) | Time: %6.2f us | Error: %d ---\n\r", constant, (double)(t1 - t0), err);
print_matrix_padded("Output (padded)", output_general, ROWS, COLS, FULL_WIDTH);
t0 = tiny_get_running_time();
err = tiny_mat_sub_f32(A, B, output_general, ROWS, COLS, PAD, PAD, PAD, 1, 1, 1);
t1 = tiny_get_running_time();
printf("--- tiny_mat_sub_f32(rows=%d, cols=%d) | Time: %6.2f us | Error: %d ---\n\r", ROWS, COLS, (double)(t1 - t0), err);
print_matrix_padded("Output (padded)", output_general, ROWS, COLS, FULL_WIDTH);
t0 = tiny_get_running_time();
err = tiny_mat_subc_f32(A, output_general, constant, ROWS, COLS, PAD, PAD, 1, 1);
t1 = tiny_get_running_time();
printf("--- tiny_mat_subc_f32(C=%f) | Time: %6.2f us | Error: %d ---\n\r", constant, (double)(t1 - t0), err);
print_matrix_padded("Output (padded)", output_general, ROWS, COLS, FULL_WIDTH);
t0 = tiny_get_running_time();
err = tiny_mat_multc_f32(A, output_general, constant, ROWS, COLS, PAD, PAD, 1, 1);
t1 = tiny_get_running_time();
printf("--- tiny_mat_multc_f32(C=%f) | Time: %6.2f us | Error: %d ---\n\r", constant, (double)(t1 - t0), err);
print_matrix_padded("Output (padded)", output_general, ROWS, COLS, FULL_WIDTH);
t0 = tiny_get_running_time();
err = tiny_mat_mult_f32(A_compact, B_compact, C_compact, ROWS, COLS, COLS);
t1 = tiny_get_running_time();
printf("--- tiny_mat_mult_f32 (compact) | Time: %6.2f us | Error: %d ---\n\r", (double)(t1 - t0), err);
print_matrix("Output (compact)", C_compact, ROWS, COLS);
t0 = tiny_get_running_time();
err = tiny_mat_mult_ex_f32(A, B, output_general, ROWS, COLS, COLS, PAD, PAD, PAD);
t1 = tiny_get_running_time();
printf("--- tiny_mat_mult_ex_f32(padded) | Time: %6.2f us | Error: %d ---\n\r", (double)(t1 - t0), err);
print_matrix_padded("Output (padded)", output_general, ROWS, COLS, FULL_WIDTH);
printf("============ [test complete] ============\n\r");
}