From 1749dc41ac5cc2e3db12cb8c0e657616ea3ba236 Mon Sep 17 00:00:00 2001 From: Elias Kohout Date: Wed, 15 Mar 2023 16:13:37 +0100 Subject: [PATCH] Restuctured the project. --- target/build/tensor.o | Bin 0 -> 9480 bytes target/build/tests/main.o | Bin 0 -> 592 bytes target/build/tests/test_tensor.o | Bin 0 -> 6352 bytes target/test | Bin 0 -> 35137 bytes tests/main.c | 9 ++++ tests/test_tensor.c | 89 +++++++++++++++++++++++++++++++ tests/test_tensor.h | 43 +++++++++++++++ 7 files changed, 141 insertions(+) create mode 100644 target/build/tensor.o create mode 100644 target/build/tests/main.o create mode 100644 target/build/tests/test_tensor.o create mode 100755 target/test create mode 100644 tests/main.c create mode 100644 tests/test_tensor.c create mode 100644 tests/test_tensor.h diff --git a/target/build/tensor.o b/target/build/tensor.o new file mode 100644 index 0000000000000000000000000000000000000000..97dedd230c83744000f3dd716713352fb1da85e5 GIT binary patch literal 9480 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 qJll}1p@N2W*@kQl6*M$t8)j;{pE literal 0 HcmV?d00001 diff --git a/target/build/tests/main.o b/target/build/tests/main.o new file mode 100644 index 0000000000000000000000000000000000000000..a301bd4536f4fa01550f8e531bd6f657e80c6c5d GIT binary patch literal 592 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 Y(SZ1>714lr%!+70JZeQWAU3K00;Y=HB>(^b literal 0 HcmV?d00001 diff --git a/target/test b/target/test new file mode 100755 index 0000000000000000000000000000000000000000..7697395d94098f9359213427241de06106d5ea86 GIT binary patch literal 35137 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 M|L3`dYi8X2zx3))cK`qY literal 0 HcmV?d00001 diff --git a/tests/main.c b/tests/main.c new file mode 100644 index 0000000..b9a7725 --- /dev/null +++ b/tests/main.c @@ -0,0 +1,9 @@ +#include "../tensor.h" +#include "test_tensor.h" + +int main(void) +{ + test_run_all(); + return 0; +} + diff --git a/tests/test_tensor.c b/tests/test_tensor.c new file mode 100644 index 0000000..be47489 --- /dev/null +++ b/tests/test_tensor.c @@ -0,0 +1,89 @@ +#include "test_tensor.h" + +void test_run_all(void) +{ + int i; + void (*test_func[NUM_TEST_FUNC])() = { + &test_tensor_is_equal, + &test_tensor_set, + &test_tensor_get, + }; + + printf("\n### Running tests... ###\n\n"); + for(i = 0; i < NUM_TEST_FUNC; i++) { + test_func[i](); + } + printf("\n### %i functions tested. ###\n\n", NUM_TEST_FUNC); +} + +void test_tensor_is_equal(void) +{ + /* Depends on tensor_cpy, tensor_is_equal, tensor_init_zero, tensor_init_rand */ + int s[4] = {2, 5, 3, 7}; + tensor t1 = tensor_new(); + tensor t2 = tensor_new(); + + tensor_init_zero(t1, 4, s); + tensor_init_one(t2, 4, s); + tensor_assert_ne(t1, t2); + + tensor_init_rand(t1, 4, s, 30); + tensor_cpy(t2, t1); + + tensor_assert_eq(t1, t2); + tensor_destroy(t1); + tensor_destroy(t2); +} + +void test_tensor_set(void) +{ + /* Depends on tensor_is_equal, tensor_init_zero, tensor_init_rand */ + int s[4] = {2, 5, 3, 7}; + int index[4] = {0, 0, 0, 0}; + tensor t1 = tensor_new(); + tensor t2 = tensor_new(); + + tensor_init_rand(t1, 4, s, 30); + tensor_init_zero(t2, 4, s); + + for (index[0] = 0; index[0] < s[0]; ++index[0]) { + for (index[1] = 0; index[1] < s[1]; ++index[1]) { + for (index[2] = 0; index[2] < s[2]; ++index[2]) { + for (index[3] = 0; index[3] < s[3]; ++index[3]) { + tensor_assert(tensor_set(t1, index, 0), "mute"); + } + } + } + } + tensor_assert_eq(t1, t2); + tensor_destroy(t1); + tensor_destroy(t2); +} + +void test_tensor_get(void) +{ + /* Depends on tensor_is_equal, tensor_set, tensor_init_zero, tensor_init_rand */ + int status; + int s[4] = {2, 5, 3, 7}; + int index[4] = {0, 0, 0, 0}; + tensor t1 = tensor_new(); + tensor t2 = tensor_new(); + + tensor_init_rand(t1, 4, s, 30); + tensor_init_zero(t2, 4, s); + + for (index[0] = 0; index[0] < s[0]; ++index[0]) { + for (index[1] = 0; index[1] < s[1]; ++index[1]) { + for (index[2] = 0; index[2] < s[2]; ++index[2]) { + for (index[3] = 0; index[3] < s[3]; ++index[3]) { + tensor_set(t2, index, tensor_get(t1, index, &status)); + tensor_assert(status, "mute"); + } + } + } + } + tensor_assert_eq(t1, t2); + tensor_destroy(t1); + tensor_destroy(t2); +} + diff --git a/tests/test_tensor.h b/tests/test_tensor.h new file mode 100644 index 0000000..4e64066 --- /dev/null +++ b/tests/test_tensor.h @@ -0,0 +1,43 @@ +#ifndef _TEST_TENSOR_H_INCLUDED_ +#define _TEST_TENSOR_H_INCLUDED_ + +#include +#include +#include +#include "../tensor.h" + +#define NUM_TEST_FUNC 3 + +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_RESET "\x1b[0m" +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_YELLOW "\x1b[33m" +#define ANSI_COLOR_BLUE "\x1b[34m" + +#define tensor_assert(X, msg) do{ \ + FILE* stream = stderr; \ + if (!X) { \ + fputs(ANSI_COLOR_RED "Assertion failed: " ANSI_COLOR_RESET, stream); \ + fprintf(stream, \ + "function %s, file %s, line %i. ", __func__, __FILE__, __LINE__); \ + fputs(msg, stream); \ + fputc('\n', stream); \ + } else if (strcmp(msg, "mute") != 0) { \ + fputs(ANSI_COLOR_GREEN "Assertion succeeded: " ANSI_COLOR_RESET, stream); \ + fprintf(stream, \ + "function %s, file %s, line %i. ", __func__, __FILE__, __LINE__); \ + fputc('\n', stream); \ + } \ +} while (0) + +#define tensor_assert_eq(X, Y) tensor_assert(tensor_is_equal((X), (Y)), "(tensor_assert_eq)") +#define tensor_assert_ne(X, Y) tensor_assert(!tensor_is_equal((X), (Y)), "(tensor_assert_ne)") + +void test_run_all(void); + +void test_tensor_is_equal(void); +void test_tensor_set(void); +void test_tensor_get(void); + +#endif +