diff options
| author | Gertjan van den Burg <burg@ese.eur.nl> | 2016-10-18 10:10:42 +0200 |
|---|---|---|
| committer | Gertjan van den Burg <burg@ese.eur.nl> | 2016-10-18 10:10:42 +0200 |
| commit | f1c85f42cfdab051599d2e2b5157c1fb447ebfad (patch) | |
| tree | 4044f10bdffbc3593af258fc6ce4a60fa9ba2dab /tests | |
| parent | minor documentation fixes (diff) | |
| download | gensvm-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.c | 144 |
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; } |
