aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGertjan van den Burg <burg@ese.eur.nl>2016-10-18 10:10:42 +0200
committerGertjan van den Burg <burg@ese.eur.nl>2016-10-18 10:10:42 +0200
commitf1c85f42cfdab051599d2e2b5157c1fb447ebfad (patch)
tree4044f10bdffbc3593af258fc6ce4a60fa9ba2dab /tests
parentminor documentation fixes (diff)
downloadgensvm-f1c85f42cfdab051599d2e2b5157c1fb447ebfad.tar.gz
gensvm-f1c85f42cfdab051599d2e2b5157c1fb447ebfad.zip
fix problems with dense ZV computation when data->n < model->n
Diffstat (limited to 'tests')
-rw-r--r--tests/src/test_gensvm_zv.c144
1 files changed, 140 insertions, 4 deletions
diff --git a/tests/src/test_gensvm_zv.c b/tests/src/test_gensvm_zv.c
index 21dd897..9fd206d 100644
--- a/tests/src/test_gensvm_zv.c
+++ b/tests/src/test_gensvm_zv.c
@@ -25,7 +25,7 @@
#include "minunit.h"
#include "gensvm_zv.h"
-char *test_zv_dense()
+char *test_zv_dense_1()
{
int n = 8,
m = 3,
@@ -129,7 +129,71 @@ char *test_zv_dense()
return NULL;
}
-char *test_zv_sparse()
+char *test_zv_dense_2()
+{
+ int n = 8,
+ m = 3,
+ K = 3;
+
+ struct GenModel *model = gensvm_init_model();
+ model->n = n;
+ model->m = m;
+ model->K = K;
+ model->V = Calloc(double, (m+1)*(K-1));
+ matrix_set(model->V, model->K-1, 0, 0, 0.9025324416711976);
+ matrix_set(model->V, model->K-1, 0, 1, 0.9776784486541952);
+ matrix_set(model->V, model->K-1, 1, 0, 0.8336347240271171);
+ matrix_set(model->V, model->K-1, 1, 1, 0.1213543508830703);
+ matrix_set(model->V, model->K-1, 2, 0, 0.9401310852208050);
+ matrix_set(model->V, model->K-1, 2, 1, 0.7407478086613410);
+ matrix_set(model->V, model->K-1, 3, 0, 0.9053353815353901);
+ matrix_set(model->V, model->K-1, 3, 1, 0.8056059951641629);
+
+ struct GenData *data = gensvm_init_data();
+ data->n = 3;
+ data->m = m;
+ data->K = K;
+ data->Z = Calloc(double, data->n*(data->m+1));
+ matrix_set(data->Z, data->m+1, 0, 0, 1.0000000000000000);
+ matrix_set(data->Z, data->m+1, 0, 1, 0.4787662921736276);
+ matrix_set(data->Z, data->m+1, 0, 2, 0.7983044792882817);
+ matrix_set(data->Z, data->m+1, 0, 3, 0.4273006962165122);
+ matrix_set(data->Z, data->m+1, 1, 0, 1.0000000000000000);
+ matrix_set(data->Z, data->m+1, 1, 1, 0.7160319769123790);
+ matrix_set(data->Z, data->m+1, 1, 2, 0.5233066338418962);
+ matrix_set(data->Z, data->m+1, 1, 3, 0.4063256860579537);
+ matrix_set(data->Z, data->m+1, 2, 0, 1.0000000000000000);
+ matrix_set(data->Z, data->m+1, 2, 1, 0.3735389652435536);
+ matrix_set(data->Z, data->m+1, 2, 2, 0.8156214578257802);
+ matrix_set(data->Z, data->m+1, 2, 3, 0.6928367712901857);
+
+ // start test code //
+ double *ZV = Calloc(double, data->n*(K-1));
+ double eps = 1e-14;
+ gensvm_calculate_ZV(model, data, ZV);
+
+ mu_assert(fabs(matrix_get(ZV, K-1, 0, 0) - 2.4390099428102818) < eps,
+ "Incorrect ZV at 0, 0");
+ mu_assert(fabs(matrix_get(ZV, K-1, 0, 1) - 1.9713571175527906) < eps,
+ "Incorrect ZV at 0, 1");
+ mu_assert(fabs(matrix_get(ZV, K-1, 1, 0) - 2.3592794147310747) < eps,
+ "Incorrect ZV at 1, 0");
+ mu_assert(fabs(matrix_get(ZV, K-1, 1, 1) - 1.7795486953777246) < eps,
+ "Incorrect ZV at 1, 1");
+ mu_assert(fabs(matrix_get(ZV, K-1, 2, 0) - 2.6079682228282564) < eps,
+ "Incorrect ZV at 2, 0");
+ mu_assert(fabs(matrix_get(ZV, K-1, 2, 1) - 2.1853322915140310) < eps,
+ "Incorrect ZV at 2, 1");
+
+ free(ZV);
+ // end test code //
+ gensvm_free_data(data);
+ gensvm_free_model(model);
+
+ return NULL;
+}
+
+char *test_zv_sparse_1()
{
int n = 8,
m = 3,
@@ -239,11 +303,83 @@ char *test_zv_sparse()
return NULL;
}
+char *test_zv_sparse_2()
+{
+ int n = 8,
+ m = 3,
+ K = 3;
+
+ struct GenModel *model = gensvm_init_model();
+ model->n = n;
+ model->m = m;
+ model->K = K;
+ model->V = Calloc(double, (m+1)*(K-1));
+ matrix_set(model->V, model->K-1, 0, 0, 0.9025324416711976);
+ matrix_set(model->V, model->K-1, 0, 1, 0.9776784486541952);
+ matrix_set(model->V, model->K-1, 1, 0, 0.8336347240271171);
+ matrix_set(model->V, model->K-1, 1, 1, 0.1213543508830703);
+ matrix_set(model->V, model->K-1, 2, 0, 0.9401310852208050);
+ matrix_set(model->V, model->K-1, 2, 1, 0.7407478086613410);
+ matrix_set(model->V, model->K-1, 3, 0, 0.9053353815353901);
+ matrix_set(model->V, model->K-1, 3, 1, 0.8056059951641629);
+
+ struct GenData *data = gensvm_init_data();
+ data->n = 3;
+ data->m = m;
+ data->K = K;
+ data->Z = Calloc(double, data->n*(data->m+1));
+ matrix_set(data->Z, data->m+1, 0, 0, 1.0000000000000000);
+ matrix_set(data->Z, data->m+1, 0, 1, 0.4787662921736276);
+ matrix_set(data->Z, data->m+1, 0, 2, 0.7983044792882817);
+ matrix_set(data->Z, data->m+1, 0, 3, 0.4273006962165122);
+ matrix_set(data->Z, data->m+1, 1, 0, 1.0000000000000000);
+ matrix_set(data->Z, data->m+1, 1, 1, 0.7160319769123790);
+ matrix_set(data->Z, data->m+1, 1, 2, 0.5233066338418962);
+ matrix_set(data->Z, data->m+1, 1, 3, 0.4063256860579537);
+ matrix_set(data->Z, data->m+1, 2, 0, 1.0000000000000000);
+ matrix_set(data->Z, data->m+1, 2, 1, 0.3735389652435536);
+ matrix_set(data->Z, data->m+1, 2, 2, 0.8156214578257802);
+ matrix_set(data->Z, data->m+1, 2, 3, 0.6928367712901857);
+
+ // convert Z to sparse matrix
+ data->spZ = gensvm_dense_to_sparse(data->Z, data->n, data->m+1);
+ free(data->Z);
+ data->RAW = NULL;
+ data->Z = NULL;
+
+ // start test code //
+ double *ZV = Calloc(double, data->n*(data->K-1));
+ double eps = 1e-14;
+ gensvm_calculate_ZV(model, data, ZV);
+
+ mu_assert(fabs(matrix_get(ZV, K-1, 0, 0) - 2.4390099428102818) < eps,
+ "Incorrect ZV at 0, 0");
+ mu_assert(fabs(matrix_get(ZV, K-1, 0, 1) - 1.9713571175527906) < eps,
+ "Incorrect ZV at 0, 1");
+ mu_assert(fabs(matrix_get(ZV, K-1, 1, 0) - 2.3592794147310747) < eps,
+ "Incorrect ZV at 1, 0");
+ mu_assert(fabs(matrix_get(ZV, K-1, 1, 1) - 1.7795486953777246) < eps,
+ "Incorrect ZV at 1, 1");
+ mu_assert(fabs(matrix_get(ZV, K-1, 2, 0) - 2.6079682228282564) < eps,
+ "Incorrect ZV at 2, 0");
+ mu_assert(fabs(matrix_get(ZV, K-1, 2, 1) - 2.1853322915140310) < eps,
+ "Incorrect ZV at 2, 1");
+
+ free(ZV);
+ // end test code //
+ gensvm_free_data(data);
+ gensvm_free_model(model);
+
+ return NULL;
+}
+
char *all_tests()
{
mu_suite_start();
- mu_run_test(test_zv_dense);
- mu_run_test(test_zv_sparse);
+ mu_run_test(test_zv_dense_1);
+ mu_run_test(test_zv_dense_2);
+ mu_run_test(test_zv_sparse_1);
+ mu_run_test(test_zv_sparse_2);
return NULL;
}