52f90bed1f77937d9eee775d1d52727346aef0b0
[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 lasterror(execstr("10000","errcatch") == 0)
20 assert_checkfalse(execstr("nthroot(1)",         "errcatch") == 0);
21 lasterror(execstr("10000","errcatch") == 0)
22 assert_checkfalse(execstr("nthroot(%i, 1)",    "errcatch") == 0);
23 lasterror(execstr("10000","errcatch") == 0)
24 assert_checkfalse(execstr("nthroot(%t, 1)",    "errcatch") == 0);
25 lasterror(execstr("10000","errcatch") == 0)
26 assert_checkfalse(execstr("nthroot(-2, %nan)", "errcatch") == 0);
27 lasterror(execstr("10000","errcatch") == 0)
28 assert_checkfalse(execstr("nthroot(-2, %eps)", "errcatch") == 0);
29 lasterror(execstr("10000","errcatch") == 0)
30 assert_checkfalse(execstr("nthroot(-3, 6)",     "errcatch") == 0);
31 lasterror(execstr("10000","errcatch") == 0)
32 assert_checkfalse(execstr("nthroot(-3, 0)",     "errcatch") == 0);
33 lasterror(execstr("10000","errcatch") == 0)
34 assert_checkfalse(execstr("nthroot(-%inf, -2)", "errcatch") == 0);
35 lasterror(execstr("10000","errcatch") == 0)
36 assert_checkfalse(execstr("nthroot(-2, -2)",     "errcatch") == 0);
37 lasterror(execstr("10000","errcatch") == 0)
38 assert_checkfalse(execstr("nthroot(-2, 2)",      "errcatch") == 0);
39 lasterror(execstr("10000","errcatch") == 0)
40 assert_checktrue(nthroot(3, []) == 3);
41
42 // 2. Singular Values
43 // ==================
44 assert_checkalmostequal(nthroot(2   ,-2), 0.7071068, 1.e-5);
45 assert_checkalmostequal(nthroot(2   , 2), 1.4142136, 1.e-5);
46 assert_checkalmostequal(nthroot(%eps, 3), 0.0000061, 1.e-2);
47 assert_checkalmostequal(nthroot([1 2], 2)    , [1 1.4142136], 1.e-5);
48 assert_checkalmostequal(nthroot([1 2], [2 2]), [1 1.4142136], 1.e-5);
49 assert_checkequal(nthroot(-2,  %inf), -1);
50 assert_checkequal(nthroot( 3 , %inf), 1);
51 assert_checkequal(nthroot( 3 ,-%inf), 1);
52 assert_checkequal(nthroot(-3,  %inf), -1);
53 assert_checkequal(nthroot( 3 , %nan), %nan);
54 assert_checkequal(nthroot( 3 ,-%nan), %nan);
55 assert_checkequal(nthroot( 3 , %eps), %inf);
56 assert_checkequal(nthroot( 3 ,-%eps), 0);
57 assert_checkequal(nthroot( 3 , 0), %inf);
58 assert_checkequal(nthroot( 1 , 0), %nan);
59
60 assert_checkequal(nthroot([1 2], %inf), [1 1]);
61 assert_checkequal(nthroot([1 2], %nan), [%nan %nan]);
62 assert_checkequal(nthroot([1 2], %eps), [1 %inf]);
63 assert_checkequal(nthroot([1 2], 0),    [%nan %inf]);
64 assert_checkequal(nthroot([1 2], [%inf %inf]), [1 1]);
65 assert_checkequal(nthroot([1 2], [%nan %nan]), [%nan %nan]);
66 assert_checkequal(nthroot([1 2], [%eps %eps]), [1 %inf]);
67 assert_checkequal(nthroot([1 2], [0 0]),       [%nan %inf]);
68
69 assert_checkequal(nthroot(0, 0),    0);
70 assert_checkequal(nthroot(0, 7),    0);
71 assert_checkequal(nthroot(0,-7),    %inf);
72 assert_checkequal(nthroot(0, %inf), 1);
73 assert_checkequal(nthroot(0,-%inf), 1);
74 assert_checkequal(nthroot(0, %nan), %nan);
75 assert_checkequal(nthroot(0, %eps), 0);
76 assert_checkequal(nthroot(0,-%eps), %inf);
77
78 assert_checkequal(nthroot([0;-1], %inf), [1; -1]);
79 assert_checkequal(nthroot([0; 1], 0),    [0; %nan]);
80 assert_checkequal(nthroot([0;-1], [%inf; %inf]), [1; -1]);
81 assert_checkequal(nthroot([0; 1], [0; 0]),       [0; %nan]);
82
83 // 3. Empty Matrix
84 //==================
85 assert_checkequal(nthroot([],-2),    []);
86 assert_checkequal(nthroot([], 3),    []);
87 assert_checkequal(nthroot([], %nan), []);
88 assert_checkequal(nthroot([], %inf), []);
89 assert_checkequal(nthroot([],-%inf), []);
90 assert_checkequal(nthroot([], %eps), []);
91 assert_checkequal(nthroot([],-%eps), []);
92 assert_checkequal(nthroot([], 0),    []);
93
94 // 4. Limit Values
95 // ================
96 assert_checkequal(nthroot(-%inf,-7),    0);
97 assert_checkequal(nthroot(-%inf, 7),   -%inf);
98 assert_checkequal(nthroot( %inf,-7),    0);
99 assert_checkequal(nthroot( %inf, 7),    %inf);
100 assert_checkequal(nthroot( %inf, %inf), 1);
101 assert_checkequal(nthroot( %inf,-%inf), 1);
102 assert_checkequal(nthroot(-%inf, %inf), -1);
103 assert_checkequal(nthroot(-%inf,-%inf), -1);
104 assert_checkequal(nthroot( %inf, %inf), 1);
105 assert_checkequal(nthroot( %inf, %nan), %nan);
106 assert_checkequal(nthroot( %inf, %eps), %inf);
107 assert_checkequal(nthroot( %inf,-%eps), 0);
108 assert_checkequal(nthroot( %inf, 0),    %inf);
109
110 assert_checkequal(nthroot([%inf; %nan], 3),    [%inf; %nan]);
111 assert_checkequal(nthroot([%inf; %nan], %nan), [%nan; %nan]);
112 assert_checkequal(nthroot([%inf; %nan], 0),    [%inf; %nan]);
113 assert_checkequal(nthroot([%inf; %nan], [3; 3]),       [%inf; %nan]);
114 assert_checkequal(nthroot([%inf; %nan], [%nan; %nan]), [%nan; %nan]);
115 assert_checkequal(nthroot([%inf; %nan], [0; 0]),       [%inf; %nan]);
116
117 assert_checkequal(nthroot([%inf; %eps], %eps), [%inf; 0]);
118 assert_checkequal(nthroot([%inf; %eps], %nan), [%nan; %nan]);
119 assert_checkequal(nthroot([%inf; 1],    0),    [%inf; %nan]);
120 assert_checkequal(nthroot([%inf; %eps], [%eps; %eps]), [%inf; 0]);
121 assert_checkequal(nthroot([%inf; %eps], [%nan; %nan]), [%nan; %nan]);
122 assert_checkequal(nthroot([%inf; 1],    [0; 0]),       [%inf; %nan]);
123
124 // 5. Not A Number
125 // =================
126 assert_checkequal(nthroot(%nan,-2),   %nan);
127 assert_checkequal(nthroot(%nan, %inf), %nan);
128 assert_checkequal(nthroot(%nan,-%inf), %nan);
129 assert_checkequal(nthroot(%nan,-%eps), %nan);
130 assert_checkequal(nthroot(%nan, 0),    %nan);
131
132 // 6. X = %eps
133 // ===========
134 assert_checkequal(nthroot( %eps, %inf), 1);
135 assert_checkequal(nthroot( %eps,-%inf), 1);
136 assert_checkequal(nthroot(-%eps, %inf),-1);
137 assert_checkequal(nthroot(-%eps,-%inf),-1);
138 assert_checkequal(nthroot( %eps, %inf), 1);
139 assert_checkequal(nthroot( %eps, %nan), %nan);
140 assert_checkequal(nthroot( %eps, %eps), 0);
141 assert_checkequal(nthroot( %eps,-%eps), %inf);
142 assert_checkequal(nthroot( %eps, 0),    0);