update changelog to reflect upstream SQLite version
[sqlcipher.git] / test / func7.test
blobbb4f80b3250f90d27c80b84251e33311c5bde419
1 # 2020-12-07
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #*************************************************************************
12 # Test cases for SQL functions based off the standard math library
14 set testdir [file dirname $argv0]
15 source $testdir/tester.tcl
16 ifcapable !mathlib {
17   finish_test
18   return
21 do_execsql_test func7-100 {
22   SELECT ceil(99.9), ceiling(-99.01), floor(17), floor(-17.99);
23 } {100.0 -99.0 17 -18.0}
24 do_execsql_test func7-110 {
25   SELECT quote(ceil(NULL)), ceil('-99.99');
26 } {NULL -99.0}
27 do_execsql_test func7-200 {
28   SELECT round(ln(5),2), log(100.0), log(100), log(2,'256');
29 } {1.61 2.0 2.0 8.0}
30 do_execsql_test func7-210 {
31   SELECT ln(-5), log(-5,100.0);
32 } {{} {}}
34 # Test cases derived from PostgreSQL documentation
36 do_execsql_test func7-pg-100 {
37   SELECT abs(-17.4)
38 } {17.4}
39 do_execsql_test func7-pg-110 {
40   SELECT ceil(42.2)
41 } {43.0}
42 do_execsql_test func7-pg-120 {
43   SELECT ceil(-42.2)
44 } {-42.0}
45 do_execsql_test func7-pg-130 {
46   SELECT round(exp(1.0),7)
47 } {2.7182818}
48 do_execsql_test func7-pg-140 {
49   SELECT floor(42.8)
50 } {42.0}
51 do_execsql_test func7-pg-150 {
52   SELECT floor(-42.8)
53 } {-43.0}
54 do_execsql_test func7-pg-160 {
55   SELECT round(ln(2.0),7)
56 } {0.6931472}
57 do_execsql_test func7-pg-170 {
58   SELECT log(100.0)
59 } {2.0}
60 do_execsql_test func7-pg-180 {
61   SELECT log10(1000.0)
62 } {3.0}
63 do_execsql_test func7-pg-181 {
64   SELECT format('%.30f', log10(100.0) );
65 } {2.000000000000000000000000000000}
66 do_execsql_test func7-pg-182 {
67   SELECT format('%.30f', ln(exp(2.0)) );
68 } {2.000000000000000000000000000000}
69 do_execsql_test func7-pg-190 {
70   SELECT log(2.0, 64.0)
71 } {6.0}
72 do_execsql_test func7-pg-200 {
73    SELECT mod(9,4);
74 } {1.0}
75 do_execsql_test func7-pg-210 {
76    SELECT round(pi(),7);
77 } {3.1415927}
78 do_execsql_test func7-pg-220 {
79    SELECT power(9,3);
80 } {729.0}
81 do_execsql_test func7-pg-230 {
82    SELECT round(radians(45.0),7);
83 } {0.7853982}
84 do_execsql_test func7-pg-240 {
85    SELECT round(42.4);
86 } {42.0}
87 do_execsql_test func7-pg-250 {
88    SELECT round(42.4382,2);
89 } {42.44}
90 do_execsql_test func7-pg-260 {
91    SELECT sign(-8.4);
92 } {-1}
93 do_execsql_test func7-pg-270 {
94    SELECT round( sqrt(2), 7);
95 } {1.4142136}
96 do_execsql_test func7-pg-280 {
97    SELECT trunc(42.8), trunc(-42.8);
98 } {42.0 -42.0}
99 do_execsql_test func7-pg-300 {
100    SELECT acos(1);
101 } {0.0}
102 do_execsql_test func7-pg-301 {
103    SELECT degrees(acos(0.5));
104 } {60.0}
105 do_execsql_test func7-pg-310 {
106    SELECT round( asin(1), 7);
107 } {1.5707963}
108 do_execsql_test func7-pg-311 {
109    SELECT degrees( asin(0.5) );
110 } {30.0}
111 do_execsql_test func7-pg-320 {
112    SELECT round( atan(1), 7);
113 } {0.7853982}
114 do_execsql_test func7-pg-321 {
115    SELECT degrees( atan(1) );
116 } {45.0}
117 do_execsql_test func7-pg-330 {
118    SELECT round( atan2(1,0), 7);
119 } {1.5707963}
120 do_execsql_test func7-pg-331 {
121    SELECT degrees( atan2(1,0) );
122 } {90.0}
123 do_execsql_test func7-pg-400 {
124    SELECT cos(0);
125 } {1.0}
126 do_execsql_test func7-pg-401 {
127    SELECT cos( radians(60.0) );
128 } {0.5}
129 do_execsql_test func7-pg-400 {
130    SELECT cos(0);
131 } {1.0}
132 do_execsql_test func7-pg-410 {
133    SELECT round( sin(1), 7);
134 } {0.841471}
135 do_execsql_test func7-pg-411 {
136    SELECT sin( radians(30) );
137 } {0.5}
138 do_execsql_test func7-pg-420 {
139    SELECT round( tan(1), 7);
140 } {1.5574077}
141 do_execsql_test func7-pg-421 {
142    SELECT tan( radians(45) );
143 } {1.0}
144 do_execsql_test func7-pg-500 {
145    SELECT round( sinh(1), 7);
146 } {1.1752012}
147 do_execsql_test func7-pg-510 {
148    SELECT round( cosh(0), 7);
149 } {1.0}
150 do_execsql_test func7-pg-520 {
151    SELECT round( tanh(1), 7);
152 } {0.7615942}
153 do_execsql_test func7-pg-530 {
154    SELECT round( asinh(1), 7);
155 } {0.8813736}
156 do_execsql_test func7-pg-540 {
157    SELECT round( acosh(1), 7);
158 } {0.0}
159 do_execsql_test func7-pg-550 {
160    SELECT round( atanh(0.5), 7);
161 } {0.5493061}
163 # Test cases derived from MySQL documentation
165 do_execsql_test func7-mysql-100 {
166    SELECT acos(1);
167 } {0.0}
168 do_execsql_test func7-mysql-110 {
169    SELECT acos(1.0001);
170 } {{}}
171 do_execsql_test func7-mysql-120 {
172    SELECT round( acos(0.0), 7);
173 } {1.5707963}
174 do_execsql_test func7-mysql-130 {
175    SELECT round( asin(0.2), 7);
176 } {0.2013579}
177 do_execsql_test func7-mysql-140 {
178    SELECT asin('foo');
179 } {{}}  ;# Note: MySQL returns 0 here, not NULL.
180          # SQLite deliberately returns NULL.
181          # SQLServer and Oracle throw an error.
182 do_execsql_test func7-mysql-150 {
183    SELECT round( atan(2), 7), round( atan(-2), 7);
184 } {1.1071487 -1.1071487}
185 do_execsql_test func7-mysql-160 {
186    SELECT round( atan2(-2,2), 7), round( atan2(pi(),0), 7);
187 } {-0.7853982 1.5707963}
188 do_execsql_test func7-mysql-170 {
189    SELECT ceiling(1.23), ceiling(-1.23);
190 } {2.0 -1.0}
191 do_execsql_test func7-mysql-180 {
192    SELECT cos(pi());
193 } {-1.0}
194 do_execsql_test func7-mysql-190 {
195    SELECT degrees(pi()), degrees(pi()/2);
196 } {180.0 90.0}
197 do_execsql_test func7-mysql-190 {
198    SELECT round( exp(2), 7), round( exp(-2), 7), exp(0);
199 } {7.3890561 0.1353353 1.0}
200 do_execsql_test func7-mysql-200 {
201    SELECT floor(1.23), floor(-1.23);
202 } {1.0 -2.0}
203 do_execsql_test func7-mysql-210 {
204    SELECT round(ln(2),7), quote(ln(-2));
205 } {0.6931472 NULL}
206 #do_execsql_test func7-mysql-220 {
207 #   SELECT round(log(2),7), log(-2);
208 #} {0.6931472 NULL}
209 # log() means natural logarithm in MySQL
210 do_execsql_test func7-mysql-230 {
211    SELECT log(2,65536), log(10,100), quote(log(1,100)), quote(log(0,100));
212 } {16.0 2.0 NULL NULL}
213 do_execsql_test func7-mysql-240 {
214    SELECT log2(65536), quote(log2(-100)), quote(log2(0));
215 } {16.0 NULL NULL}
216 do_execsql_test func7-mysql-250 {
217    SELECT round(log10(2),7), log10(100), quote(log10(-100));
218 } {0.30103 2.0 NULL}
219 do_execsql_test func7-mysql-260 {
220    SELECT mod(234,10), 253%7, mod(29,9), 29%9;
221 } {4.0 1 2.0 2}
222 do_execsql_test func7-mysql-270 {
223    SELECT mod(34.5,3);
224 } {1.5}
225 do_execsql_test func7-mysql-280 {
226    SELECT pow(2,2), pow(2,-2);
227 } {4.0 0.25}
228 do_execsql_test func7-mysql-281 {
229    SELECT power(2,2), power(2,-2);
230 } {4.0 0.25}
231 do_execsql_test func7-mysql-290 {
232    SELECT round(radians(90),7);
233 } {1.5707963}
234 do_execsql_test func7-mysql-300 {
235    SELECT sign(-32), sign(0), sign(234);
236 } {-1 0 1}
237 do_execsql_test func7-mysql-310 {
238    SELECT sin(pi()) BETWEEN -1.0e-15 AND 1.0e-15;
239 } {1}
240 do_execsql_test func7-mysql-320 {
241    SELECT sqrt(4), round(sqrt(20),7), quote(sqrt(-16));
242 } {2.0 4.472136 NULL}
243 do_execsql_test func7-mysql-330 {
244    SELECT tan(pi()) BETWEEN -1.0e-15 AND 1.0e-15;
245 } {1}
246 do_execsql_test func7-mysql-331 {
247    SELECT round(tan(pi()+1),7);
248 } {1.5574077}
251 finish_test