more tests
Vincent Liard [Thu, 2 Jul 2009 14:44:50 +0000 (16:44 +0200)]
19 files changed:
scilab/modules/signal_processing/sci_gateway/c/gw_signal.c
scilab/modules/signal_processing/sci_gateway/c/sci_corr.c
scilab/modules/signal_processing/sci_gateway/signal_processing_gateway.xml
scilab/modules/signal_processing/tests/unit_tests/corr.dia.ref
scilab/modules/signal_processing/tests/unit_tests/corr.tst
scilab/modules/signal_processing/tests/unit_tests/corr_fft_ref.dat [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/corr_updates_ref.dat [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/fft.dia.ref
scilab/modules/signal_processing/tests/unit_tests/fft.tst
scilab/modules/signal_processing/tests/unit_tests/fft_1dim.dat [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/fft_2dim.dat [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/fft_ndim.dat [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/remez.dia.ref [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/remez.tst [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/rpem.dia.ref
scilab/modules/signal_processing/tests/unit_tests/rpem.tst
scilab/modules/signal_processing/tests/unit_tests/syredi.dat [new file with mode: 0644]
scilab/modules/signal_processing/tests/unit_tests/syredi.tst
scilab/modules/signal_processing/tests/unit_tests/test_utilities.sci

index a1e7e41..42707a0 100644 (file)
 #include <string.h>
 #include "gw_signal.h"
 #include "callFunctionFromGateway.h"
-/*--------------------------------------------------------------------------*/
+
+/****************************************************************/
 static gw_generic_table Tab[]=
 {
-       {sci_ffir,   "ffir"},
-       {sci_fft,    "fft"},
-       {sci_fiir,   "fiir"},
-       {sci_corr,   "corr"},
-       {sci_rpem,   "rpem"},
-       {sci_amell,  "amell"},
-       {sci_delip,  "delip"},
-       {sci_remez,  "remez"},
-       {sci_syredi, "syredi"}
+  {NULL,       ""}, // placeholder
+  {sci_fft,    "fft"},
+  {NULL,       ""}, // placeholder
+  {sci_corr,   "corr"},
+  {sci_rpem,   "rpem"},
+  {sci_amell,  "amell"},
+  {sci_delip,  "delip"},
+  {sci_remez,  "remez"},
+  {sci_syredi, "syredi"}
 };
-/*--------------------------------------------------------------------------*/
+/****************************************************************/
 int gw_signal_processing(void)
 {  
-       callFunctionFromGateway(Tab);
-       return 0;
+  callFunctionFromGateway(Tab);
+  return 0;
 }
-/*--------------------------------------------------------------------------*/
+/****************************************************************/
index 6173c2a..ad7b4fb 100644 (file)
 #include "Scierror.h"
 #include "localization.h"
 
-/*--------------------------------------------------------------------------*/
-extern int C2F(scicorr)(char *id,unsigned long fname_len );
-/*--------------------------------------------------------------------------*/
-int sci_corr0(char *fname,unsigned long fname_len)
-{
-       C2F(scicorr)(fname,fname_len);
-       return 0;
-}
-/*--------------------------------------------------------------------------*/
-/****************************************************************/
-
 /****************************************************************/
+extern int C2F(scicorr)(char *id,unsigned long fname_len );
 /****************************************************************/
-
-int corr_usual(void);
-int corr_updates(char *fname);
+int corr_default(char *fname, unsigned long fname_len);
+int corr_updates(char *fname, unsigned long fname_len);
 int corr_fft(char *fname, unsigned long fname_len);
 
+/* dispatch to specialized gateways according to mode (default, 'updt', 'fft') */
 int sci_corr(char *fname, unsigned long fname_len)
 {
   int rows, cols, procedure_index;
@@ -54,42 +44,54 @@ int sci_corr(char *fname, unsigned long fname_len)
       break;
     case 'u': /** updates case **/
       CheckRhs(3,5);
-      corr_updates(fname);
+      corr_updates(fname, fname_len);
       break;
     default:
       Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), fname, 1, "'fft', 'update'");
       return 1;
     }
   }
-  else { /** usual case **/
+  else { /** default case **/
     CheckRhs(2,3);
-    corr_usual();
+    corr_default(fname, fname_len);
   }
 
   return 0;
 }
 
-/* assert: RhsVar must have been checked to hold 2 to 3 elements */
-int corr_usual(void) {
-
-  extern void C2F(tscccf)(double *x, double *y, int*length,
+int corr_default(char *fname, unsigned long fname_len) {
+  extern void C2F(tscccf)(double *x, double *y, int *length,
                          double *cxy, double *xymean, int *lag, int *error);
 
-  int length, lags_number, error, rows, cols;
+  int length, lags_number, error, rows1, cols1, rows2, cols2, rows3, cols3;
   double *x, *y, *crossvariance, *mean, *argument;
 
-  /* TODO: check inputs */
-  GetRhsVarMatrixDouble(1, &rows, &cols, &argument);
-  x = argument;
-  length = rows * cols;
-  GetRhsVarMatrixDouble(2, &rows, &cols, &argument);
-  if (Rhs == 2) {
+  GetVarDimension(1, &rows1, &cols1);
+  length = rows1 * cols1;
+  if ((GetType(1) != sci_matrix) ||
+      (rows1 != 1 && cols1 != 1)) {
+    Scierror(999, _("%s: Wrong size for input argument #%d: A vector expected.\n"), fname, 1);
+    return 1;
+  }
+  GetRhsVarMatrixDouble(1, &rows1, &cols1, &x);
+
+  /* interpret 2nd argument according to number of arguments */
+  GetRhsVarMatrixDouble(2, &rows2, &cols2, &argument);
+  if (Rhs == 2) { 
+    if (rows2 != 1 || cols2 != 1) {
+      Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 2);
+      return 1;
+    }
     y = x;
     lags_number = (int)argument[0];
   }
   else {
+    if (rows1 != rows2 || cols1 != cols2) {
+      Scierror(999, _("%s: Incompatible input arguments #%d and #%d': Same sizes expected.\n"), fname, 1, 2);
+      return 1;
+    }
     y = argument;
-    GetRhsVarMatrixDouble(3, &rows, &cols, &argument);
+    GetRhsVarMatrixDouble(3, &rows3, &cols3, &argument);
     lags_number = (int)argument[0];
   }
 
@@ -105,9 +107,7 @@ int corr_usual(void) {
   return error;
 }
 
-/* assert: RhsVar must have been checked to hold 4 to 5 elements */
 int corr_fft(char *fname, unsigned long fname_len) {
-
   extern void C2F(cmpse2)(int *m, int *n, int *mode,
                          void (*bgetx)(double *, int *, int *),
                          void (*bgety)(double *, int *, int *),
@@ -120,8 +120,6 @@ int corr_fft(char *fname, unsigned long fname_len) {
   extern void C2F(setdgetx)(char *name, int *rep);
   extern void C2F(setdgety)(char *name, int *rep);
 
-
-  // enum {self = 3, cross = 4} correlation_mode = self;
   enum {self = 2, cross = 3} correlation_mode = self;
   int length, lags_number, error, rows, cols, n, mm, lag, res;
   double *xa, *xr, *xi, *zr, *zi, *crossvariance, *mean, *argument;
@@ -182,7 +180,7 @@ int corr_fft(char *fname, unsigned long fname_len) {
 }
 
 /* assert: RhsVar must have been checked to hold 4 to 5 elements */
-int corr_updates(char *fname) {
+int corr_updates(char *fname, unsigned long fname_len) {
 
   extern void C2F(cmpse3)(int *m, int *n, int *mode, double *x, double *y,
                          double *xr, double *xi,
@@ -229,16 +227,13 @@ int corr_updates(char *fname) {
   
   /* w ****************/
   w_position = (correlation_mode == self) ? 3 : 4;
-  printf("w position: %d, corr mode: %s\n", w_position, (correlation_mode == self) ? "self" : "cross");
   /* dimension ought to be a power of 2 (could be checked here) */
   /* GetVarDimension(w_position, &rows, &cols); */
   if (iIsComplex(w_position)) {
-    printf("complex\n");
     GetRhsVarMatrixComplex(w_position, &rows, &cols, &z_real, &z_imaginary);
     mfft = rows * cols;
   }
   else {
-    printf("real\n");
     GetRhsVarMatrixDouble(w_position, &rows, &cols, &z_real);
     mfft = rows * cols;
     z_imaginary = (double *)MALLOC(mfft * sizeof(double));
index 3978a40..bd8bfbb 100644 (file)
@@ -3,6 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Allan CORNET
  * Copyright (C) 2007 - INRIA - Sylvestre LEDRU
+ * Copyright (C) 2009 - Digiteo - Vincent Liard
  * 
  * Scilab
  * Interface description. In this file, we define the list of the function which
 
 <!DOCTYPE GATEWAY SYSTEM "../../functions/xml/gateway.dtd">
 <GATEWAY name="signal_processing">
-
-
-<PRIMITIVE gatewayId="18" primitiveId="2" primitiveName="fft" />
-<PRIMITIVE gatewayId="18" primitiveId="4" primitiveName="corr" />
-<PRIMITIVE gatewayId="18" primitiveId="5" primitiveName="rpem" />
-<PRIMITIVE gatewayId="18" primitiveId="6" primitiveName="amell" />
-<PRIMITIVE gatewayId="18" primitiveId="7" primitiveName="delip" />
-<PRIMITIVE gatewayId="18" primitiveId="8" primitiveName="remez" />
-<PRIMITIVE gatewayId="18" primitiveId="9" primitiveName="syredi" />
-</GATEWAY>
\ No newline at end of file
+  <PRIMITIVE gatewayId="18" primitiveId="2" primitiveName="fft" />
+  <PRIMITIVE gatewayId="18" primitiveId="4" primitiveName="corr" />
+  <PRIMITIVE gatewayId="18" primitiveId="5" primitiveName="rpem" />
+  <PRIMITIVE gatewayId="18" primitiveId="6" primitiveName="amell" />
+  <PRIMITIVE gatewayId="18" primitiveId="7" primitiveName="delip" />
+  <PRIMITIVE gatewayId="18" primitiveId="8" primitiveName="remez" />
+  <PRIMITIVE gatewayId="18" primitiveId="9" primitiveName="syredi" />
+</GATEWAY>
index 6ae6d25..5d22811 100644 (file)
@@ -1,22 +1,36 @@
-// =============================================================================
+// -*- scilab -*-
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO
+// Copyright (C) 2008 - Digiteo - unknown author
+// Copyright (C) 2009 - Digiteo - Vincent LIARD
 //
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at    
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+// 'corr' unit tests
+test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
+// requires test_utilities.sci
+// ****************************************************************
+// * Part I: defining the tests                                   *
+// * Part II: performing the tests                                *
+// ****************************************************************
+// **** Part I: defining the tests ****
+// old tests wrapped
+function test_corr_old() 
 rand('normal');
-x=rand(1,256);
-y=-x;
-deff('[z]=xx(inc,is)','z=x(is:is+inc-1)');
-deff('[z]=yy(inc,is)','z=y(is:is+inc-1)');
+x = rand(1,256);
+y = -x;
 [c, mxy]=corr(x,y,32);
 if or(size(c)<>[1 32]) then bugmes();quit;end
 if or(size(mxy)<>[1 2]) then bugmes();quit;end
-x=x-mxy(1)*ones(x);
-y=y-mxy(2)*ones(y);
-c1=corr(x,y,32);
-c2=corr(x,32);
+x = x-mxy(1)*ones(x);
+y = y-mxy(2)*ones(y);
+c1 = corr(x,y,32);
+c2 = corr(x,32);
 if norm(c1+c2,1) > %eps then bugmes();quit;end
+deff('[z]=xx(inc,is)','z=x(is:is+inc-1)');
+deff('[z]=yy(inc,is)','z=y(is:is+inc-1)');
 [c3,m3]=corr('fft',xx,yy,256,32);
 if norm(c1-c3,1) > 10 *%eps then bugmes();quit;end
 [c4,m4]=corr('fft',xx,256,32);
@@ -26,3 +40,71 @@ if norm(m3,1) > %eps then bugmes();quit;end
 if norm(m4,1) > %eps then bugmes();quit;end
 if norm(c3-c1,1) > 10*%eps then bugmes();quit;end
 if norm(c4-c2,1) > 10*%eps then bugmes();quit;end
+endfunction
+// corr default mode
+function test_corr_default()
+x = [1:10];
+y = [5 10 6 4 8 2 9 3 1 7];
+nlags = 3;
+// x, nlag provided
+cov_ref1 = [8.25 5.775 3.4];
+Mean_ref1 = 5.5;
+cov = corr(x, nlags);
+check(cov, cov_ref1);
+[cov, Mean] = corr(x, nlags);
+check([cov, Mean], [cov_ref1, Mean_ref1]);
+// x, y, nlag provided
+cov_ref2 = [-2.55 -2.825 -0.4];
+Mean_ref2 = [5.5 5.5];
+cov = corr(x, y, nlags);
+check(cov, cov_ref2);
+[cov, Mean] = corr(x, y, nlags);
+check([cov, Mean], [cov_ref2, Mean_ref2]);
+endfunction
+// corr updates mode
+function test_corr_updates()
+load(test_path + 'corr_updates_ref.dat',..
+    'w1_ref', 'xu1_ref', 'w2_ref', 'xu2_ref', 'w3_ref', 'xu3_ref',..
+    'w4_ref', 'xu4_ref', 'w5_ref', 'xu5_ref', 'w6_ref', 'xu6_ref',..
+    'w7_ref', 'xu7_ref', 'w8_ref', 'xu8_ref', 'w9_ref', 'xu9_ref');
+[w1,xu1] = corr('updt', [1:10], zeros(1,8));
+check([w1, xu1], [w1_ref, xu1_ref]);
+[w2, xu2] = corr('updt', [1:8], [%i %i %i %i]);
+check([w2, xu2], [w2_ref, xu2_ref]);
+[w3, xu3] = corr('updt', [1:8], [1:8], zeros(1,8));
+check([w3, xu3], [w3_ref, xu3_ref]);
+[w4, xu4] = corr('updt', [1:10], [1:10],zeros(1,8));
+check([w4, xu4], [w4_ref, xu4_ref]);
+[w5, xu5] = corr('updt', [1:10], [1:10],ones(1,8));
+check([w5, xu5], [w5_ref, xu5_ref]);
+[w6, xu6] = corr('updt', [1:10], [5 10 6 4 8 2 9 3 1 7], zeros(1,8));
+check([w6, xu6], [w6_ref, xu6_ref]);
+[w7, xu7] = corr('updt', [1:8], [1:8], zeros(1,8), zeros(1,8));
+check([w7, xu7], [w7_ref, xu7_ref]);
+[w8, xu8] = corr('updt', [1:8], [1:8], zeros(1,8), 0);
+check([w8, xu8], [w8_ref, xu8_ref]);
+[w9, xu9] = corr('updt', [1:8], [1:8], zeros(1,8), [5 2 6 5 3 7 4 5]);
+check([w9, xu9], [w9_ref, xu9_ref]);
+endfunction
+// corr fft mode
+function test_corr_fft()
+load(test_path + 'corr_fft_ref.dat',..
+    'x', 'c1_ref', 'm1_ref', 'c2_ref', 'm2_ref');
+// x = rand(1,64);
+y = -x;
+deff('[z]=xx(inc,is)', 'z=x(is:is+inc-1)');
+deff('[z]=yy(inc,is)', 'z=y(is:is+inc-1)');
+[c1, m1] = corr('fft', xx, 64, 4);
+check([c1, m1], [c1_ref, m1_ref]);
+[c2, m2] = corr('fft', xx, yy, 64, 4);
+check([c2, m2], [c2_ref, m2_ref]);
+endfunction
+// **** Part II: performing the tests ****
+// wrap all tests together
+function test_corr()
+test_corr_old();
+test_corr_default();
+test_corr_updates();
+test_corr_fft();
+endfunction
+test_corr();
index b1c17f3..4162145 100644 (file)
-// =============================================================================
+// -*- scilab -*-
+
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO
+// Copyright (C) 2008 - Digiteo - unknown author
+// Copyright (C) 2009 - Digiteo - Vincent LIARD
 //
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at    
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// 'corr' unit tests
+
+test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
+
+// requires test_utilities.sci
+exec(test_path + 'test_utilities.sci');
+
+// ****************************************************************
+// * Part I: defining the tests                                   *
+// * Part II: performing the tests                                *
+// ****************************************************************
 
+// **** Part I: defining the tests ****
 
+// old tests wrapped
+function test_corr_old() 
 rand('normal');
-x=rand(1,256);
-y=-x;
-deff('[z]=xx(inc,is)','z=x(is:is+inc-1)');
-deff('[z]=yy(inc,is)','z=y(is:is+inc-1)');
+x = rand(1,256);
+y = -x;
 [c, mxy]=corr(x,y,32);
 if or(size(c)<>[1 32]) then pause,end
 if or(size(mxy)<>[1 2]) then pause,end
-
-x=x-mxy(1)*ones(x);
-y=y-mxy(2)*ones(y);
-c1=corr(x,y,32);
-c2=corr(x,32);
+x = x-mxy(1)*ones(x);
+y = y-mxy(2)*ones(y);
+c1 = corr(x,y,32);
+c2 = corr(x,32);
 if norm(c1+c2,1) > %eps then pause,end
-
+deff('[z]=xx(inc,is)','z=x(is:is+inc-1)');
+deff('[z]=yy(inc,is)','z=y(is:is+inc-1)');
 [c3,m3]=corr('fft',xx,yy,256,32);
 if norm(c1-c3,1) > 10 *%eps then pause,end
-
 [c4,m4]=corr('fft',xx,256,32);
 if or(size(c4)<>[1 32]) then pause,end
 if or(size(m4)<>[1 1]) then pause,end
-
 if norm(m3,1) > %eps then pause,end
 if norm(m4,1) > %eps then pause,end
 if norm(c3-c1,1) > 10*%eps then pause,end
 if norm(c4-c2,1) > 10*%eps then pause,end
+endfunction
+
+// corr default mode
+function test_corr_default()
+x = [1:10];
+y = [5 10 6 4 8 2 9 3 1 7];
+nlags = 3;
+// x, nlag provided
+cov_ref1 = [8.25 5.775 3.4];
+Mean_ref1 = 5.5;
+cov = corr(x, nlags);
+check(cov, cov_ref1);
+[cov, Mean] = corr(x, nlags);
+check([cov, Mean], [cov_ref1, Mean_ref1]);
+// x, y, nlag provided
+cov_ref2 = [-2.55 -2.825 -0.4];
+Mean_ref2 = [5.5 5.5];
+cov = corr(x, y, nlags);
+check(cov, cov_ref2);
+[cov, Mean] = corr(x, y, nlags);
+check([cov, Mean], [cov_ref2, Mean_ref2]);
+endfunction
+
+// corr updates mode
+function test_corr_updates()
+load(test_path + 'corr_updates_ref.dat',..
+    'w1_ref', 'xu1_ref', 'w2_ref', 'xu2_ref', 'w3_ref', 'xu3_ref',..
+    'w4_ref', 'xu4_ref', 'w5_ref', 'xu5_ref', 'w6_ref', 'xu6_ref',..
+    'w7_ref', 'xu7_ref', 'w8_ref', 'xu8_ref', 'w9_ref', 'xu9_ref');
+[w1,xu1] = corr('updt', [1:10], zeros(1,8));
+check([w1, xu1], [w1_ref, xu1_ref]);
+[w2, xu2] = corr('updt', [1:8], [%i %i %i %i]);
+check([w2, xu2], [w2_ref, xu2_ref]);
+[w3, xu3] = corr('updt', [1:8], [1:8], zeros(1,8));
+check([w3, xu3], [w3_ref, xu3_ref]);
+[w4, xu4] = corr('updt', [1:10], [1:10],zeros(1,8));
+check([w4, xu4], [w4_ref, xu4_ref]);
+[w5, xu5] = corr('updt', [1:10], [1:10],ones(1,8));
+check([w5, xu5], [w5_ref, xu5_ref]);
+[w6, xu6] = corr('updt', [1:10], [5 10 6 4 8 2 9 3 1 7], zeros(1,8));
+check([w6, xu6], [w6_ref, xu6_ref]);
+[w7, xu7] = corr('updt', [1:8], [1:8], zeros(1,8), zeros(1,8));
+check([w7, xu7], [w7_ref, xu7_ref]);
+[w8, xu8] = corr('updt', [1:8], [1:8], zeros(1,8), 0);
+check([w8, xu8], [w8_ref, xu8_ref]);
+[w9, xu9] = corr('updt', [1:8], [1:8], zeros(1,8), [5 2 6 5 3 7 4 5]);
+check([w9, xu9], [w9_ref, xu9_ref]);
+endfunction
+
+// corr fft mode
+function test_corr_fft()
+load(test_path + 'corr_fft_ref.dat',..
+    'x', 'c1_ref', 'm1_ref', 'c2_ref', 'm2_ref');
+// x = rand(1,64);
+y = -x;
+deff('[z]=xx(inc,is)', 'z=x(is:is+inc-1)');
+deff('[z]=yy(inc,is)', 'z=y(is:is+inc-1)');
+[c1, m1] = corr('fft', xx, 64, 4);
+check([c1, m1], [c1_ref, m1_ref]);
+[c2, m2] = corr('fft', xx, yy, 64, 4);
+check([c2, m2], [c2_ref, m2_ref]);
+endfunction
+
+// **** Part II: performing the tests ****
+
+// wrap all tests together
+function test_corr()
+test_corr_old();
+test_corr_default();
+test_corr_updates();
+test_corr_fft();
+endfunction
 
\ No newline at end of file
+test_corr();
diff --git a/scilab/modules/signal_processing/tests/unit_tests/corr_fft_ref.dat b/scilab/modules/signal_processing/tests/unit_tests/corr_fft_ref.dat
new file mode 100644 (file)
index 0000000..bd8c6ad
Binary files /dev/null and b/scilab/modules/signal_processing/tests/unit_tests/corr_fft_ref.dat differ
diff --git a/scilab/modules/signal_processing/tests/unit_tests/corr_updates_ref.dat b/scilab/modules/signal_processing/tests/unit_tests/corr_updates_ref.dat
new file mode 100644 (file)
index 0000000..ea4922e
Binary files /dev/null and b/scilab/modules/signal_processing/tests/unit_tests/corr_updates_ref.dat differ
index fdd4ca0..641e02a 100644 (file)
@@ -1,9 +1,23 @@
-// =============================================================================
+// -*- scilab -*-
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO
+// Copyright (C) 2008 - Digiteo - unknown author
+// Copyright (C) 2009 - Digiteo - Vincent LIARD
 //
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at    
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+// 'corr' unit tests
+test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
+// requires test_utilities.sci
+// ****************************************************************
+// * Part I: defining the tests                                   *
+// * Part II: performing the tests                                *
+// ****************************************************************
+// **** Part I: defining the tests ****
+// old tests wrapped
+function test_fft_old()
 a = [1;2;3];
 n=size(a,'*');
 r1 = norm(1/n*exp(2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,1));
@@ -16,3 +30,46 @@ N = size(t,'*');
 s = sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4)+grand(1,N,'nor',0,1);
 y = fft(s);
 if or(size(y) <> [1 601]) then bugmes();quit;end
+endfunction
+function test_fft_1d()
+// TODO: add checks for reverse fft
+load(test_path + 'fft_1dim.dat', 'y_ref');
+a = [1 2 3 4 5 6 7 8 9 10 11 12];
+check(fft(a), y_ref);
+endfunction
+function test_fft_2d()
+// TODO: add checks for reverse fft
+load(test_path + 'fft_2dim.dat', 'y1_ref', 'y2_ref', 'y3_ref', 'y4_ref');
+// rows number and cols number power of 2
+a1 = [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];
+check(y1_ref, fft(a1));
+// rows number power of 2
+a2 = [1 2 3;4 5 6;7 8 9;10 11 12];
+check(y2_ref, fft(a2));
+// cols number power of 2
+a3 = [1 2 3 4;5 6 7 8;9 10 11 12];
+check(y3_ref, fft(a3));
+// neither rows nor cols power of 2
+a4 = [1 2 3;4 5 6;7 8 9];
+check(y4_ref, fft(a4));
+endfunction
+function test_fft_ndim()
+// these tests may be improperly tailored...
+// TODO: add tests for forward fft
+load(test_path + 'fft_ndim.dat', 'y1_ref', 'y2_ref', 'y3_ref');
+a1 = [1 2 3 4 5 6 7 8 9 10 11 12];
+check(y1_ref, fft(a1, -1, 3, 2));
+a2 = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];
+check(y2_ref, fft(a2, -1, [2 3 5], [1 2 6]));
+a3 = [1 2 3 4 5 6 7 8 9];
+check(y3_ref, fft(a3,-1,[3 3],[1 3]));
+endfunction
+// **** Part II: performing the tests ****
+// wrap all tests together
+function test_fft()
+test_fft_old();
+test_fft_1d();
+test_fft_2d();
+test_fft_ndim();
+endfunction
+test_fft();
index 53105f1..43e4a2c 100644 (file)
@@ -1,23 +1,89 @@
-// =============================================================================
+// -*- scilab -*-
+
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO
+// Copyright (C) 2008 - Digiteo - unknown author
+// Copyright (C) 2009 - Digiteo - Vincent LIARD
 //
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at    
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// 'fft' unit tests
+
+test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
+
+// requires test_utilities.sci
+exec(test_path + 'test_utilities.sci');
+
+// ****************************************************************
+// * Part I: defining the tests                                   *
+// * Part II: performing the tests                                *
+// ****************************************************************
+
+// **** Part I: defining the tests ****
 
+// old tests wrapped
+function test_fft_old()
 a = [1;2;3];
 n=size(a,'*');
 r1 = norm(1/n*exp(2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,1));
 if r1 > 10 *%eps then pause,end
-
 r2 = norm(exp(-2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,-1));
 if r2 > 100 *%eps then pause,end
 sample_rate = 1000;
 t = 0:1/sample_rate:0.6;
 N = size(t,'*');
 s = sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4)+grand(1,N,'nor',0,1);
 y = fft(s);
 if or(size(y) <> [1 601]) then pause,end
+endfunction
+
+function test_fft_1d()
+// TODO: add checks for reverse fft
+load(test_path + 'fft_1dim.dat', 'y_ref');
+a = [1 2 3 4 5 6 7 8 9 10 11 12];
+check(fft(a), y_ref);
+endfunction
+
+function test_fft_2d()
+// TODO: add checks for reverse fft
+load(test_path + 'fft_2dim.dat', 'y1_ref', 'y2_ref', 'y3_ref', 'y4_ref');
+// rows number and cols number power of 2
+a1 = [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];
+check(y1_ref, fft(a1));
+// rows number power of 2
+a2 = [1 2 3;4 5 6;7 8 9;10 11 12];
+check(y2_ref, fft(a2));
+// cols number power of 2
+a3 = [1 2 3 4;5 6 7 8;9 10 11 12];
+check(y3_ref, fft(a3));
+// neither rows nor cols power of 2
+a4 = [1 2 3;4 5 6;7 8 9];
+check(y4_ref, fft(a4));
+endfunction
+
+function test_fft_ndim()
+// these tests may be improperly tailored...
+// TODO: add tests for forward fft
+load(test_path + 'fft_ndim.dat', 'y1_ref', 'y2_ref', 'y3_ref');
+a1 = [1 2 3 4 5 6 7 8 9 10 11 12];
+check(y1_ref, fft(a1, -1, 3, 2));
+a2 = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];
+check(y2_ref, fft(a2, -1, [2 3 5], [1 2 6]));
+a3 = [1 2 3 4 5 6 7 8 9];
+check(y3_ref, fft(a3,-1,[3 3],[1 3]));
+endfunction
+
+// **** Part II: performing the tests ****
+
+// wrap all tests together
+function test_fft()
+test_fft_old();
+test_fft_1d();
+test_fft_2d();
+test_fft_ndim();
+endfunction
 
\ No newline at end of file
+test_fft();
diff --git a/scilab/modules/signal_processing/tests/unit_tests/fft_1dim.dat b/scilab/modules/signal_processing/tests/unit_tests/fft_1dim.dat
new file mode 100644 (file)
index 0000000..bec18a1
Binary files /dev/null and b/scilab/modules/signal_processing/tests/unit_tests/fft_1dim.dat differ
diff --git a/scilab/modules/signal_processing/tests/unit_tests/fft_2dim.dat b/scilab/modules/signal_processing/tests/unit_tests/fft_2dim.dat
new file mode 100644 (file)
index 0000000..5b316a8
Binary files /dev/null and b/scilab/modules/signal_processing/tests/unit_tests/fft_2dim.dat differ
diff --git a/scilab/modules/signal_processing/tests/unit_tests/fft_ndim.dat b/scilab/modules/signal_processing/tests/unit_tests/fft_ndim.dat
new file mode 100644 (file)
index 0000000..e4d3eb3
Binary files /dev/null and b/scilab/modules/signal_processing/tests/unit_tests/fft_ndim.dat differ
diff --git a/scilab/modules/signal_processing/tests/unit_tests/remez.dia.ref b/scilab/modules/signal_processing/tests/unit_tests/remez.dia.ref
new file mode 100644 (file)
index 0000000..603662c
--- /dev/null
@@ -0,0 +1,12 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+iext = linspace(1,5,5);
+ds = [ones(1:5),zeros(1:5)];
+fg = linspace(0,0.5,10);
+wt = ones(fg);
+y = remez(iext,ds,fg,wt);
+if max(abs(y - [0.500 0.852 0.000 0.000])) > 0.001 then bugmes();quit;end
diff --git a/scilab/modules/signal_processing/tests/unit_tests/remez.tst b/scilab/modules/signal_processing/tests/unit_tests/remez.tst
new file mode 100644 (file)
index 0000000..8b05052
--- /dev/null
@@ -0,0 +1,14 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+iext = linspace(1,5,5);
+ds = [ones(1:5),zeros(1:5)];
+fg = linspace(0,0.5,10);
+wt = ones(fg);
+y = remez(iext,ds,fg,wt);
+
+if max(abs(y - [0.500 0.852 0.000 0.000])) > 0.001 then pause, end
index acc24d3..fac86f9 100644 (file)
@@ -7,10 +7,9 @@
 // you should have received as part of this distribution.  The terms
 // are also available at    
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-// RPEM unit tests
+// 'rpem' unit tests
 test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
 // requires test_utilities.sci
-format(25);
 n = 2;
 theta=zeros(1,3*n);
 p=eye(3*n,3*n);
index 189e840..0d13e90 100644 (file)
@@ -9,15 +9,13 @@
 // are also available at    
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
-// RPEM unit tests
+// 'rpem' unit tests
 
 test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
 
 // requires test_utilities.sci
 exec(test_path + 'test_utilities.sci');
 
-format(25);
-
 n = 2;
 theta=zeros(1,3*n);
 p=eye(3*n,3*n);
diff --git a/scilab/modules/signal_processing/tests/unit_tests/syredi.dat b/scilab/modules/signal_processing/tests/unit_tests/syredi.dat
new file mode 100644 (file)
index 0000000..a905129
Binary files /dev/null and b/scilab/modules/signal_processing/tests/unit_tests/syredi.dat differ
index 320b486..e1d4433 100644 (file)
@@ -1,19 +1,59 @@
-// =============================================================================
+// -*- scilab -*-
+
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - DIGITEO
+// Copyright (C) 2008 - Digiteo - unknown author
+// Copyright (C) 2009 - Digiteo - Vincent LIARD
 //
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at    
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// 'syredi' unit tests
+
+test_path = pathconvert(SCI + '/modules/signal_processing/tests/unit_tests');
+
+// requires test_utilities.sci
+exec(test_path + 'test_utilities.sci');
+
+// ****************************************************************
+// * Part I: defining the tests                                   *
+// * Part II: performing the tests                                *
+// ****************************************************************
 
+// **** Part I: defining the tests ****
+
+// old tests wrapped
+function test_syredi_old() 
 [fact,b2,b1,b0,c1,c0,zzeros,zpoles]=syredi(1,4,[2*%pi/10,4*%pi/10,0,0],0.02,0.001);
 ref_fact = 0.005976;
-if norm(fact-ref_fact) > 0.0000037 then pause,end
-if or(b2<>[1 1 1]) then pause,end
-if or(size(b1)<>[1 3]) then pause,end
-if b1(3)<> 1 then pause,end
-if or(b0<>[1 1 0]) then pause,end
-if or(size(c1)<>[1 3]) then pause,end
-if or(size(c0)<>[1 3]) then pause,end
-if c0(3)<> 0 then pause,end
-if or(size(zzeros)<>[1 5]) then pause,end
-if or(size(zpoles)<>[1 5]) then pause,end
+if norm(fact-ref_fact) > 0.0000037 then pause,end;
+if or(b2<>[1 1 1]) then pause,end;
+if or(size(b1)<>[1 3]) then pause,end;
+if b1(3)<> 1 then pause,end;
+if or(b0<>[1 1 0]) then pause,end;
+if or(size(c1)<>[1 3]) then pause,end;
+if or(size(c0)<>[1 3]) then pause,end;
+if c0(3)<> 0 then pause,end;
+if or(size(zzeros)<>[1 5]) then pause,end;
+if or(size(zpoles)<>[1 5]) then pause,end;
+endfunction
+
+function test_syredi_new()
+load('syredi.dat', 'fact1_ref', 'b21_ref', 'b11_ref', 'b01_ref', 'c11_ref', 'c01_ref', 'zzeros1_ref', 'zpoles1_ref', ' fact2_ref', 'b22_ref', 'b12_ref', 'b02_ref', 'c12_ref', 'c02_ref', 'zzeros2_ref', 'zpoles2_ref');
+[fact1, b21, b11, b01, c11, c01, zzeros1, zpoles1] = syredi(1, 4, [1, 2, 0, 0], 0.02, 0.001);
+check(list(fact1, b21, b11, b01, c11, c01, zzeros1, zpoles1), list(fact1_ref,b21_ref,b11_ref,b01_ref,c11_ref,c01_ref,zzeros1_ref,zpoles1_ref);
+[fact2, b22, b12, b02, c12, c02, zzeros2, zpoles2] = syredi(3, 4, [1, 2, 3, 3.01], 0.1, 0.001);
+check(list(fact2, b22, b12, b02, c12, c02, zzeros2, zpoles2), list(fact2_ref,b22_ref,b12_ref,b02_ref,c12_ref,c02_ref,zzeros2_ref,zpoles2_ref);
+endfunction
+
+// **** Part II: performing the tests ****
+
+// wrap all tests together
+function test_syredi()
+test_syredi_old();
+test_syredi_new();
+endfunction
+
+test_syredi();
index 9322827..dfc7ae1 100644 (file)
@@ -46,14 +46,15 @@ endfunction
 // unfortunately, max can't be overloaded on lists
 // (since list max is already hardwrired)
 
-// check whether objects a and b differ from less than epsilon
+// check whether objects a and b differ from less than 2*epsilon
+// (error on a and b: eps => error on a-b: 2eps)
 // (works on any list-matrix combination)
 // epsilon defaults to %eps if not provided by calling sequence
 function r=match(a,b,epsilon)
 if ~isdef('epsilon') then
   epsilon = %eps;
 end
-r = (list_max(abs(a-b)) < epsilon);
+r = (list_max(abs(a-b)) <= 2*epsilon);
 endfunction
 
 // because of test mechanism restrictions...