+++ /dev/null
-% Run this file if using Octave
-if exist('OCTAVE_VERSION', 'builtin') ~= 0
- pkg load statistics %for random()
- more off %to prevent bufferizing output
-end
+++ /dev/null
-Subset of select/ project: only files required to generate tests outputs
+++ /dev/null
-%covariance matrix for tests on synthetic data: A(i,j) = a^|i-j|
-function[A] = covariance(p,a)
-
- A = a*ones(p,p);
- for i=1:p
- A(i,:) = A(i,:) .^ abs(i-(1:p));
- end
-
-end
+++ /dev/null
-checkOutput = function(varName, matrix, refMatrix, tol){
- print('Checking %s\n',varName);
- maxError = max(max(max(max(abs(matrix - refMatrix)))));
- if(maxError >= tol){
- print('Inaccuracy: max(abs(error)) = %g >= %g\n',maxError,tol)
- }
- else{
- print('OK\n')
- }
-}
\ No newline at end of file
+++ /dev/null
-covariance= function(p,a){
- A = matrix(a, p,p)
- for{i in 1:p}{
- for{k in 1:p}{
- A[i,]= A[i,]^abs(i-k)
- }
- }
- return(A=A)
-}
\ No newline at end of file
+++ /dev/null
-testEMGLLF = function(){
- testFolder = 'data/'
-
- #get dimensions
- dimensions = read.table(strcat(testFolder,'dimensions'), header=FALSE)
- n = dimensions[1]
- p = dimensions[2]
- m = dimensions[3]
- k = dimensions[4]
-
- #get all input arrays
- phiInit = read.table(strcat(testFolder,'phiInit'), header=FALSE)
- rhoInit = read.table(strcat(testFolder,'rhoInit'), header=FALSE)
- piInit = t(read.table(strcat(testFolder,'piInit'), header=FALSE))
- gamInit = read.table(strcat(testFolder,'gamInit'), header=FALSE)
- mini = read.table(strcat(testFolder,'mini'), header=FALSE)
- maxi = read.table(strcat(testFolder,'maxi'), header=FALSE)
- gamma = read.table(strcat(testFolder,'gamma'), header=FALSE)
- lambda = read.table(strcat(testFolder,'lambda'), header=FALSE)
- X = rread.table(strcat(testFolder,'X'), header=FALSE)
- Y = read.table(strcat(testFolder,'Y'), header=FALSE)
- tau = read.table(strcat(testFolder,'tau'), header=FALSE)
-
- #run EMGLLF.c
- EMG = .Call("EMGLLF_core",phiInit,rhoInit,piInit1,gamInit,mini,maxi,gamma,lambda,X,Y,tau)
- phi = EMG$phi
- rho = EMG$rho
- pi = EMG$pi
- LLF = EMG$LLF
- S = EMG$S
-
- #get all stored outputs
- ref_phi =read.table(strcat(testFolder,'phi'), header=FALSE)
- ref_rho = read.table(strcat(testFolder,'rho'), header=FALSE)
- ref_pi = read.table(strcat(testFolder,'pi'), header=FALSE)
- ref_LLF = read.table(strcat(testFolder,'LLF'), header=FALSE)
- ref_S = read.table(strcat(testFolder,'S'), header=FALSE)
-
- #check that output correspond to stored output
- tol = 1e-5;
- checkOutput('phi',phi,ref_phi,tol);
- checkOutput('rho',rho,ref_rho,tol);
- checkOutput('pi',pi,ref_pi,tol);
- checkOutput('LLF',LLF,ref_LLF,tol);
- checkOutput('S',S,ref_S,tol);
-}
--- /dev/null
+checkOutput = function(varName, array, refArray, tol)
+{
+ print(paste("Checking ",varName,sep=""))
+ maxError = max(abs(array - refArray))
+ if(maxError >= tol)
+ {
+ print(paste("Inaccuracy: max(abs(error)) = ",maxError," >= ",tol,sep=""))
+ } else
+ {
+ print("OK")
+ }
+}
--- /dev/null
+covariance = function(p,a)
+{
+ A = matrix(a, p,p)
+ for (i in 1:p)
+ A[i,] = A[i,]^abs(i-(1:p))
+
+ return (A)
+}
--- /dev/null
+testEMGLLF = function()
+{
+ testFolder = "data/"
+ array_delimiter = " "
+
+ #get dimensions
+ dimensions = read.table(paste(testFolder,"dimensions",sep=""), header=FALSE,
+ sep=array_delimiter)
+ n = dimensions[1]
+ p = dimensions[2]
+ m = dimensions[3]
+ k = dimensions[4]
+
+ #get all input arrays
+ phiInit = read.table(paste(testFolder,"phiInit",sep=""), header=FALSE, sep=array_delimiter)
+ rhoInit = read.table(paste(testFolder,"rhoInit",sep=""), header=FALSE, sep=array_delimiter)
+ piInit = read.table(paste(testFolder,"piInit",sep=""), header=FALSE, sep=array_delimiter)
+ gamInit = read.table(paste(testFolder,"gamInit",sep=""), header=FALSE, sep=array_delimiter)
+ mini = read.table(paste(testFolder,"mini",sep=""), header=FALSE, sep=array_delimiter)
+ maxi = read.table(paste(testFolder,"maxi",sep=""), header=FALSE, sep=array_delimiter)
+ gamma = read.table(paste(testFolder,"gamma",sep=""), header=FALSE, sep=array_delimiter)
+ lambda = read.table(paste(testFolder,"lambda",sep=""), header=FALSE, sep=array_delimiter)
+ X = read.table(paste(testFolder,"X",sep=""), header=FALSE, sep=array_delimiter)
+ Y = read.table(paste(testFolder,"Y",sep=""), header=FALSE, sep=array_delimiter)
+ tau = read.table(paste(testFolder,"tau",sep=""), header=FALSE, sep=array_delimiter)
+
+ #run EMGLLF.c
+ EMG = .Call("EMGLLF_core",phiInit,rhoInit,piInit1,gamInit,mini,maxi,gamma,lambda,X,Y,tau,
+ PACKAGE="valse")
+ phi = EMG$phi
+ rho = EMG$rho
+ pi = EMG$pi
+ LLF = EMG$LLF
+ S = EMG$S
+
+ #get all stored outputs
+ ref_phi = read.table(paste(testFolder,"phi",sep=""), header=FALSE, sep=array_delimiter)
+ ref_rho = read.table(paste(testFolder,"rho",sep=""), header=FALSE, sep=array_delimiter)
+ ref_pi = read.table(paste(testFolder,"pi",sep=""), header=FALSE, sep=array_delimiter)
+ ref_LLF = read.table(paste(testFolder,"LLF",sep=""), header=FALSE, sep=array_delimiter)
+ ref_S = read.table(paste(testFolder,"S",sep=""), header=FALSE, sep=array_delimiter)
+
+ #check that output correspond to stored output
+ tol = 1e-5;
+ checkOutput("phi",phi,ref_phi,tol);
+ checkOutput("rho",rho,ref_rho,tol);
+ checkOutput("pi",pi,ref_pi,tol);
+ checkOutput("LLF",LLF,ref_LLF,tol);
+ checkOutput("S",S,ref_S,tol);
+}
+++ /dev/null
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-// Check if array == refArray
-void compareArray(const char* ID, const void* array, const void* refArray, int size,
- int isinteger)
-{
- float EPS = 1e-5; //precision
- printf("Checking %s\n",ID);
- float maxError = 0.0;
- for (int i=0; i<size; i++)
- {
- float error = isinteger
- ? fabs(((int*)array)[i] - ((int*)refArray)[i])
- : fabs(((float*)array)[i] - ((float*)refArray)[i]);
- if (error >= maxError)
- maxError = error;
- }
- if (maxError >= EPS)
- printf(" Inaccuracy: max(abs(error)) = %g >= %g\n",maxError,EPS);
- else
- printf(" OK\n");
-}
-
-void compareArray_real(const char* ID, const void* array, const void* refArray, int size)
-{
- return compareArray(ID, array, refArray, size, 0);
-}
-
-void compareArray_int(const char* ID, const void* array, const void* refArray, int size)
-{
- return compareArray(ID, array, refArray, size, 1);
-}
-
-// Read array by columns (as in MATLAB) and return by-rows encoding
-void* readArray(const char* fileName, int isinteger)
-{
- // need to prepend '../data/' (not really nice code...)
- char* fullFileName = (char*)calloc(5+strlen(fileName)+1, sizeof(char));
- strcat(fullFileName, "data/");
- strcat(fullFileName, fileName);
-
- // first pass to know how many elements to allocate
- char* command = (char*)calloc(12+strlen(fullFileName)+8+1, sizeof(char));
- strcat(command, "grep -o ' ' ");
- strcat(command, fullFileName);
- strcat(command, " | wc -l");
- FILE *countSpaces = popen(command, "r");
- char* buffer = (char*)calloc(32, sizeof(char));
- fgets(buffer, sizeof(buffer), countSpaces);
- int n = atoi(buffer) + 1;
- free(buffer);
- pclose(countSpaces);
-
- // open file for reading
- FILE* file = fopen(fullFileName, "r");
- free(fullFileName);
-
- int d = 1;
- size_t elementSize = isinteger
- ? sizeof(int)
- : sizeof(float);
-
- // read all values, and convert them to by-rows matrices format
- void* array = malloc(n*elementSize);
- char curChar = ' ';
- char bufferNum[64];
- for (int u=0; u<n; u++)
- {
- // read number (as a string)
- int bufferIndex = 0;
- while (!feof(file) && curChar!=' ')
- {
- curChar = fgetc(file);
- bufferNum[bufferIndex++] = curChar;
- }
- bufferNum[bufferIndex] = 0;
- // transform string into float, and store it at appropriate location
- if (isinteger)
- ((int*)array)[u] = atoi(bufferNum);
- else
- ((float*)array)[u] = atof(bufferNum);
- // position to next non-separator character
- curChar = fgetc(file);
- }
- fclose(file);
-
- return array;
-}
-
-int* readArray_int(const char* fileName)
-{
- return (int*)readArray(fileName, 1);
-}
-
-float* readArray_real(const char* fileName)
-{
- return (float*)readArray(fileName, 0);
-}
-
-int read_int(const char* fileName)
-{
- return readArray_int(fileName)[0];
-}
-
-float read_real(const char* fileName)
-{
- return readArray_real(fileName)[0];
-}
+++ /dev/null
-// Check if array == refArray
-void compareArray(const char* ID, const void* array, const void* refArray, int size, int isInteger);
-
-void compareArray_real(const char* ID, const void* array, const void* refArray, int size);
-
-void compareArray_int(const char* ID, const void* array, const void* refArray, int size);
-
-// Read array by columns (as in MATLAB) and return by-rows encoding
-void* readArray(const char* fileName, int isInteger);
-
-int* readArray_int(const char* fileName);
-
-float* readArray_real(const char* fileName);
-
-int read_int(const char* fileName);
-
-float read_real(const char* fileName);