32 char *filename =
"./data/test_file_read_data.txt";
39 mu_assert(data->
n == 5,
"Incorrect value for n");
40 mu_assert(data->
m == 3,
"Incorrect value for m");
41 mu_assert(data->
r == 3,
"Incorrect value for r");
42 mu_assert(data->
K == 4,
"Incorrect value for K");
46 "Incorrect Z value at 0, 1");
48 "Incorrect Z value at 0, 2");
50 "Incorrect Z value at 0, 3");
52 "Incorrect Z value at 1, 1");
54 "Incorrect Z value at 1, 2");
56 "Incorrect Z value at 1, 3");
58 "Incorrect Z value at 2, 1");
60 "Incorrect Z value at 2, 2");
62 "Incorrect Z value at 2, 3");
64 "Incorrect Z value at 3, 1");
66 "Incorrect Z value at 3, 2");
68 "Incorrect Z value at 3, 3");
70 "Incorrect Z value at 4, 1");
72 "Incorrect Z value at 4, 2");
74 "Incorrect Z value at 4, 3");
76 mu_assert(data->
Z == data->
RAW,
"Z pointer doesn't equal RAW pointer");
79 mu_assert(data->
y[0] == 2,
"Incorrect label read at 0");
80 mu_assert(data->
y[1] == 1,
"Incorrect label read at 1");
81 mu_assert(data->
y[2] == 3,
"Incorrect label read at 2");
82 mu_assert(data->
y[3] == 4,
"Incorrect label read at 3");
83 mu_assert(data->
y[4] == 3,
"Incorrect label read at 4");
87 "Incorrect Z value at 0, 0");
89 "Incorrect Z value at 1, 0");
91 "Incorrect Z value at 2, 0");
93 "Incorrect Z value at 3, 0");
95 "Incorrect Z value at 4, 0");
105 char *filename =
"./data/test_file_read_data_sparse.txt";
112 mu_assert(data->
n == 10,
"Incorrect value for n");
113 mu_assert(data->
m == 3,
"Incorrect value for m");
114 mu_assert(data->
r == 3,
"Incorrect value for r");
115 mu_assert(data->
K == 4,
"Incorrect value for K");
118 mu_assert(data->
Z == NULL,
"Z pointer isn't NULL");
129 "Incorrect nonzero value at 0");
131 "Incorrect nonzero value at 1");
133 "Incorrect nonzero value at 2");
135 "Incorrect nonzero value at 3");
137 "Incorrect nonzero value at 4");
139 "Incorrect nonzero value at 5");
141 "Incorrect nonzero value at 6");
143 "Incorrect nonzero value at 7");
145 "Incorrect nonzero value at 8");
147 "Incorrect nonzero value at 9");
149 "Incorrect nonzero value at 10");
151 "Incorrect nonzero value at 11");
153 "Incorrect nonzero value at 12");
155 "Incorrect nonzero value at 13");
187 mu_assert(data->
y[0] == 2,
"Incorrect label read at 0");
188 mu_assert(data->
y[1] == 1,
"Incorrect label read at 1");
189 mu_assert(data->
y[2] == 3,
"Incorrect label read at 2");
190 mu_assert(data->
y[3] == 4,
"Incorrect label read at 3");
191 mu_assert(data->
y[4] == 3,
"Incorrect label read at 4");
201 char *filename =
"./data/test_file_read_data_no_label.txt";
208 mu_assert(data->
n == 5,
"Incorrect value for n");
209 mu_assert(data->
m == 3,
"Incorrect value for m");
210 mu_assert(data->
r == 3,
"Incorrect value for r");
211 mu_assert(data->
K == 0,
"Incorrect value for K");
215 "Incorrect Z value at 0, 1");
217 "Incorrect Z value at 0, 2");
219 "Incorrect Z value at 0, 3");
221 "Incorrect Z value at 1, 1");
223 "Incorrect Z value at 1, 2");
225 "Incorrect Z value at 1, 3");
227 "Incorrect Z value at 2, 1");
229 "Incorrect Z value at 2, 2");
231 "Incorrect Z value at 2, 3");
233 "Incorrect Z value at 3, 1");
235 "Incorrect Z value at 3, 2");
237 "Incorrect Z value at 3, 3");
239 "Incorrect Z value at 4, 1");
241 "Incorrect Z value at 4, 2");
243 "Incorrect Z value at 4, 3");
245 mu_assert(data->
Z == data->
RAW,
"Z pointer doesn't equal RAW pointer");
248 mu_assert(data->
y == NULL,
"Outcome pointer is not NULL");
252 "Incorrect Z value at 0, 0");
254 "Incorrect Z value at 1, 0");
256 "Incorrect Z value at 2, 0");
258 "Incorrect Z value at 3, 0");
260 "Incorrect Z value at 4, 0");
270 char *filename =
"./data/test_file_read_data_libsvm.txt";
277 mu_assert(data->
n == 5,
"Incorrect value for n");
278 mu_assert(data->
m == 3,
"Incorrect value for m");
279 mu_assert(data->
r == 3,
"Incorrect value for r");
280 mu_assert(data->
K == 4,
"Incorrect value for K");
284 "Incorrect Z value at 0, 1");
286 "Incorrect Z value at 0, 2");
288 "Incorrect Z value at 0, 3");
290 "Incorrect Z value at 1, 1");
292 "Incorrect Z value at 1, 2");
294 "Incorrect Z value at 1, 3");
296 "Incorrect Z value at 2, 1");
298 "Incorrect Z value at 2, 2");
300 "Incorrect Z value at 2, 3");
302 "Incorrect Z value at 3, 1");
304 "Incorrect Z value at 3, 2");
306 "Incorrect Z value at 3, 3");
308 "Incorrect Z value at 4, 1");
310 "Incorrect Z value at 4, 2");
312 "Incorrect Z value at 4, 3");
314 mu_assert(data->
Z == data->
RAW,
"Z pointer doesn't equal RAW pointer");
317 mu_assert(data->
y[0] == 2,
"Incorrect label read at 0");
318 mu_assert(data->
y[1] == 1,
"Incorrect label read at 1");
319 mu_assert(data->
y[2] == 3,
"Incorrect label read at 2");
320 mu_assert(data->
y[3] == 4,
"Incorrect label read at 3");
321 mu_assert(data->
y[4] == 3,
"Incorrect label read at 4");
325 "Incorrect Z value at 0, 0");
327 "Incorrect Z value at 1, 0");
329 "Incorrect Z value at 2, 0");
331 "Incorrect Z value at 3, 0");
333 "Incorrect Z value at 4, 0");
344 char *filename =
"./data/test_file_read_data_libsvm_0.txt";
351 mu_assert(data->
n == 5,
"Incorrect value for n");
352 mu_assert(data->
m == 3,
"Incorrect value for m");
353 mu_assert(data->
r == 3,
"Incorrect value for r");
354 mu_assert(data->
K == 4,
"Incorrect value for K");
358 "Incorrect Z value at 0, 1");
360 "Incorrect Z value at 0, 2");
362 "Incorrect Z value at 0, 3");
364 "Incorrect Z value at 1, 1");
366 "Incorrect Z value at 1, 2");
368 "Incorrect Z value at 1, 3");
370 "Incorrect Z value at 2, 1");
372 "Incorrect Z value at 2, 2");
374 "Incorrect Z value at 2, 3");
376 "Incorrect Z value at 3, 1");
378 "Incorrect Z value at 3, 2");
380 "Incorrect Z value at 3, 3");
382 "Incorrect Z value at 4, 1");
384 "Incorrect Z value at 4, 2");
386 "Incorrect Z value at 4, 3");
388 mu_assert(data->
Z == data->
RAW,
"Z pointer doesn't equal RAW pointer");
391 mu_assert(data->
y[0] == 2,
"Incorrect label read at 0");
392 mu_assert(data->
y[1] == 1,
"Incorrect label read at 1");
393 mu_assert(data->
y[2] == 3,
"Incorrect label read at 2");
394 mu_assert(data->
y[3] == 4,
"Incorrect label read at 3");
395 mu_assert(data->
y[4] == 3,
"Incorrect label read at 4");
399 "Incorrect Z value at 0, 0");
401 "Incorrect Z value at 1, 0");
403 "Incorrect Z value at 2, 0");
405 "Incorrect Z value at 3, 0");
407 "Incorrect Z value at 4, 0");
418 char *filename =
"./data/test_file_read_data_sparse_libsvm.txt";
425 mu_assert(data->
n == 10,
"Incorrect value for n");
426 mu_assert(data->
m == 3,
"Incorrect value for m");
427 mu_assert(data->
r == 3,
"Incorrect value for r");
428 mu_assert(data->
K == 4,
"Incorrect value for K");
431 mu_assert(data->
Z == NULL,
"Z pointer isn't NULL");
442 "Incorrect nonzero value at 0");
444 "Incorrect nonzero value at 1");
446 "Incorrect nonzero value at 2");
448 "Incorrect nonzero value at 3");
450 "Incorrect nonzero value at 4");
452 "Incorrect nonzero value at 5");
454 "Incorrect nonzero value at 6");
456 "Incorrect nonzero value at 7");
458 "Incorrect nonzero value at 8");
460 "Incorrect nonzero value at 9");
462 "Incorrect nonzero value at 10");
464 "Incorrect nonzero value at 11");
466 "Incorrect nonzero value at 12");
468 "Incorrect nonzero value at 13");
500 mu_assert(data->
y[0] == 2,
"Incorrect label read at 0");
501 mu_assert(data->
y[1] == 1,
"Incorrect label read at 1");
502 mu_assert(data->
y[2] == 3,
"Incorrect label read at 2");
503 mu_assert(data->
y[3] == 4,
"Incorrect label read at 3");
504 mu_assert(data->
y[4] == 3,
"Incorrect label read at 4");
515 char *filename =
"./data/test_file_read_data_no_label_libsvm.txt";
522 mu_assert(data->
n == 5,
"Incorrect value for n");
523 mu_assert(data->
m == 3,
"Incorrect value for m");
524 mu_assert(data->
r == 3,
"Incorrect value for r");
525 mu_assert(data->
K == 0,
"Incorrect value for K");
529 "Incorrect Z value at 0, 1");
531 "Incorrect Z value at 0, 2");
533 "Incorrect Z value at 0, 3");
535 "Incorrect Z value at 1, 1");
537 "Incorrect Z value at 1, 2");
539 "Incorrect Z value at 1, 3");
541 "Incorrect Z value at 2, 1");
543 "Incorrect Z value at 2, 2");
545 "Incorrect Z value at 2, 3");
547 "Incorrect Z value at 3, 1");
549 "Incorrect Z value at 3, 2");
551 "Incorrect Z value at 3, 3");
553 "Incorrect Z value at 4, 1");
555 "Incorrect Z value at 4, 2");
557 "Incorrect Z value at 4, 3");
559 mu_assert(data->
Z == data->
RAW,
"Z pointer doesn't equal RAW pointer");
562 mu_assert(data->
y == NULL,
"Outcome pointer is not NULL");
566 "Incorrect Z value at 0, 0");
568 "Incorrect Z value at 1, 0");
570 "Incorrect Z value at 2, 0");
572 "Incorrect Z value at 3, 0");
574 "Incorrect Z value at 4, 0");
586 char *filename =
"./data/test_read_model.txt";
591 mu_assert(model->
p == 0.21398,
"Incorrect read for model->p");
594 mu_assert(model->
kappa == 1.0213,
"Incorrect read for model->kappa");
598 "model->weight_idx");
601 == 0,
"Incorrect read for model->data_file");
602 mu_assert(model->
n == 10,
"Incorrect read for model->n");
603 mu_assert(model->
m == 2,
"Incorrect read for model->m");
604 mu_assert(model->
K == 3,
"Incorrect read for model->K");
607 "Incorrect model->V element at 0, 0");
609 "Incorrect model->V element at 0, 1");
611 "Incorrect model->V element at 1, 0");
613 "Incorrect model->V element at 1, 1");
615 "Incorrect model->V element at 2, 0");
617 "Incorrect model->V element at 2, 1");
632 model->
kappa = 1.1832;
635 model->
data_file = strdup(
"./data/test_file_read_data.txt");
640 model->
V =
Calloc(
double, (model->
m+1)*(model->
K-1));
641 matrix_set(model->
V, model->
K-1, 0, 0, 0.4989893785603748);
642 matrix_set(model->
V, model->
K-1, 0, 1, 0.0599082796573645);
643 matrix_set(model->
V, model->
K-1, 1, 0, 0.7918204761759593);
644 matrix_set(model->
V, model->
K-1, 1, 1, 0.6456613497110559);
645 matrix_set(model->
V, model->
K-1, 2, 0, 0.9711956316284261);
646 matrix_set(model->
V, model->
K-1, 2, 1, 0.5010714686310176);
651 FILE *fid = fopen(
"./data/test_write_model.txt",
"r");
652 mu_assert(fid != NULL,
"Couldn't open output file for reading");
657 mu_assert(strcmp(buffer,
"Output file for GenSVM (version 0.1.4)\n")
658 == 0,
"Line doesn't contain expected content (0).\n");
665 "Line doesn't contain expected content (1).\n");
668 mu_assert(strcmp(buffer,
"Model:\n") == 0,
669 "Line doesn't contain expected content (2).\n");
672 mu_assert(strcmp(buffer,
"p = 0.9032800000000000\n") == 0,
673 "Line doesn't contain expected content (3).\n");
676 mu_assert(strcmp(buffer,
"lambda = 0.0130000000000000\n") == 0,
677 "Line doesn't contain expected content (4).\n");
680 mu_assert(strcmp(buffer,
"kappa = 1.1832000000000000\n") == 0,
681 "Line doesn't contain expected content (5).\n");
684 mu_assert(strcmp(buffer,
"epsilon = 1e-08\n") == 0,
685 "Line doesn't contain expected content (6).\n");
688 mu_assert(strcmp(buffer,
"weight_idx = 1\n") == 0,
689 "Line doesn't contain expected content (7).\n");
693 "Line doesn't contain expected content (8).\n");
696 mu_assert(strcmp(buffer,
"Data:\n") == 0,
697 "Line doesn't contain expected content (9).\n");
700 mu_assert(strcmp(buffer,
"filename = ./data/test_file_read_data.txt\n")
701 == 0,
"Line doesn't contain expected content (10).\n");
704 mu_assert(strcmp(buffer,
"n = 10\n") == 0,
705 "Line doesn't contain expected content (11).\n");
708 mu_assert(strcmp(buffer,
"m = 2\n") == 0,
709 "Line doesn't contain expected content (12).\n");
712 mu_assert(strcmp(buffer,
"K = 3\n") == 0,
713 "Line doesn't contain expected content (13).\n");
717 "Line doesn't contain expected content (14).\n");
720 mu_assert(strcmp(buffer,
"Output:\n") == 0,
721 "Line doesn't contain expected content (15).\n");
724 mu_assert(strcmp(buffer,
"+0.4989893785603748 +0.0599082796573645\n")
725 == 0,
"Line doesn't contain expected content (16).\n");
728 mu_assert(strcmp(buffer,
"+0.7918204761759593 +0.6456613497110559\n")
729 == 0,
"Line doesn't contain expected content (17).\n");
732 mu_assert(strcmp(buffer,
"+0.9711956316284261 +0.5010714686310176\n")
733 == 0,
"Line doesn't contain expected content (18).\n");
750 long *predy =
Calloc(
long, n);
756 data->
Z =
Calloc(
double, data->
n * (data->
m+1));
764 matrix_set(data->
Z, data->
m+1, 0, 1, 0.7065937536993949);
765 matrix_set(data->
Z, data->
m+1, 0, 2, 0.7016517970438980);
766 matrix_set(data->
Z, data->
m+1, 0, 3, 0.1548611397288129);
767 matrix_set(data->
Z, data->
m+1, 1, 1, 0.4604987687863951);
768 matrix_set(data->
Z, data->
m+1, 1, 2, 0.6374142980176117);
769 matrix_set(data->
Z, data->
m+1, 1, 3, 0.0370930278245423);
770 matrix_set(data->
Z, data->
m+1, 2, 1, 0.3798777132278375);
771 matrix_set(data->
Z, data->
m+1, 2, 2, 0.5745070018747664);
772 matrix_set(data->
Z, data->
m+1, 2, 3, 0.2570906697837264);
773 matrix_set(data->
Z, data->
m+1, 3, 1, 0.2789376050039792);
774 matrix_set(data->
Z, data->
m+1, 3, 2, 0.4853242744610165);
775 matrix_set(data->
Z, data->
m+1, 3, 3, 0.1894010436762711);
776 matrix_set(data->
Z, data->
m+1, 4, 1, 0.7630904372339489);
777 matrix_set(data->
Z, data->
m+1, 4, 2, 0.1341546320318005);
778 matrix_set(data->
Z, data->
m+1, 4, 3, 0.6827430912944857);
789 "./data/test_write_predictions.txt");
791 FILE *fid = fopen(
"./data/test_write_predictions.txt",
"r");
792 mu_assert(fid != NULL,
"Couldn't open output file for reading");
798 "Line doesn't contain expected content (0).\n");
802 "Line doesn't contain expected content (1).\n");
805 mu_assert(strcmp(buffer,
"0.7065937536993949 0.7016517970438980 " 806 "0.1548611397288129 3\n") == 0,
807 "Line doesn't contain expected content (2).\n");
810 mu_assert(strcmp(buffer,
"0.4604987687863951 0.6374142980176117 " 811 "0.0370930278245423 2\n") == 0,
812 "Line doesn't contain expected content (3).\n");
815 mu_assert(strcmp(buffer,
"0.3798777132278375 0.5745070018747664 " 816 "0.2570906697837264 1\n") == 0,
817 "Line doesn't contain expected content (4).\n");
821 mu_assert(strcmp(buffer,
"0.2789376050039792 0.4853242744610165 " 822 "0.1894010436762711 2\n") == 0,
823 "Line doesn't contain expected content (5).\n");
827 mu_assert(strcmp(buffer,
"0.7630904372339489 0.1341546320318005 " 828 "0.6827430912944857 1\n") == 0,
829 "Line doesn't contain expected content (6).\n");
Minimal unit testing framework for C.
#define Calloc(type, size)
char * test_gensvm_read_data_libsvm_sparse()
char * test_gensvm_time_string()
void gensvm_write_predictions(struct GenData *data, long *predy, char *output_filename)
Write predictions to file.
long * ja
column indices, should be of length nnz
double epsilon
stopping criterion for the IM algorithm.
long n_col
number of columns of the original matrix
void gensvm_read_model(struct GenModel *model, char *model_filename)
Read model from file.
double p
parameter for the L-p norm in the loss function
void gensvm_read_data(struct GenData *dataset, char *data_file)
Read data from file.
#define mu_assert(test, message)
#define GENSVM_MAX_LINE_LENGTH
#define matrix_get(M, cols, i, j)
char * test_gensvm_read_data()
char * test_gensvm_write_model()
void gensvm_free_model(struct GenModel *model)
Free allocated GenModel struct.
long nnz
number of nonzero elements
int weight_idx
which weights to use (1 = unit, 2 = group)
double * V
augmented weight matrix
#define mu_run_test(test)
long * y
array of class labels, 1..K
struct GenModel * gensvm_init_model(void)
Initialize a GenModel structure.
A structure to represent the data.
double * values
actual nonzero values, should be of length nnz
char * test_gensvm_read_data_sparse()
A structure to represent a single GenSVM model.
char * test_gensvm_read_data_no_label()
void gensvm_write_model(struct GenModel *model, char *output_filename)
Write model to file.
#define mu_test_missing()
char * data_file
filename of the data
char * test_gensvm_read_data_libsvm_0based()
long n
number of instances in the dataset
void gensvm_free_data(struct GenData *data)
Free allocated GenData struct.
long r
number of eigenvalues (width of Z)
Header file for gensvm_io.c.
double kappa
parameter for the Huber hinge function
long K
number of classes in the dataset
char * test_gensvm_read_data_libsvm_no_label()
long m
number of predictors (width of RAW)
#define matrix_set(M, cols, i, j, val)
long n
number of instances
struct GenData * gensvm_init_data(void)
Initialize a GenData structure.
void gensvm_read_data_libsvm(struct GenData *dataset, char *data_file)
Read data from a file in LibSVM/SVMlight format.
char * test_gensvm_read_model()
long m
number of predictor variables in the dataset
long * ia
cumulative row lengths, should be of length n_row+1
double * RAW
augmented raw data matrix
struct GenSparse * spZ
sparse representation of the augmented data matrix
double lambda
regularization parameter in the loss function
char * test_gensvm_write_predictions()
long n_row
number of rows of the original matrix
char * test_gensvm_read_data_libsvm()