X-Git-Url: https://git.auder.net/?p=valse.git;a=blobdiff_plain;f=src%2Ftest%2Ftest.EMGrank.c;fp=src%2Ftest%2Ftest.EMGrank.c;h=12277388a7175795ec389daf618f3b097560d2c3;hp=0000000000000000000000000000000000000000;hb=7b2720733e9aebe177c211119a9ec160c7e7117b;hpb=4725af564bfdbeb40d0caf7f124ab94ac05a97eb diff --git a/src/test/test.EMGrank.c b/src/test/test.EMGrank.c new file mode 100644 index 0000000..1227738 --- /dev/null +++ b/src/test/test.EMGrank.c @@ -0,0 +1,92 @@ +#include "EMGrank.h" +#include "ioutils.h" + +int main(int argc, char** argv) +{ + // read dimensions + const Int nbDims = 4; + Int* dimensions = readArray_int("dimensions",&nbDims,1); + mwSize n = dimensions[0]; + mwSize p = dimensions[1]; + mwSize m = dimensions[2]; + mwSize k = dimensions[3]; + free(dimensions); + mwSize lengthOne = 1; + + //////////// + // INPUTS // + //////////// + + // Rho + const mwSize dimRho[] = {m, m, k}; + Real* Rho = readArray_real("Rho",dimRho,3); + + // Pi + Real* Pi = readArray_real("Pi",&k,1); + + // 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); + + // X + const mwSize dimX[] = {n, p}; + Real* X = readArray_real("X",dimX, 2); + + // Y + const mwSize dimY[] = {n, m}; + Real* Y = readArray_real("Y",dimY, 2); + + // tau + Real* ptau = readArray_real("tau",&lengthOne,1); + Real tau = *ptau; + free(ptau); + + // tau + Int* rank = readArray_int("rank",&k,1); + + ///////////// + // OUTPUTS // + ///////////// + + // phi + const mwSize dimPhi[] = {p, m, k}; + Real* phi = (Real*)malloc(dimPhi[0]*dimPhi[1]*dimPhi[2]*sizeof(Real)); + + // LLF + Real* LLF = (Real*)malloc(1*sizeof(Real)); + + ////////////////////////// + // Main call to EMGrank // + ////////////////////////// + + EMGrank(Pi,Rho,mini,maxi,X,Y,tau,rank, + phi,LLF, + n,p,m,k); + + // free input pointers + free(Rho); + free(Pi); + free(X); + free(Y); + free(rank); + + // Compare to reference outputs + Real* ref_phi = readArray_real("phi",dimPhi, 3); + compareArray_real("phi", phi, ref_phi, dimPhi[0]*dimPhi[1]*dimPhi[2]); + free(phi); + free(ref_phi); + + // LLF + Real* ref_LLF = readArray_real("LLF",&lengthOne,1); + compareArray_real("LLF", LLF, ref_LLF, 1); + free(LLF); + free(ref_LLF); + + return 0; +}