fix memory leaks on EMGLLF, test OK for EMGrank
[valse.git] / src / test / test.selectiontotale.c
index 2553d05..843a04d 100644 (file)
 #include "selectiontotale.h"
 #include "test_utils.h"
+#include <stdlib.h>
 
 int main(int argc, char** argv)
 {
-       // read dimensions
-       const int nbDims = 5;
-       int* dimensions = readArray_int("dimensions",&nbDims,1);
+       int* dimensions = readArray_int("dimensions");
        int n = dimensions[0];
        int p = dimensions[1];
        int m = dimensions[2];
        int k = dimensions[3];
        int L = dimensions[4];
        free(dimensions);
-       int lengthOne = 1;
-       
+
        ////////////
        // INPUTS //
+       Real* phiInit = readArray_real("phiInit");
+       Real* rhoInit = readArray_real("rhoInit");
+       Real* piInit = readArray_real("piInit");
+       Real* gamInit = readArray_real("gamInit");
+       int mini = read_int("mini");
+       int maxi = read_int("maxi");
+       Real gamma = read_real("gamma");
+       Real* glambda = readArray_real("glambda");
+       Real* X = readArray_real("X");
+       Real* Y = readArray_real("Y");
+       Real seuil = read_real("seuil");
+       Real tau = read_real("tau");
        ////////////
 
-       // phiInit
-       const int dimPhiInit[] = {p, m, k};
-       float* phiInit = readArray_real("phiInit",dimPhiInit,3);
-
-       // rhoInit
-       const int dimRhoInit[] = {m, m, k};
-       float* rhoInit = readArray_real("rhoInit",dimRhoInit,3);
-
-       // piInit
-       float* piInit = readArray_real("piInit",&k,1);
-
-       // gamInit
-       const int dimGamInit[] = {n, k};
-       float* gamInit = readArray_real("gamInit",dimGamInit, 2);
-
-       // min number of iterations
-       int* pmini = readArray_int("mini",&lengthOne,1);
-       int mini = *pmini;
-       free(pmini);
-       
-       // max number of iterations
-       int* pmaxi = readArray_int("maxi",&lengthOne,1);
-       int maxi = *pmaxi;
-       free(pmaxi);
-       
-       // gamma
-       float* pgamma = readArray_real("gamma",&lengthOne,1);
-       float gamma = *pgamma;
-       free(pgamma);
-       
-       // lambda
-       float* glambda = readArray_real("glambda",&L,1);
-
-       // X
-       const int dimX[] = {n, p};
-       float* X = readArray_real("X",dimX,2);
-
-       // Y
-       const int dimY[] = {n, m};
-       float* Y = readArray_real("Y",dimY,2);
-
-       // seuil
-       float* pseuil = readArray_real("seuil",&lengthOne,1);
-       float seuil = *pseuil;
-       free(pseuil);
-       
-       // tau
-       float* ptau = readArray_real("tau",&lengthOne,1);
-       float tau = *ptau;
-       free(ptau);
-       
        /////////////
        // OUTPUTS //
+       int* A1 = (int*)malloc(p*(m+1)*L*sizeof(int));
+       int* A2 = (int*)malloc(p*(m+1)*L*sizeof(int));
+       Real* Rho = (Real*)malloc(m*m*k*L*sizeof(Real));
+       Real* Pi = (Real*)malloc(k*L*sizeof(Real));
        /////////////
 
-       // A1
-       const int dimA[] = {p, m+1, L};
-       int* A1 = (int*)malloc(dimA[0]*dimA[1]*dimA[2]*sizeof(int));
-
-       // A2
-       int* A2 = (int*)malloc(dimA[0]*dimA[1]*dimA[2]*sizeof(int));
-
-       // rho
-       const int dimRho[] = {m, m, k, L};
-       float* Rho = (float*)malloc(dimRho[0]*dimRho[1]*dimRho[2]*dimRho[3]*sizeof(float));
-
-       // pi
-       const int dimPi[] = {k, L};
-       float* Pi = (float*)malloc(dimPi[0]*dimPi[1]*sizeof(float));
-
-       //////////////////////////////////////////////
-       // Main call to constructionModelesLassoMLE //
-       //////////////////////////////////////////////
-
-       selectiontotale(
+       /////////////////////////////////////////
+       // Call to constructionModelesLassoMLE //
+       selectiontotale_core(
                phiInit,rhoInit,piInit,gamInit,mini,maxi,gamma,glambda,X,Y,seuil,tau,
                A1,A2,Rho,Pi,
                n,p,m,k,L);
-       
-       // free input pointers
+       /////////////////////////////////////////
+
        free(phiInit);
        free(rhoInit);
        free(piInit);
@@ -105,30 +51,27 @@ int main(int argc, char** argv)
        free(glambda);
        free(X);
        free(Y);
-       
+
        // Compare to reference outputs
-       int* ref_A1 = readArray_int("A1",dimA, 3);
-       compareArray_int("A1", A1, ref_A1, dimA[0]*dimA[1]*dimA[2]);
+       int* ref_A1 = readArray_int("A1");
+       compareArray_int("A1", A1, ref_A1, p*(m+1)*L);
        free(A1);
        free(ref_A1);
-       
-       // A2
-       int* ref_A2 = readArray_int("A2",dimA, 3);
-       compareArray_int("A2", A2, ref_A2, dimA[0]*dimA[1]*dimA[2]);
+
+       int* ref_A2 = readArray_int("A2");
+       compareArray_int("A2", A2, ref_A2, p*(m+1)*L);
        free(A2);
        free(ref_A2);
-       
-       // Rho
-       float* ref_Rho = readArray_real("Rho",dimRho, 4);
-       compareArray_real("Rho", Rho, ref_Rho, dimRho[0]*dimRho[1]*dimRho[2]*dimRho[3]);
+
+       Real* ref_Rho = readArray_real("Rho");
+       compareArray_real("Rho", Rho, ref_Rho, m*m*k*L);
        free(Rho);
        free(ref_Rho);
-       
-       // Pi
-       float* ref_Pi = readArray_real("Pi",dimPi, 2);
-       compareArray_real("Pi", Pi, ref_Pi, dimPi[0]*dimPi[1]);
+
+       Real* ref_Pi = readArray_real("Pi");
+       compareArray_real("Pi", Pi, ref_Pi, k*L);
        free(Pi);
        free(ref_Pi);
-       
+
        return 0;
 }