blob: bb4f80b3250f90d27c80b84251e33311c5bde419 [file] [log] [blame]
drhf6e904b2020-12-07 17:15:32 +00001# 2020-12-07
2#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
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.
9#
10#*************************************************************************
11#
12# Test cases for SQL functions based off the standard math library
13#
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16ifcapable !mathlib {
17 finish_test
18 return
19}
20
21do_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}
24do_execsql_test func7-110 {
25 SELECT quote(ceil(NULL)), ceil('-99.99');
26} {NULL -99.0}
27do_execsql_test func7-200 {
drh63f8f982020-12-07 21:13:06 +000028 SELECT round(ln(5),2), log(100.0), log(100), log(2,'256');
drhf6e904b2020-12-07 17:15:32 +000029} {1.61 2.0 2.0 8.0}
30do_execsql_test func7-210 {
drh63f8f982020-12-07 21:13:06 +000031 SELECT ln(-5), log(-5,100.0);
drhf6e904b2020-12-07 17:15:32 +000032} {{} {}}
33
drh63f8f982020-12-07 21:13:06 +000034# Test cases derived from PostgreSQL documentation
35#
36do_execsql_test func7-pg-100 {
37 SELECT abs(-17.4)
38} {17.4}
39do_execsql_test func7-pg-110 {
40 SELECT ceil(42.2)
41} {43.0}
42do_execsql_test func7-pg-120 {
43 SELECT ceil(-42.2)
44} {-42.0}
45do_execsql_test func7-pg-130 {
46 SELECT round(exp(1.0),7)
47} {2.7182818}
48do_execsql_test func7-pg-140 {
49 SELECT floor(42.8)
50} {42.0}
51do_execsql_test func7-pg-150 {
52 SELECT floor(-42.8)
53} {-43.0}
54do_execsql_test func7-pg-160 {
55 SELECT round(ln(2.0),7)
56} {0.6931472}
57do_execsql_test func7-pg-170 {
58 SELECT log(100.0)
59} {2.0}
60do_execsql_test func7-pg-180 {
61 SELECT log10(1000.0)
62} {3.0}
drh724e2982022-05-25 13:10:29 +000063do_execsql_test func7-pg-181 {
64 SELECT format('%.30f', log10(100.0) );
65} {2.000000000000000000000000000000}
66do_execsql_test func7-pg-182 {
67 SELECT format('%.30f', ln(exp(2.0)) );
68} {2.000000000000000000000000000000}
drh63f8f982020-12-07 21:13:06 +000069do_execsql_test func7-pg-190 {
70 SELECT log(2.0, 64.0)
71} {6.0}
72do_execsql_test func7-pg-200 {
73 SELECT mod(9,4);
74} {1.0}
75do_execsql_test func7-pg-210 {
76 SELECT round(pi(),7);
77} {3.1415927}
78do_execsql_test func7-pg-220 {
79 SELECT power(9,3);
80} {729.0}
81do_execsql_test func7-pg-230 {
82 SELECT round(radians(45.0),7);
83} {0.7853982}
84do_execsql_test func7-pg-240 {
85 SELECT round(42.4);
86} {42.0}
87do_execsql_test func7-pg-250 {
88 SELECT round(42.4382,2);
89} {42.44}
90do_execsql_test func7-pg-260 {
91 SELECT sign(-8.4);
92} {-1}
93do_execsql_test func7-pg-270 {
94 SELECT round( sqrt(2), 7);
95} {1.4142136}
96do_execsql_test func7-pg-280 {
97 SELECT trunc(42.8), trunc(-42.8);
98} {42.0 -42.0}
99do_execsql_test func7-pg-300 {
100 SELECT acos(1);
101} {0.0}
102do_execsql_test func7-pg-301 {
103 SELECT degrees(acos(0.5));
104} {60.0}
105do_execsql_test func7-pg-310 {
106 SELECT round( asin(1), 7);
107} {1.5707963}
108do_execsql_test func7-pg-311 {
109 SELECT degrees( asin(0.5) );
110} {30.0}
111do_execsql_test func7-pg-320 {
112 SELECT round( atan(1), 7);
113} {0.7853982}
114do_execsql_test func7-pg-321 {
115 SELECT degrees( atan(1) );
116} {45.0}
117do_execsql_test func7-pg-330 {
118 SELECT round( atan2(1,0), 7);
119} {1.5707963}
120do_execsql_test func7-pg-331 {
121 SELECT degrees( atan2(1,0) );
122} {90.0}
123do_execsql_test func7-pg-400 {
124 SELECT cos(0);
125} {1.0}
126do_execsql_test func7-pg-401 {
127 SELECT cos( radians(60.0) );
128} {0.5}
129do_execsql_test func7-pg-400 {
130 SELECT cos(0);
131} {1.0}
132do_execsql_test func7-pg-410 {
133 SELECT round( sin(1), 7);
134} {0.841471}
135do_execsql_test func7-pg-411 {
136 SELECT sin( radians(30) );
137} {0.5}
138do_execsql_test func7-pg-420 {
139 SELECT round( tan(1), 7);
140} {1.5574077}
141do_execsql_test func7-pg-421 {
142 SELECT tan( radians(45) );
143} {1.0}
144do_execsql_test func7-pg-500 {
145 SELECT round( sinh(1), 7);
146} {1.1752012}
147do_execsql_test func7-pg-510 {
148 SELECT round( cosh(0), 7);
149} {1.0}
150do_execsql_test func7-pg-520 {
151 SELECT round( tanh(1), 7);
152} {0.7615942}
153do_execsql_test func7-pg-530 {
154 SELECT round( asinh(1), 7);
155} {0.8813736}
156do_execsql_test func7-pg-540 {
157 SELECT round( acosh(1), 7);
158} {0.0}
159do_execsql_test func7-pg-550 {
160 SELECT round( atanh(0.5), 7);
161} {0.5493061}
162
163# Test cases derived from MySQL documentation
164#
165do_execsql_test func7-mysql-100 {
166 SELECT acos(1);
167} {0.0}
168do_execsql_test func7-mysql-110 {
169 SELECT acos(1.0001);
170} {{}}
171do_execsql_test func7-mysql-120 {
172 SELECT round( acos(0.0), 7);
173} {1.5707963}
174do_execsql_test func7-mysql-130 {
175 SELECT round( asin(0.2), 7);
176} {0.2013579}
177do_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.
182do_execsql_test func7-mysql-150 {
183 SELECT round( atan(2), 7), round( atan(-2), 7);
184} {1.1071487 -1.1071487}
185do_execsql_test func7-mysql-160 {
186 SELECT round( atan2(-2,2), 7), round( atan2(pi(),0), 7);
187} {-0.7853982 1.5707963}
188do_execsql_test func7-mysql-170 {
189 SELECT ceiling(1.23), ceiling(-1.23);
190} {2.0 -1.0}
191do_execsql_test func7-mysql-180 {
192 SELECT cos(pi());
193} {-1.0}
194do_execsql_test func7-mysql-190 {
195 SELECT degrees(pi()), degrees(pi()/2);
196} {180.0 90.0}
197do_execsql_test func7-mysql-190 {
198 SELECT round( exp(2), 7), round( exp(-2), 7), exp(0);
199} {7.3890561 0.1353353 1.0}
200do_execsql_test func7-mysql-200 {
201 SELECT floor(1.23), floor(-1.23);
202} {1.0 -2.0}
203do_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
210do_execsql_test func7-mysql-230 {
drh02d6f9b2021-01-29 16:20:16 +0000211 SELECT log(2,65536), log(10,100), quote(log(1,100)), quote(log(0,100));
212} {16.0 2.0 NULL NULL}
drh63f8f982020-12-07 21:13:06 +0000213do_execsql_test func7-mysql-240 {
drh02d6f9b2021-01-29 16:20:16 +0000214 SELECT log2(65536), quote(log2(-100)), quote(log2(0));
215} {16.0 NULL NULL}
drh63f8f982020-12-07 21:13:06 +0000216do_execsql_test func7-mysql-250 {
217 SELECT round(log10(2),7), log10(100), quote(log10(-100));
218} {0.30103 2.0 NULL}
219do_execsql_test func7-mysql-260 {
220 SELECT mod(234,10), 253%7, mod(29,9), 29%9;
221} {4.0 1 2.0 2}
222do_execsql_test func7-mysql-270 {
223 SELECT mod(34.5,3);
224} {1.5}
225do_execsql_test func7-mysql-280 {
226 SELECT pow(2,2), pow(2,-2);
227} {4.0 0.25}
228do_execsql_test func7-mysql-281 {
229 SELECT power(2,2), power(2,-2);
230} {4.0 0.25}
231do_execsql_test func7-mysql-290 {
232 SELECT round(radians(90),7);
233} {1.5707963}
234do_execsql_test func7-mysql-300 {
235 SELECT sign(-32), sign(0), sign(234);
236} {-1 0 1}
237do_execsql_test func7-mysql-310 {
238 SELECT sin(pi()) BETWEEN -1.0e-15 AND 1.0e-15;
239} {1}
240do_execsql_test func7-mysql-320 {
241 SELECT sqrt(4), round(sqrt(20),7), quote(sqrt(-16));
242} {2.0 4.472136 NULL}
243do_execsql_test func7-mysql-330 {
244 SELECT tan(pi()) BETWEEN -1.0e-15 AND 1.0e-15;
245} {1}
246do_execsql_test func7-mysql-331 {
247 SELECT round(tan(pi()+1),7);
248} {1.5574077}
249
drhf6e904b2020-12-07 17:15:32 +0000250
251finish_test