Update tests of nthroot function.
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / nthroot.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2012 - DIGITEO - Adeline CARNIS
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7
8 // <-- ENGLISH IMPOSED -->
9
10 // <-- CLI SHELL MODE -->
11
12 // unit tests for nthroot() function 
13 // =============================================================================
14 // Run with test_run('elementary_functions', 'nthroot', ['no_check_error_output'])
15
16 // 1. Interface
17 // ============
18 assert_checkfalse(execstr("nthroot()",          "errcatch") == 0);
19 refMsg = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"), "nthroot", 2);
20 assert_checkerror("nthroot()", refMsg);
21 assert_checkfalse(execstr("nthroot(1)",         "errcatch") == 0);
22 refMsg = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"), "nthroot", 2);
23 assert_checkerror("nthroot(1)", refMsg);
24 assert_checkfalse(execstr("nthroot(%i, 1)",    "errcatch") == 0);
25 refMsg = msprintf(_("%s: Wrong type for input argument #%d: Real scalar or matrix expected.\n"), "nthroot", 1);
26 assert_checkerror("nthroot(%i, 1)", refMsg);
27 assert_checkfalse(execstr("nthroot(%t, 1)",    "errcatch") == 0);
28 refMsg = msprintf(_("%s: Wrong type for input argument #%d: Real scalar or matrix expected.\n"), "nthroot", 1);
29 assert_checkerror("nthroot(%t, 1)", refMsg);
30 assert_checkfalse(execstr("nthroot(-2, %nan)", "errcatch") == 0);
31 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
32 assert_checkerror("nthroot(-2, %nan)", refMsg);
33 assert_checkfalse(execstr("nthroot(-2, %eps)", "errcatch") == 0);
34 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
35 assert_checkerror("nthroot(-2, %eps)", refMsg);
36 assert_checkfalse(execstr("nthroot(-3, 6)",     "errcatch") == 0);
37 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
38 assert_checkerror("nthroot(-3, 6)", refMsg);
39 assert_checkfalse(execstr("nthroot(-3, 0)",     "errcatch") == 0);
40 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
41 assert_checkerror("nthroot(-3, 0)", refMsg);
42 assert_checkfalse(execstr("nthroot(-%inf, -2)", "errcatch") == 0);
43 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
44 assert_checkerror("nthroot(-%inf, -2)", refMsg);
45 assert_checkfalse(execstr("nthroot(-2, -2)",     "errcatch") == 0);
46 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
47 assert_checkerror("nthroot(-2, -2)", refMsg);
48 assert_checkfalse(execstr("nthroot(-2, 2)",      "errcatch") == 0);
49 refMsg = msprintf(_("%s: If x is negative, then n must contain odd integers only.\n"), "nthroot");
50 assert_checkerror("nthroot(-2, 2)", refMsg);
51
52 assert_checktrue(nthroot(3, []) == 3);
53
54 // 2. Singular Values
55 // ==================
56 assert_checkalmostequal(nthroot(2   ,-2), 0.7071068, 1.e-5);
57 assert_checkalmostequal(nthroot(2   , 2), 1.4142136, 1.e-5);
58 assert_checkalmostequal(nthroot(%eps, 3), 0.0000061, 1.e-2);
59 assert_checkalmostequal(nthroot([1 2], 2)    , [1 1.4142136], 1.e-5);
60 assert_checkalmostequal(nthroot([1 2], [2 2]), [1 1.4142136], 1.e-5);
61 assert_checkequal(nthroot(-2,  %inf), -1);
62 assert_checkequal(nthroot( 3 , %inf), 1);
63 assert_checkequal(nthroot( 3 ,-%inf), 1);
64 assert_checkequal(nthroot(-3,  %inf), -1);
65 assert_checkequal(nthroot( 3 , %nan), %nan);
66 assert_checkequal(nthroot( 3 ,-%nan), %nan);
67 assert_checkequal(nthroot( 3 , %eps), %inf);
68 assert_checkequal(nthroot( 3 ,-%eps), 0);
69 assert_checkequal(nthroot( 3 , 0), %inf);
70 assert_checkequal(nthroot( 1 , 0), %nan);
71
72 assert_checkequal(nthroot([1 2], %inf), [1 1]);
73 assert_checkequal(nthroot([1 2], %nan), [%nan %nan]);
74 assert_checkequal(nthroot([1 2], %eps), [1 %inf]);
75 assert_checkequal(nthroot([1 2], 0),    [%nan %inf]);
76 assert_checkequal(nthroot([1 2], [%inf %inf]), [1 1]);
77 assert_checkequal(nthroot([1 2], [%nan %nan]), [%nan %nan]);
78 assert_checkequal(nthroot([1 2], [%eps %eps]), [1 %inf]);
79 assert_checkequal(nthroot([1 2], [0 0]),       [%nan %inf]);
80
81 assert_checkequal(nthroot(0, 0),    0);
82 assert_checkequal(nthroot(0, 7),    0);
83 assert_checkequal(nthroot(0,-7),    %inf);
84 assert_checkequal(nthroot(0, %inf), 1);
85 assert_checkequal(nthroot(0,-%inf), 1);
86 assert_checkequal(nthroot(0, %nan), %nan);
87 assert_checkequal(nthroot(0, %eps), 0);
88 assert_checkequal(nthroot(0,-%eps), %inf);
89
90 assert_checkequal(nthroot([0;-1], %inf), [1; -1]);
91 assert_checkequal(nthroot([0; 1], 0),    [0; %nan]);
92 assert_checkequal(nthroot([0;-1], [%inf; %inf]), [1; -1]);
93 assert_checkequal(nthroot([0; 1], [0; 0]),       [0; %nan]);
94
95 // 3. Empty Matrix
96 //==================
97 assert_checkequal(nthroot([],-2),    []);
98 assert_checkequal(nthroot([], 3),    []);
99 assert_checkequal(nthroot([], %nan), []);
100 assert_checkequal(nthroot([], %inf), []);
101 assert_checkequal(nthroot([],-%inf), []);
102 assert_checkequal(nthroot([], %eps), []);
103 assert_checkequal(nthroot([],-%eps), []);
104 assert_checkequal(nthroot([], 0),    []);
105
106 // 4. Limit Values
107 // ================
108 assert_checkequal(nthroot(-%inf,-7),    0);
109 assert_checkequal(nthroot(-%inf, 7),   -%inf);
110 assert_checkequal(nthroot( %inf,-7),    0);
111 assert_checkequal(nthroot( %inf, 7),    %inf);
112 assert_checkequal(nthroot( %inf, %inf), 1);
113 assert_checkequal(nthroot( %inf,-%inf), 1);
114 assert_checkequal(nthroot(-%inf, %inf), -1);
115 assert_checkequal(nthroot(-%inf,-%inf), -1);
116 assert_checkequal(nthroot( %inf, %inf), 1);
117 assert_checkequal(nthroot( %inf, %nan), %nan);
118 assert_checkequal(nthroot( %inf, %eps), %inf);
119 assert_checkequal(nthroot( %inf,-%eps), 0);
120 assert_checkequal(nthroot( %inf, 0),    %inf);
121
122 assert_checkequal(nthroot([%inf; %nan], 3),    [%inf; %nan]);
123 assert_checkequal(nthroot([%inf; %nan], %nan), [%nan; %nan]);
124 assert_checkequal(nthroot([%inf; %nan], 0),    [%inf; %nan]);
125 assert_checkequal(nthroot([%inf; %nan], [3; 3]),       [%inf; %nan]);
126 assert_checkequal(nthroot([%inf; %nan], [%nan; %nan]), [%nan; %nan]);
127 assert_checkequal(nthroot([%inf; %nan], [0; 0]),       [%inf; %nan]);
128
129 assert_checkequal(nthroot([%inf; %eps], %eps), [%inf; 0]);
130 assert_checkequal(nthroot([%inf; %eps], %nan), [%nan; %nan]);
131 assert_checkequal(nthroot([%inf; 1],    0),    [%inf; %nan]);
132 assert_checkequal(nthroot([%inf; %eps], [%eps; %eps]), [%inf; 0]);
133 assert_checkequal(nthroot([%inf; %eps], [%nan; %nan]), [%nan; %nan]);
134 assert_checkequal(nthroot([%inf; 1],    [0; 0]),       [%inf; %nan]);
135
136 // 5. Not A Number
137 // =================
138 assert_checkequal(nthroot(%nan,-2),   %nan);
139 assert_checkequal(nthroot(%nan, %inf), %nan);
140 assert_checkequal(nthroot(%nan,-%inf), %nan);
141 assert_checkequal(nthroot(%nan,-%eps), %nan);
142 assert_checkequal(nthroot(%nan, 0),    %nan);
143
144 // 6. X = %eps
145 // ===========
146 assert_checkequal(nthroot( %eps, %inf), 1);
147 assert_checkequal(nthroot( %eps,-%inf), 1);
148 assert_checkequal(nthroot(-%eps, %inf),-1);
149 assert_checkequal(nthroot(-%eps,-%inf),-1);
150 assert_checkequal(nthroot( %eps, %inf), 1);
151 assert_checkequal(nthroot( %eps, %nan), %nan);
152 assert_checkequal(nthroot( %eps, %eps), 0);
153 assert_checkequal(nthroot( %eps,-%eps), %inf);
154 assert_checkequal(nthroot( %eps, 0),    0);