Fixed numerical precision problem in unit test cacsd/dscr : difference between releas...
Michaƫl Baudin [Wed, 28 Oct 2009 13:19:51 +0000 (14:19 +0100)]
scilab/modules/cacsd/tests/nonreg_tests/bug_3934.dia.ref
scilab/modules/cacsd/tests/nonreg_tests/bug_3934.tst
scilab/modules/cacsd/tests/nonreg_tests/bug_68.dia.ref
scilab/modules/cacsd/tests/nonreg_tests/bug_68.tst
scilab/modules/cacsd/tests/unit_tests/dscr.dia.ref
scilab/modules/cacsd/tests/unit_tests/dscr.tst

index 1b48c4a..cbbb231 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2009 - DIGITEO - Michael Baudin
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
index 48c0e67..b15cdc6 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2009 - DIGITEO - Michael Baudin
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -78,4 +79,4 @@ expected =  [
     ];
 assert_close ( computed, expected, 1.e7 );
 
-                    
\ No newline at end of file
+                    
index 40e4dd6..dc4fe0f 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2005-2008 - INRIA -Serge Steer
+// Copyright (C) 2009 - DIGITEO - Michael Baudin
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -169,8 +170,8 @@ ClosedZeros1=trzeros(closed1);
 Hrond2=System*PID;
 closed2=(1/.(Hrond2));
 ClosedZeros2=trzeros(closed2);
-computed1 = sort_merge ( ClosedZeros1 , compare_complexrealimag , list( 0.0 , 10 * %eps ) );
-computed2 = sort_merge ( ClosedZeros2 , compare_complexrealimag , list( 0.0 , 10 * %eps ) );
+computed1 = sort_merge ( ClosedZeros1 , compare_complexrealimag , [ 0.0 , 10 * %eps ] );
+computed2 = sort_merge ( ClosedZeros2 , compare_complexrealimag , [ 0.0 , 10 * %eps ] );
 computed = norm ( computed1 - computed2 );
 expected = 0.0;
 assert_close ( computed, expected, 1.e-7 );
index 920d091..4bc1244 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2005-2008 - INRIA -Serge Steer
+// Copyright (C) 2009 - DIGITEO - Michael Baudin
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
index 8cd7627..ff3e789 100644 (file)
@@ -4,12 +4,41 @@
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
-a=-1/3;b=1;c=1;
+//
+// assert_close --
+//   Returns 1 if the two real matrices computed and expected are close,
+//   i.e. if the relative distance between computed and expected is lesser than epsilon.
+// Arguments
+//   computed, expected : the two matrices to compare
+//   epsilon : a small number
+//
+function flag = assert_close ( computed, expected, epsilon )
+  if expected==0.0 then
+    shift = norm(computed-expected);
+  else
+    shift = norm(computed-expected)/norm(expected);
+  end
+  if shift < epsilon then
+    flag = 1;
+  else
+    flag = 0;
+  end
+  if flag <> 1 then bugmes();quit;end
+endfunction
+// Case #1
+a=-1/3;
+b=1;
+c=1;
 sl=syslin('c',a,b,c);
 sld=dscr(sl,0.1);
-if sld.dt<>0.1 then bugmes();quit;end
-if sld.A<>exp(sl.A*0.1) then bugmes();quit;end
-if norm(sld.B-sl.A\(sld.A-eye())*sl.B)>1d-15 then bugmes();quit;end
+assert_close ( sld.dt , 0.1 , %eps );
+computed = sld.A;
+expected = exp(sl.A*0.1);
+assert_close ( computed , expected , %eps );
+computed = sld.B;
+expected = sl.A\(sld.A-eye())*sl.B;
+assert_close ( computed , expected , %eps );
+// Case #2
 a=[0.9,0,0.6,-1.4,-4.2;
    0.2,0.1,-0.2,0.5,0.6;
    -4.3,0,2.2,0,2.4;
@@ -26,6 +55,10 @@ d=[1,0,0
    0,0,0];
 sl=syslin('c',a,b,c,d);
 sld=dscr(sl,0.1);
-if sld.dt<>0.1 then bugmes();quit;end
-if norm(sld.A-expm(sl.A*0.1))>1d-15 then bugmes();quit;end
-if norm(sld.B-sl.A\(sld.A-eye())*sl.B)>1d-14 then bugmes();quit;end
+assert_close ( sld.dt , 0.1 , %eps );
+computed = sld.A;
+expected = expm(sl.A*0.1);
+assert_close ( computed , expected , %eps );
+computed = sld.B;
+expected = sl.A\(sld.A-eye())*sl.B;
+assert_close ( computed , expected , 1.e3 * %eps );
index d7012ab..b877348 100644 (file)
@@ -4,14 +4,44 @@
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
-a=-1/3;b=1;c=1;
+
+//
+// assert_close --
+//   Returns 1 if the two real matrices computed and expected are close,
+//   i.e. if the relative distance between computed and expected is lesser than epsilon.
+// Arguments
+//   computed, expected : the two matrices to compare
+//   epsilon : a small number
+//
+function flag = assert_close ( computed, expected, epsilon )
+  if expected==0.0 then
+    shift = norm(computed-expected);
+  else
+    shift = norm(computed-expected)/norm(expected);
+  end
+  if shift < epsilon then
+    flag = 1;
+  else
+    flag = 0;
+  end
+  if flag <> 1 then pause,end
+endfunction
+
+// Case #1
+a=-1/3;
+b=1;
+c=1;
 sl=syslin('c',a,b,c);
 sld=dscr(sl,0.1);
-if sld.dt<>0.1 then pause,end
-if sld.A<>exp(sl.A*0.1) then pause,end
-if norm(sld.B-sl.A\(sld.A-eye())*sl.B)>1d-15 then pause,end
-
+assert_close ( sld.dt , 0.1 , %eps );
+computed = sld.A;
+expected = exp(sl.A*0.1);
+assert_close ( computed , expected , %eps );
+computed = sld.B;
+expected = sl.A\(sld.A-eye())*sl.B;
+assert_close ( computed , expected , %eps );
 
+// Case #2
 a=[0.9,0,0.6,-1.4,-4.2;
    0.2,0.1,-0.2,0.5,0.6;
    -4.3,0,2.2,0,2.4;
@@ -30,9 +60,12 @@ d=[1,0,0
    0,0,0];
 
 sl=syslin('c',a,b,c,d);
-
 sld=dscr(sl,0.1);
-if sld.dt<>0.1 then pause,end
-if norm(sld.A-expm(sl.A*0.1))>1d-15 then pause,end
-if norm(sld.B-sl.A\(sld.A-eye())*sl.B)>1d-14 then pause,end
+assert_close ( sld.dt , 0.1 , %eps );
+computed = sld.A;
+expected = expm(sl.A*0.1);
+assert_close ( computed , expected , %eps );
+computed = sld.B;
+expected = sl.A\(sld.A-eye())*sl.B;
+assert_close ( computed , expected , 1.e3 * %eps );