2023-03-15 16:13:37 +01:00
|
|
|
#include "test_tensor.h"
|
2023-05-07 14:38:41 +02:00
|
|
|
#include <stdint.h>
|
2023-03-15 16:13:37 +01:00
|
|
|
|
|
|
|
|
void test_run_all(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
2023-05-07 13:32:20 +02:00
|
|
|
void (*test_func[NUM_TEST_FUNC])(void) = {
|
2023-03-15 16:13:37 +01:00
|
|
|
&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 */
|
2023-05-07 14:38:41 +02:00
|
|
|
uint32_t s[4] = {2, 5, 3, 7};
|
2023-03-15 16:13:37 +01:00
|
|
|
tensor t1 = tensor_new();
|
|
|
|
|
tensor t2 = tensor_new();
|
2023-09-03 09:45:20 +02:00
|
|
|
tensor_init_zero(t1, s, 4);
|
|
|
|
|
tensor_init_one(t2, s, 4);
|
2023-03-15 16:13:37 +01:00
|
|
|
tensor_assert_ne(t1, t2);
|
|
|
|
|
|
2023-09-03 09:45:20 +02:00
|
|
|
tensor_init_rand(t1, s, 4, 30);
|
2023-03-15 16:13:37 +01:00
|
|
|
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 */
|
2023-05-07 14:38:41 +02:00
|
|
|
uint32_t s[4] = {2, 5, 3, 7};
|
|
|
|
|
uint32_t index[4] = {0, 0, 0, 0};
|
2023-03-15 16:13:37 +01:00
|
|
|
tensor t1 = tensor_new();
|
|
|
|
|
tensor t2 = tensor_new();
|
|
|
|
|
|
2023-09-03 09:45:20 +02:00
|
|
|
tensor_init_rand(t1, s, 4, 30);
|
|
|
|
|
tensor_init_zero(t2, s, 4);
|
2023-03-15 16:13:37 +01:00
|
|
|
|
|
|
|
|
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 */
|
2023-05-07 14:38:41 +02:00
|
|
|
uint8_t status;
|
|
|
|
|
uint32_t s[4] = {2, 5, 3, 7};
|
|
|
|
|
uint32_t index[4] = {0, 0, 0, 0};
|
2023-03-15 16:13:37 +01:00
|
|
|
tensor t1 = tensor_new();
|
|
|
|
|
tensor t2 = tensor_new();
|
|
|
|
|
|
2023-09-03 09:45:20 +02:00
|
|
|
tensor_init_rand(t1, s, 4, 30);
|
|
|
|
|
tensor_init_zero(t2, s, 4);
|
2023-03-15 16:13:37 +01:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|