From c5c39b87a2fe3d9ebd7d5a363e7256bfcc437bd3 Mon Sep 17 00:00:00 2001 From: "dario.genga" <dario.genga@etu.hesge.ch> Date: Tue, 23 Nov 2021 00:49:52 +0100 Subject: [PATCH] Add matrix equals, get and set Also added some matrix destroy to the tests to free the memory. --- main.c | 21 ++++++++++++++++++--- matrix.c | 36 ++++++++++++++++++++++++++++++++++++ test.c | 9 +++++++-- tests | Bin 0 -> 34656 bytes 4 files changed, 61 insertions(+), 5 deletions(-) create mode 100755 tests diff --git a/main.c b/main.c index 2ddb2da..bf04085 100644 --- a/main.c +++ b/main.c @@ -5,9 +5,6 @@ #include <stdio.h> #include <stdlib.h> -// #include <math.h> -// #include <time.h> -// #include <stdbool.h> #include "matrix.h" int main() { @@ -37,6 +34,24 @@ int main() { matrix_extract_submatrix(&sub, transposed, 1, 4, 1, 3); printf("Sub matrix :\n"); matrix_print(sub); + // Equal + if (matrix_is_equal(mat, cloned)) { + printf("The following matrix are equals :\n"); + } else { + printf("The following matrix are not equals :\n"); + } + printf("Matrix 1\n"); + matrix_print(mat); + printf("Matrix 2\n"); + matrix_print(cloned); + // Get & set + int32_t element; + matrix_get(&element, mat, 0, 0); + printf("First element of the first matrix : %d\n", element); + matrix_set(mat, 0, 0, 42); + printf("The first element of the first matrix has been changed :\n"); + matrix_print(mat); + // Free the memory matrix_destroy(&mat); matrix_destroy(&cloned); diff --git a/matrix.c b/matrix.c index c477170..5d5c313 100644 --- a/matrix.c +++ b/matrix.c @@ -140,3 +140,39 @@ error_code matrix_extract_submatrix(matrix *sub, const matrix mat, int32_t m0, i return ok; } + + +bool matrix_is_equal(matrix mat1, matrix mat2) { + if (mat1.m != mat2.m || mat1.n != mat2.n) { + return false; + } + + // Parse each values of the matrix + for (int i = 0; i < mat1.m; i++) { + for (int k = 0; k < mat1.n; k++) { + if (mat1.data[i][k] != mat2.data[i][k]) { + return false; + } + } + } + return true; +} + +error_code matrix_get(int32_t *elem, const matrix mat, int32_t ix, int32_t iy) { + if (ix < 0 || iy < 0 || iy >= mat.m || ix >= mat.n) { + return err; + } + *elem = mat.data[iy][ix]; + + return ok; +} + + +error_code matrix_set(matrix mat, int32_t ix, int32_t iy, int32_t elem) { + if (ix < 0 || iy < 0 || ix > mat.m || iy > mat.n) { + return err; + } + mat.data[iy][ix] = elem; + + return ok; +} diff --git a/test.c b/test.c index f65c4e9..9e99184 100644 --- a/test.c +++ b/test.c @@ -4,7 +4,6 @@ */ #include "matrix.h" #include <assert.h> -#include <math.h> #include <stdbool.h> #include <stdio.h> @@ -24,8 +23,11 @@ int main() { // Starting the tests... printf("Starting the tests...\n"); assert(matrix_alloc(&mat, m, n) == ok); + assert(matrix_destroy(&mat) == ok); assert(matrix_init(&mat, m, n, val) == ok); + assert(matrix_destroy(&mat) == ok); assert(matrix_init(&mat, -1, n, val) == err); + assert(matrix_destroy(&mat) == ok); assert(matrix_init_from_array(&mat, m, n, data, m*n) == ok); assert(matrix_clone(&cloned, mat) == ok); assert(matrix_transpose(&transposed, mat) == ok); @@ -37,8 +39,11 @@ int main() { assert(matrix_set(mat, 0, 0, set_elem) == ok); assert(mat.data[0][0] == set_elem); assert(matrix_destroy(&mat) == ok); + matrix_destroy(&cloned); + matrix_destroy(&transposed); + matrix_destroy(&sub); - printf("The tests are completed and were successful !"); + printf("The tests are completed and were successful !\n"); return EXIT_SUCCESS; } diff --git a/tests b/tests new file mode 100755 index 0000000000000000000000000000000000000000..cdf7679023159a823f7a880a0cb3df0001d843d5 GIT binary patch literal 34656 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 UhoLC}%WS9tQw*7C8ql~50CXxx0RR91 literal 0 HcmV?d00001 -- GitLab