Fix test after https://codereview.scilab.org/#/c/15593/
[scilab.git] / scilab / modules / development_tools / tests / unit_tests / assert / computedigits.tst
1 // Copyright (C) 2008 - INRIA - Michael Baudin
2 // Copyright (C) 2010 - DIGITEO - Michael Baudin
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
9
10 // <-- CLI SHELL MODE -->
11 // <-- ENGLISH IMPOSED -->
12
13 function flag = MY_assert_equal ( computed , expected )
14     if computed==expected then
15         flag = 1;
16     else
17         flag = 0;
18     end
19     if flag <> 1 then pause,end
20 endfunction
21
22 format("v",10);
23
24 //
25 dmax = -log(2^(-53))/log(10);
26 //
27 computed = assert_computedigits ( 1 , 1 );
28 MY_assert_equal ( computed , dmax );
29 //
30 computed = assert_computedigits ( 0 , 0 );
31 MY_assert_equal ( computed , dmax );
32 //
33 computed = assert_computedigits ( 1 , 0 );
34 MY_assert_equal ( computed , 0 );
35 //
36 computed = assert_computedigits ( 0 , 1 );
37 MY_assert_equal ( computed , 0 );
38 //
39 computed = assert_computedigits ( 3.1415926 , %pi );
40 MY_assert_equal ( computed , 7.467037797136421240 );
41 //
42 computed = assert_computedigits ( 3.1415926 , %pi , 2 );
43 MY_assert_equal ( computed , 24.804962643893318841037 );
44 //
45 computed = assert_computedigits ( [0 0 1 1] , [0 1 0 1] );
46 MY_assert_equal ( computed , [dmax 0 0 dmax] );
47 //
48 computed = assert_computedigits(ones(3,2),ones(3,2));
49 MY_assert_equal ( computed , dmax * ones(3,2) );
50 //
51 computed = assert_computedigits([%nan %nan %nan %nan],[%nan %inf -%inf 0]);
52 MY_assert_equal ( computed , [dmax 0 0 0] );
53 //
54 computed = assert_computedigits([%inf %inf %inf %inf],[%nan %inf -%inf 0]);
55 MY_assert_equal ( computed , [0 dmax 0 0] );
56 //
57 computed = assert_computedigits([-%inf -%inf -%inf -%inf],[%nan %inf -%inf 0]);
58 MY_assert_equal ( computed , [0 0 dmax 0] );
59 //
60 computed = assert_computedigits([0 0 0 0],[%nan %inf -%inf 0]);
61 MY_assert_equal ( computed , [0 0 0 dmax] );
62 //
63 computed = assert_computedigits(1.224646799D-16,8.462643383D-18);
64 MY_assert_equal ( computed , 0 );
65 //
66 computed = assert_computedigits ( 1.2345 + %i*6.7891 , 1.23456789 + %i*6.789123456 );
67 MY_assert_equal ( computed , 3.9586791728311578886235 );
68 //
69 // The sign bit of the number of digits may be wrong because
70 // ieee(2); z=max(-0,0); 1/z is -%inf
71 back = ieee();
72 ieee(2);
73 computed = assert_computedigits ( 1.e-305 , 0 );
74 MY_assert_equal ( 1/computed , %inf );
75 //
76 computed = assert_computedigits ( 0 , 1.e-305 );
77 MY_assert_equal ( 1/computed , %inf );
78 ieee(back);
79
80 //
81 // An empirically found test case
82 a = [
83 3.982729777831130693D-59
84 2.584939414228211484D-26
85 4.391531370352049090D+43
86 1.725436586898508346D+68
87 ];
88 b = [
89 3.982729777831130693D-59
90 2.584939414228211484D-26
91 4.391531370352048595D+43
92 1.725436586898508107D+68
93 ];
94 c = assert_computedigits ( a , b , 2 );
95 e = [
96 53.
97 53.
98 51.977632
99 51.678072
100 ];
101 assert_checkalmostequal ( c , e , 1.e-7 );
102 //
103 // Check that the vectorization was correct, i.e. no specific
104 // case in the processing of the data is forgotten.
105 //
106 function pI = permInverse(p)
107     // Given the permutation p, compute the
108     // inverse permutation pI.
109     N = size(p,"*")
110     pI(p) = (1:N)'
111 endfunction
112
113 a = [
114 1.234567891234567891
115 1.2345678912345678
116 1.23456789123456
117 1.234567891234
118 1.2345678912
119 1.23456789
120 1.234567
121 1.2345
122 1.23
123 1.2
124 1.
125 0.
126 %nan
127 %nan
128 %nan
129 %inf
130 %inf
131 %inf
132 -%inf
133 -%inf
134 -%inf
135 0.
136 0.
137 -0.
138 -0.
139 ];
140
141 N = size(a,"*");
142 for k = 1 : 10
143     mprintf("Test #%d\n",k);
144     p1 = grand(1,"prm",(1:N)');
145     p2 = grand(1,"prm",(1:N)');
146     computed = a(p1);
147     expected = a(p2);
148     d1 = assert_computedigits(computed,expected);
149     // Permute both computed and expected with the same permutation p3:
150     // d must not change.
151     p3 = grand(1,"prm",(1:N)');
152     computedP = computed(p3);
153     expectedP = expected(p3);
154     d2 = assert_computedigits(computedP,expectedP);
155     // Apply inverse permutation on d2.
156     pI = permInverse(p3);
157     d2 = d2(pI);
158     assert_checkequal(d1,d2);
159 end
160
161