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