1fdfe2f0bd41d4f58dc263e4efc4e87a40cdc29e
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / complex.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2011 - DIGITEO - Michael Baudin
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7
8 // <-- CLI SHELL MODE -->
9
10 function [flag,errmsg] = assert_equal ( computed , expected )
11     //  Check that computed and expected are equal.
12
13     function flag = comparedoubles ( computed , expected )
14         [cnonan , cnumb] = mythrownan(computed)
15         [enonan , enumb] = mythrownan(expected)
16         if ( and(enonan == cnonan) & and(enumb == cnumb) ) then
17             flag = %t
18         else
19             flag = %f
20         end
21     endfunction
22
23     function [nonan,numb] = mythrownan(x)
24         [lhs,rhs]=argn(0)
25         if ( rhs<>1 ) then 
26             error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"thrownan",1))
27         end
28         numb=find(bool2s(~isnan(x)))
29         nonan=x(~isnan(x))
30     endfunction
31
32     [lhs,rhs]=argn()
33     if ( rhs <> 2 ) then
34         errmsg = sprintf ( gettext ( "%s: Wrong number of input arguments: %d expected.\n") , "assert_checkequal" , 2 )
35         error(errmsg)
36     end
37     //
38     // Check types of variables
39     if ( typeof(computed) <> typeof(expected) ) then
40         errmsg = sprintf ( gettext ( "%s: Incompatible input arguments #%d and #%d: Same types expected.\n" ) , "assert_checkequal" , 1 , 2 )
41         error(errmsg)
42     end
43     //
44     // Check sizes of variables
45     ncom = size(computed)
46     nexp = size(expected)
47     if ( or(ncom <> nexp) ) then
48         errmsg = sprintf ( gettext ( "%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n") , "assert_checkequal" , 1 , 2 )
49         error(errmsg)
50     end  
51     //
52     if ( type(computed) == 1 & type(expected) == 1 ) then
53         // These are two matrices of doubles
54         cisreal = isreal(computed)
55         eisreal = isreal(expected)
56         if ( cisreal & ~eisreal ) then
57             errmsg = sprintf ( gettext ( "%s: Computed is real, but expected is complex.") , "assert_checkequal" )
58             error(errmsg)
59         end
60         if ( ~cisreal & eisreal ) then
61             errmsg = sprintf ( gettext ( "%s: Computed is complex, but expected is real.") , "assert_checkequal" )
62             error(errmsg)
63         end
64         if ( cisreal & eisreal ) then
65             flag = comparedoubles ( computed , expected )
66         else
67             flagreal = comparedoubles ( real(computed) , real(expected) )
68             if ( flagreal ) then
69                 flagimag = comparedoubles ( imag(computed) , imag(expected) )
70                 flag = flagimag
71             else
72                 flag = %f
73             end
74         end
75     else
76         if ( and ( computed == expected ) ) then
77             flag = %t
78         else
79             flag = %f
80         end
81     end
82     if ( flag == %t ) then
83         errmsg = ""
84     else
85         // Change the message if the matrix contains more than one value
86         if ( size(expected,"*") == 1 ) then
87             estr = string(expected)
88         else
89             estr = "[" + string(expected(1)) + " ...]"
90         end
91         if ( size(computed,"*") == 1 ) then
92             cstr = string(computed)
93         else
94             cstr = "[" + string(computed(1)) + " ...]"
95         end
96         errmsg = msprintf(gettext("%s: Assertion failed: expected = %s while computed = %s"),"assert_checkequal",estr,cstr)
97         if ( lhs < 2 ) then
98             // If no output variable is given, generate an error
99             error ( errmsg )
100         end
101     end
102 endfunction
103
104
105
106
107 c = complex(1,2);
108 assert_equal([real(c);imag(c)],[1;2]);
109 //
110 c = complex([1 2],[3 4]);
111 assert_equal([real(c);imag(c)],[1 2;3 4]);
112 //
113 c = complex(%inf,%inf);
114 assert_equal([real(c);imag(c)],[%inf;%inf]);
115 //
116 c = complex(%inf,%nan);
117 assert_equal([real(c);imag(c)],[%inf;%nan]);
118 //
119 c = complex(%nan,%nan);
120 assert_equal([real(c);imag(c)],[%nan;%nan]);
121 //
122 c = complex(%nan,%inf);
123 assert_equal([real(c);imag(c)],[%nan;%inf]);
124 //
125 c = complex(0,%nan);
126 assert_equal([real(c);imag(c)],[0;%nan]);
127 //
128 c = complex(0,%inf);
129 assert_equal([real(c);imag(c)],[0;%inf]);
130 //
131 c = complex(1);
132 assert_equal([real(c);imag(c)],[1;0]);
133 //
134 c = complex([1 2]);
135 assert_equal([real(c);imag(c)],[1 2;0 0]);
136 //
137 c = complex([1 2 3], 4);
138 assert_equal([real(c);imag(c)],[1 2 3;4 4 4]);
139 //
140 c = complex(1, [2 3 4]);
141 assert_equal([real(c);imag(c)],[1 1 1;2 3 4]);